2012-03-16 28 views
6

Tôi đang chạy ứng dụng Rails 3.2 trên ngăn xếp Cedar tại Heroku.Chỉ định SSL cho kết nối cơ sở dữ liệu MySQL bên ngoài Heroku

Tôi đang sử dụng Amazon RDS cho cơ sở dữ liệu MySQL của mình và tôi có cài đặt DATABASE_URL thích hợp trong các vung cấu hình Heroku.

Làm cách nào để có được Heroku sử dụng SSL trong kết nối của nó với Amazon RDS?

Thông thường, điều này sẽ được chỉ định dưới dạng giá trị trong database.yml, nhưng vì Heroku tạo database.yml cho chúng tôi, tôi không chắc chắn cách kiểm soát cài đặt này.

Cảm ơn!

Trả lời

1

Từ khi nhìn vào cơ sở dữ liệu được chèn.yml (xem dưới cùng của http://neilmiddleton.com/sharing-databases-between-heroku-applications/), bạn có thể chuyển cấu hình bổ sung như một phần của URL db làm thông số truy vấn.

Về lý thuyết, điều này sẽ cho phép bạn định cấu hình theo cách bạn muốn mặc dù tôi chưa thử.

+1

Cảm ơn Neil. Điều đó làm việc tuyệt vời! Cụ thể hơn, cấu hình Heroku DATABASE_URL của tôi trông giống như sau: mysql2: // username: password @ hostname/databasename? Sslca =/path/to/ca.pem – Nathan

12

Bạn có thể chỉ định some mysql2 SSL params thông qua cấu hình DATABASE_URL. Chúng sẽ được thêm vào dưới dạng các mục với số động database.yml được tạo trong quá trình xây dựng Heroku và do đó chúng sẽ được chuyển khi kết nối mysql2 được tạo.

Thông số duy nhất bạn cần vượt qua để làm việc này là sslca (không bị nhầm lẫn với sslcapath).

1. Tải xuống Amazon RDS CA certificate và gói với ứng dụng của bạn.

(Chỉnh sửa) Amazon sẽ là rotating this certificate vào tháng 3 năm 2015. Bạn sẽ cần tệp mới từ trang đó thay vì trang này.

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

2. Thêm tập tin để git, và triển khai lại để Heroku.

3. Thay đổi DATABASE_URL để vượt qua sslca:

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

Đường dẫn tương đối có quan trọng-xem dưới đây.

Vậy đó! Bây giờ bạn có làm việc SSL, bạn có thể muốn thực thi tất cả kết nối với người dùng mà chỉ cho phép SSL:

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

đáp thắc mắc

Hãy chắc chắn để vượt qua một đường dẫn tương đối để sslca! Nếu không, rake assets:precompile có thể bị lỗi SSL. Nếu bạn nhận được một lỗi như:

SSL connection error: ASN: bad other signature confirmation 

hoặc thậm chí chỉ:

SSL connection error 

...sau đó có thể có điều gì đó sai trái với cách tệp CA cert được tham chiếu.

+2

theo bước 3: -a giả sử là gì? là tên của ứng dụng heroku? – jmogera

+2

Nếu bạn chỉ có một ứng dụng -a {app_id} thường có thể bị bỏ qua. Sử dụng '' 'heroku apps''' trong terminal để xem ứng dụng nào thuộc về người dùng đã đăng nhập. –

+1

Ngoài ra tôi phải thêm cổng mysql vào nhóm bảo mật của mình. Nguồn là: 0.0.0.0/0 và phạm vi cổng là: 3306 – djburdick

Các vấn đề liên quan