2011-02-10 22 views
12

Tôi đang sử dụng RoR được lưu trữ bởi Heroku và tôi muốn lưu trữ tệp trên s3 bằng cách sử dụng kẹp giấy. Mã nguồn của tôi được lưu trữ trên github và có thể đọc được trên thế giới. Thực hành tốt nhất để giữ bí mật chìa khóa từ phần còn lại của thế giới là gì?
Kẹp giấy gợi ý rằng các phím truy cập được lưu trữ trong một tập tin cấu hình (hoặc trong code), ví dụ như vậy tôi có:Ruby on Rails, Paperclip, Heroku, GitHub và AWS - khóa bảo mật

file: config/s3.yml

access_key_id: my_access_key_id 
secret_access_key: my_very_secret_key 
bucket: bucket_name 

Heroku hoạt động bằng cách cam kết mã để git địa phương và sau đó đẩy nó vào Heroku. Vì tôi cũng sử dụng github, tôi cũng đẩy mã đó vào github. Điều đó có nghĩa là tôi cũng đẩy các khóa bí mật ở đó.
Tôi hiện đang sử dụng tài khoản github có thể đọc được trên thế giới, vì vậy nếu tôi thanh toán github, tôi có thể làm giảm một nửa vấn đề nhưng vẫn không hài lòng với các khóa bí mật nằm trong tệp cấu hình trong mã. Tôi không biết nếu có một thực hành tốt hơn cho điều này mặc dù.

Thực tiễn tốt nhất để giữ bí mật các khóa và vẫn sử dụng danh sách thư viện và dịch vụ được đề cập ở trên là gì?

BTW, tôi chỉ mới bắt đầu với ror và heroku tuần trước vì vậy tôi có thể được coi là newbe, hãy thận trọng;) Cảm ơn!

Trả lời

21

Bạn cần sử dụng biến ENV từ ứng dụng heroku của mình.

Nếu bạn thực hiện cấu hình heroku, bạn có thể có quyền truy cập vào tất cả biến ENV của mình. Bạn chỉ cần thêm một số và sử dụng nó trực tiếp trong ứng dụng của bạn.

Với mẹo này, bạn không cần cập nhật mã của mình để thay đổi cấu hình và cấu hình nếu không xác định trong cơ sở mã của bạn.

Trong s3.yml của bạn, bạn chỉ cần làm:

access_key_id: <%= ENV['S3_ACCESS_KEY'] %> 
secret_access_key: <%= ENV['S3_SECRET_KEY'] %> 
bucket: <%= ENV['S3_BUCKET_NAME'] %> 

Và thêm ENV BIẾN này trong ứng dụng của bạn Heroku

heroku config:add S3_ACCESS_KEY='your_key' 
heroku config:add S3_SECRET_KEY='your_secret' 
heroku config:add S3_BUCKET_NAME='your_nucket_name' 
+0

Để biết thông tin, 'config: add' đã được thay thế bằng' config: set'. – thomasb

-5

err .. không có cách nào khác nếu bạn đang sử dụng heroku. Bạn phải đặt tất cả mọi thứ trong một repo và đẩy nó cho họ.

Reg github, nếu bạn định sử dụng repos công cộng - "riêng tư" nếu bạn cần các phím đó để làm cho ứng dụng của bạn hoạt động. Bạn phải tin tưởng các thành viên trong nhóm ngay cả khi bạn cấp quyền truy cập vào repo github riêng tư đó cho một vài người được chọn.

Tôi không biết bất kỳ ý tưởng nào khác.

+1

Câu trả lời này chỉ nên bị xóa. – user664833

1

Cách đây không lâu Amazon phát hành chính thức AWS SDK for Ruby. Nó hoạt động khá tốt với S3, hỗ trợ các phiên bản S3 của Mỹ, Châu Âu và Nhật Bản từ hộp và được duy trì tốt.

Tôi đã tạo mô-đun lưu trữ cho Paperclip có tên paperclip-aws để hoạt động với AWS SDK.

Hãy sử dụng nó. Tôi hy vọng nó sẽ giúp ích.