Nếu bạn đang sử dụng AWS, hãy xem "Cách thức quản lý bí mật" của Segment.io trên Blog AWS. Chúng tôi ủng hộ việc sử dụng chamber
cho tất cả các khách hàng của mình để quản lý bí mật. Nó hoạt động bằng cách tận dụng Kho thông số quản lý hệ thống AWS (SSM) cùng với các khóa KMS. Điều này đảm bảo các bí mật được mã hóa khi nghỉ ngơi (và trong quá trình vận chuyển), được bảo mật bằng IAM, có thể kiểm tra được bằng CloudTrails và chỉ được hiển thị dưới dạng các biến môi trường trong thời gian chạy.
Sau khi cấu hình buồng và thiết lập khóa KMS, chúng tôi viết các bí mật cho cửa hàng tham số.
chamber write db TF_VAR_DB_USER foobar
chamber write db TF_VAR_DB_PASS secret
Sau đó sử dụng những bí mật khi bạn gọi terraform.
chamber exec db -- terraform plan
Điều này giả định rằng bạn đã xác định một biến được gọi DB_USER
và DB_PASS
trong mã HCL của bạn.
Ví dụ: bạn có thể thêm phần này vào variables.tf
variable "DB_USER" { }
variable "DB_PASS" { }
LƯU Ý: chamber
sẽ luôn xuất các biến môi trường bằng chữ hoa
Chúng tôi cung cấp một mô-đun terraform được gọi terraform-aws-kms-key
để cung cấp khóa KMS dễ dàng. Kiểm tra tài liệu chi tiết của chúng tôi với các ví dụ về cách sử dụng chamber
với nhiều không gian tên cũng như cách sử dụng buồng với địa hình để quản lý bí mật. Xem ví dụ tham khảo đầy đủ của chúng tôi để cung cấp phụ thuộc buồng.
Đối với .tfstate
, bạn đưa ra một điểm thực sự tốt về sự tồn tại của các bí mật văn bản đơn giản trong tệp trạng thái. Thực sự không có cách nào xung quanh điều này. Để terraform tính toán các thay đổi để xây dựng kế hoạch, nó cần biết trạng thái "trước" và "sau". Vì lý do này, chúng tôi khuyên bạn nên sử dụng nhóm S3 được mã hóa với phiên bản bắt buộc. Sử dụng terraform-aws-tfstate-backend
mô-đun để cung cấp một nhóm và bảng khóa DynamoDB theo các thông lệ tốt nhất.