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
を使用することだけでした。これは一部の場合にのみ機能します。
参考文献:
AWS Secrets Managerを使用して、CloudFormationテンプレートのシークレットを取得できます。これは、データベースのパスワードなどではない場合でも使用できます。
ドキュメントへのリンクは次のとおりです。 https://docs.aws.Amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#dynamic-references-secretsmanager
Secrets Managerシークレットには3つの部分があります。
次に、以下を使用してCloudFormationテンプレートで上記の秘密を解決します。
'{{resolve:secretsmanager:PROD_DB_PASSWORD:SecretString:DB_PASSWORD}}'