web-dev-qa-db-ja.com

CloudFormationテンプレートでAWS Parameter Storeの安全な文字列を参照する

AWS Parameter StoreからのSecureStringの使用法で立ち往生。私はデータベースのパスワードを次のように参照しようとしています:

DatabasePassword:
    Type: AWS::SSM::Parameter::Value<SecureString>
    NoEcho: 'true'
    Default: /environment/default/database_password
    Description: The database admin account password

これはエラーをスローします:

CreateStack操作の呼び出し時にエラーが発生しました(ValidationError):テンプレート形式エラー:認識されないパラメータータイプ:SecureString

ただし、このパラメーターをStringではなくSecureStringとして参照すると、別のエラーがスローされます。

CreateStackオペレーションを呼び出すときにエラーが発生しました(ValidationError):テンプレートによって参照されるパラメーター[/ environment/default/database_password]のタイプがCloudFormationでサポートされていません。

'{{resolve:ssm-secure:parameter-name:version}}'そしてそれはデータベース設定のために働きます:

MasterUsername: !Ref DatabaseUsername
MasterUserPassword: '{{resolve:ssm-secure:/environment/default/database_password:1}}'

ただし、私はAWS Fargate Dockerコンテナーを使用しており、これらの値を環境変数として指定しています。

Environment:
  - Name: DATABASE_HOSTNAME
    Value: !Ref DatabaseHostname
  - Name: DATABASE_USERNAME
     Value: !Ref DatabaseUsername
  - Name: DATABASE_PASSWORD
    Value: '{{resolve:ssm-secure:/environment/default/database_password:1}}'

これはエラーをスローします:

CreateStack操作の呼び出し時にエラーが発生しました(ValidationError):SSMセキュア参照はサポートされていません:[AWS :: ECS :: TaskDefinition/Properties/ContainerDefinitions/Environment]

私の実装では安全な文字列を使用できません。この問題の回避策はありますか? AWSは昨年、SecureStringのサポートを発表しましたが、ドキュメントが見つかりませんでした。私が見つけたのは、resolveを使用することだけでした。これは一部の場合にのみ機能します。

参考文献:

1

2

4
kk.

AWS Secrets Managerを使用して、CloudFormationテンプレートのシークレットを取得できます。これは、データベースのパスワードなどではない場合でも使用できます。

ドキュメントへのリンクは次のとおりです。 https://docs.aws.Amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#dynamic-references-secretsmanager

Secrets Managerシークレットには3つの部分があります。

  • 秘密の名前。 PROD_DB_PASSWORD
  • 秘密の鍵。 DB_PASSWORD
  • そして実際の秘密の価値

次に、以下を使用してCloudFormationテンプレートで上記の秘密を解決します。

'{{resolve:secretsmanager:PROD_DB_PASSWORD:SecretString:DB_PASSWORD}}'
0
lemming