2012-03-16 21 views
6

Heroku'daki Cedar yığında bir Rails 3.2 uygulaması çalıştırıyorum.Heroku harici MySQL veritabanı bağlantısı için SSL belirtin

MySQL veritabanım için Amazon RDS kullanıyorum ve Heroku config vars'ta uygun DATABASE_URL kurulumunu kullanıyorum.

Heroku'nun Amazon RDS ile bağlantılı olarak SSL kullanmasını nasıl sağlayabilirim?

Normal olarak bu, database.yml dosyasında bir değer olarak belirtilebilir, ancak Heroku bizim için database.yml ürettiğinden, bu ayarı nasıl kontrol edeceğimi bilmiyorum.

Teşekkürler!

cevap

1

Enjekte edilen database.yml dosyasına bakmadan (http://neilmiddleton.com/sharing-databases-between-heroku-applications/'un alt kısmına bakın) db URL'sinin bir parçası olarak fazladan yapılandırmada sorgu paramları olarak geçebilirsiniz.

Teoride, bunu denememe rağmen nasıl istediğinizi ayarlamanıza izin vermelisiniz.

+1

Teşekkürler Neil. Bu harika çalıştı! Daha özel olarak, benim Heroku config DATABASE_URL bir şey gibi görünüyor: mysql2: // kullanıcı adı: password @ hostname/databasename? Sslca =/path/to/ca.pem – Nathan

12

some mysql2 SSL params, DATABASE_URL yapılandırması ile belirtebilirsiniz. Heroku oluşturma işlemi sırasında oluşturulan dinamik database.yml öğelerine öğeler olarak eklenecek ve böylece mysql2 bağlantıları oluşturulduğunda geçirilecekler.

Bu işe çalışması için geçmeniz gereken tek paragraf sslca (sslcapath ile karıştırılmamalıdır).

1. Amazon RDS CA certificate'u indirin ve uygulamanızla paketleyin.

(Düzenle) Amazon, Mart 2015'te rotating this certificate olacaktır. Bunun yerine, bu sayfadan yeni dosyaya ihtiyacınız olacak.

2.

curl https://s3.amazonaws.com/rds-downloads/mysql-ssl-ca-cert.pem > ./config/amazon-rds-ca-cert.pem

git için dosyayı ekleyin ve Heroku için yeniden dağıtın.

3. Değişim DATABASE_URLsslca geçmek:

heroku config:add DATABASE_URL="mysql2://username:[email protected]/dbname?sslca=config/amazon-rds-ca-cert.pem -a <app_id>

göreli yolu yoktur aşağıya önemli görülmesi.

Bu kadar! Şimdi SSL çalışma olduğunu, o kullanıcının tüm bağlantıları yalnızca SSL izin vermesini zorlamak isteyebilirsiniz:

GRANT USAGE ON dbname.* TO 'username'@'%' REQUIRE SSL; 

Giderme

sslca için göreli bir yol geçmek emin olun! Aksi halde, rake assets:precompile bir SSL hatasıyla bozulabilir. Hatta sadece

SSL connection error: ASN: bad other signature confirmation 

ya: sizin gibi bir hata alırsanız

SSL connection error 

...O zaman CA cert dosyasının nasıl başvurulduğu konusunda bir sorun var demektir.

+2

adım 3: -a varsayalım? heroku uygulamasının adı nedir? – jmogera

+2

Sadece bir uygulamanız varsa, bir {app_id} genellikle atlanabilir. Oturum açmış kullanıcılara hangi uygulamaların ait olduğunu görmek için terminalde '' 'heroku apps''' seçeneğini kullanın. –

+1

Ayrıca mysql bağlantı noktasını güvenlik grubumuza eklemek zorunda kaldım. Kaynak: 0.0.0.0/0 ve liman aralığı: 3306 – djburdick

İlgili konular