EDB của tôi được phân tách bằng:
Chúng tôi tải lên tất cả các khóa có hậu tố đặc biệt cho mọi phiên bản EC2 mới khi chúng tôi khởi động nó và sau đó xóa tất cả các khóa chưa được sử dụng bởi bất kỳ công thức nấu ăn nào trong run_list vào cuối lần chạy đầu tiên của khách hàng (sẽ là ngay khi ví dụ bắt đầu.)
Tất cả các tệp được tải lên dưới dạng chủ sở hữu và nhóm "root" và chỉ có quyền đọc.
Mỗi công thức sử dụng EDB, tạo tên EDB và tên tệp khóa trong thời gian chạy công thức bằng cách ghép 'edb_' + môi trường nút + tên công thức / mục cụ thể + '.key' và sau đó tìm khóa theo tên này . (Nếu nó không tồn tại, điều này sẽ ném một ngoại lệ theo mặc định.)
Do đó, đối với máy chủ couchdb của chúng tôi, chạy một vai trò gọi là 'couch', để có được thông tin đăng nhập mà chúng tôi đang sử dụng cho người dùng quản trị viên trong môi trường dev, công thức tìm kiếm một khóa có tên 'edb_dev_couch.key'
Sau đó, nó tìm kiếm một túi dữ liệu có tên 'edb_dev' cho một mục có tên 'couch_credentials'.
Để quản lý khóa, tôi hiện đang sử dụng phương pháp đơn giản của:
- tải lên tất cả các khóa EDB thông qua tập lệnh bootstrap và nối '_x' vào tên khóa
- Có mỗi công thức sử dụng giao diện EDB trong thư mục khóa cho khóa mà nó cần.
- nếu khóa tồn tại với hậu tố '_x', hãy đổi tên khóa để xóa hậu tố '_x'.
- thêm một công thức vào cuối mỗi run_list xóa tất cả các khóa bằng hậu tố '_x'
Hy vọng rằng, điều này giới hạn thời gian mà các khóa bên ngoài phạm vi của một nút đơn có thể bị ảnh hưởng cho đến khi máy đã được khởi động và có lần chạy đầu tiên của Chef_client.
Đây là vòng thử nghiệm đầu tiên của chúng tôi về cách bảo mật các khóa, nhưng cho đến nay nó đáp ứng nhu cầu hiện tại của chúng tôi vì nó ngăn một máy chủ dev gốc có thể truy cập ngay lập tức bất kỳ thông tin đăng nhập máy chủ nào khác được lưu trữ trong EDB.
Để duy trì việc có một công thức ở cuối mỗi danh sách chạy, tôi sử dụng công cụ thực thi dao để đảm bảo công thức xóa_keys này chính xác là công thức cuối cùng trên mỗi nút.