2012-03-16 25 views
6

私はHerokuのCedarスタックでRails 3.2アプリケーションを実行しています。Heroku外部MySQLデータベース接続にSSLを指定

私は、MySQLデータベースのためのアマゾンRDSを使用している、と私はHerokuのコンフィグVARSで適切DATABASE_URLを設定しています。

Amazon RDSとの接続でHerokuがSSLを使用するにはどうすればよいですか?

通常、これはdatabase.ymlの中に値として指定されますが、Herokuのが私たちのためにdatabase.ymlを生成するので、私は、この設定を制御するかどうかはわかりません。

ありがとうございます!注入されたdatabase.ymlのを見てから

答えて

1

http://neilmiddleton.com/sharing-databases-between-heroku-applications/の一番下を参照)を使用すると、クエリのparamsとしてデシベルのURLの一部として追加の設定に渡すことができます。

理論的には、これは私はそれを試していませんでしたが、あなたが望むどのようにあなたがそれを設定させてください。

+1

ありがとうNeil。それは素晴らしい仕事でした!ステップ3の下にパスワード@ホスト名/データベース名SSLCA = /パス/に/ ca.pem – Nathan

12

あなたはDATABASE_URL設定を通じてsome mysql2 SSL paramsを指定することができます。 Herokuのビルドプロセス中に生成される動的なdatabase.ymlに項目として追加されるので、mysql2接続が作成されたときに渡されます。

これを動作させるために渡す必要がある唯一のパラメータは、sslcaです(sslcapathと混同しないでください)。

1. Amazon RDS CA certificateをダウンロードし、アプリとの同梱。

(編集)Amazonは、2015年3月にrotating this certificateとなります。このファイルではなく、そのページの新しいファイルが必要になります。

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

2のgitにファイルを追加し、Herokuのに再デプロイします。

3. sslcaを渡すように変更DATABASE_URL

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

相対パス重要-下記参照があります。

これだけです!

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

トラブルシューティング

sslcaへの相対パスを渡すことを確認します。今、あなたはSSLの作業を持っていること、そのユーザーとのすべての接続がSSLのみが許可されていることを強制することもできます!そうしないと、rake assets:precompileがSSLエラーで破損することがあります。

SSL connection error: ASN: bad other signature confirmation 

あるいは単に:あなたは次のようにエラーが表示される場合

SSL connection error 

...CA証明書ファイルの参照方法に問題がある可能性があります。

+2

:mysql2://ユーザー名?具体的には、私のHerokuの設定DATABASE_URLは次のように見えるもの-a はすると仮定されますか? herokuアプリの名前ですか? – jmogera

+2

1つのapp -a {app_id}しかない場合は、しばしばスキップできます。ターミナルで '' heroku apps'''を使って、どのアプリがログインしたユーザに属しているのかを確認してください。 –

+1

さらに、私たちのセキュリティグループにmysqlポートを追加する必要がありました。ソースは0.0.0.0/0、ポート範囲は3306 – djburdick

関連する問題