AWSを使用している場合は、AWSブログのSegment.ioによる「秘密を管理する正しい方法」をご覧ください。chamber
すべてのお客様にシークレットを管理するために使用することを推奨します。AWS Systems Manager Parameter Store(SSM)とKMSキーを活用することで機能します。これにより、秘密は保管時(および転送時)に暗号化され、IAMで保護され、CloudTrailsで監査可能であり、実行時に環境変数としてのみ公開されます。
チャンバーを構成し、KMSキーをセットアップした後、パラメーターストアにシークレットを書き込みます。
chamber write db TF_VAR_DB_USER foobar
chamber write db TF_VAR_DB_PASS secret
次に、terraformを呼び出すときにこれらの秘密を使用します。
chamber exec db -- terraform plan
これは、と呼ばれる変数をHCLコードで定義していることを前提DB_USER
とDB_PASS
しています。
たとえば、これを variables.tf
variable "DB_USER" { }
variable "DB_PASS" { }
注: chamber
環境変数は常に大文字でエクスポートされます
terraform-aws-kms-key
KMSキーのプロビジョニングを簡単にするために呼び出されるterraformモジュールを提供します。chamber
複数の名前空間で使用する方法の例と、テラフォームでチャンバーを使用して秘密を管理する方法の例を含む詳細なドキュメントをご覧ください。チャンバーの依存関係をプロビジョニングするための完全なリファレンス例を参照してください。
に関しては.tfstate
、状態ファイル内のプレーンテキストの秘密の存在について本当に良い点を持ち出します。これを回避する方法は本当にありません。terraformが変更を計算して計画を作成するには、「前」と「後」の状態を知る必要があります。このため、暗号化されたS3バケットと必須のバージョン管理を使用することをお勧めします。terraform-aws-tfstate-backend
モジュールを使用して、ベストプラクティスに従ってバケットとDynamoDBロックテーブルをプロビジョニングします。