Secrets Manager からシークレットまたはシークレット値を取得する - AWS CloudFormation

Secrets Manager からシークレットまたはシークレット値を取得する

Secrets Manager は、データベース認証情報、パスワード、サードパーティー API キーなどのシークレットを安全に保存および管理できるようにするサービスです。Secrets Manager を使用すると、これらのシークレットへのアクセスを一元的に保存および制御できるため、コード内のハードコードされた認証情報 (パスワードを含む) を Secrets Manager への API 呼び出しに置き換えて、プログラムでシークレットを取得できます。詳細については、『AWS Secrets Manager ユーザーガイド』の「What is AWS Secrets Manager? ( とは?)」 を参照してください。

CloudFormation テンプレート内の Secrets Manager に保存されているシークレット全体またはシークレット値全体を使用するには、secretsmanager 動的参照を使用します。

考慮事項

secretsmanager 動的参照を使用する場合は、いくつかの重要なセキュリティ上の考慮事項に留意する必要があります。

  • secretsmanager の動的な参照は、すべてのリソースプロパティで使用できます。secretsmanager の動的な参照を使用することは、Secrets Manager ログも CloudFormation ログも解決済みのシークレットの値を保持してはならないことを示します。ただし、シークレット値は、それが使用されているリソースを持つサービスに表示されることがあります。シークレットデータが漏れるのを防ぐために、使用方法を確認します。

  • Secrets Manager でシークレットを更新しても、CloudFormation のシークレットは自動的に更新されません。CloudFormation で secretsmanager 動的な参照を更新するには、動的な参照を含むリソースを更新するか、リソースの別のプロパティを更新することによって、secretsmanager 動的な参照を含むリソースを更新するスタック更新を実行する必要があります。

    たとえば、テンプレートで、AWS::RDS::DBInstance リソースの MasterPassword プロパティを secretsmanager 動的な参照として指定し、テンプレートからスタックを作成するとします。後で Secrets Manager でそのシークレットの値を更新しますが、テンプレートの AWS::RDS::DBInstance リソースは更新しません。この場合、スタックの更新を実行しても、MasterPassword プロパティのシークレット値は更新されず、以前のシークレット値のままになります。

    また、Secrets Manager を使用して、セキュリティで保護されたサービスまたはデータベースのシークレットを自動的にローテーションすることを検討してください。詳細については、「AWS Secrets Manager シークレットのローテーション」を参照してください。

  • secretsmanager などの安全な値の動的参照は、現在カスタムリソースではサポートされていません。

アクセス許可

Secrets Manager に保存されているシークレットを指定するには、シークレットに対して GetSecretValue を呼び出すためのアクセス許可が必要です。

リファレンスパターン

CloudFormation テンプレートで Secrets Manager シークレットを参照するには、次の secretsmanager 参照パターンを使用します。

{{resolve:secretsmanager:secret-id:secret-string:json-key:version-stage:version-id}}
secret-id

シークレット名またはシークレット ARN。

AWS アカウントのシークレットにアクセスするには、シークレット名を指定するだけです。別の AWS アカウントのシークレットにアクセスするには、そのシークレットの完全な ARN を指定します。

必須。

secret-string

SecretString はサポートされる唯一の値です。デフォルト: SecretString

json-key

値を取得するペアのキー名を指定します。json-key を指定しない場合、CloudFormation はシークレットテキスト全体を取得します。

このセグメントにはコロン文字 (:) を含めることはできません。

version-stage

使用するシークレットのバージョンのステージングラベル。シークレットマネージャーは、ステージングラベルがローテーション処理中にさまざまなバージョンを追跡するために使用されます。version-stage を使用する場合は、version-id を指定することはできません。version-stage または version-id、を指定しない場合、デフォルトでは AWSCURRENT というラベルの付いたバージョンが取得されます。

このセグメントにはコロン文字 (:) を含めることはできません。

version-id

使用したいシークレットのバージョンの固有識別子を指定します。version-id を指定した場合は、version-stage を指定しないでください。version-stage または version-id を指定しない場合、次にデフォルトでは AWSCURRENT というバージョンが取得されます。

このセグメントにはコロン文字 (:) を含めることはできません。

シークレットからユーザー名とパスワードの値を取得する

次の AWS::RDS::DBInstance の例では、MySecret に保存されているユーザー名とパスワードの値を取得します。取得されるシークレットのバージョンは、AWSCURRENT のバージョンステージ値を含むバージョンです。

JSON

{ "MyRDSInstance": { "Type": "AWS::RDS::DBInstance", "Properties": { "DBName": "MyRDSInstance", "AllocatedStorage": "20", "DBInstanceClass": "db.t2.micro", "Engine": "mysql", "MasterUsername": "{{resolve:secretsmanager:MySecret:SecretString:username}}", "MasterUserPassword": "{{resolve:secretsmanager:MySecret:SecretString:password}}" } } }

YAML

MyRDSInstance: Type: 'AWS::RDS::DBInstance' Properties: DBName: MyRDSInstance AllocatedStorage: '20' DBInstanceClass: db.t2.micro Engine: mysql MasterUsername: '{{resolve:secretsmanager:MySecret:SecretString:username}}' MasterUserPassword: '{{resolve:secretsmanager:MySecret:SecretString:password}}'

SecretString 全体を取得する

次の動的リファレンスは、 MySecretSecretString を取得します。

{{resolve:secretsmanager:MySecret}}

または:

{{resolve:secretsmanager:MySecret::::}}

シークレットの特定のバージョンから値を取得する

次の動的リファレンスは、 MySecretAWSPREVIOUS バージョンの password 値を取得します。

{{resolve:secretsmanager:MySecret:SecretString:password:AWSPREVIOUS}}

別の AWS アカウントからシークレットを取得する

次の動的リファレンスは、別の AWS アカウントにある MySecretSecretString を取得します。別の AWS アカウントのシークレットにアクセスするには、完全なシークレット ARN を指定する必要があります。

{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret}}

次の動的リファレンスは、別の AWS アカウントにある MySecretpassword 値を取得します。別の AWS アカウントのシークレットにアクセスするには、完全なシークレット ARN を指定する必要があります。

{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret:SecretString:password}}