[英]Pass secure SSM parameter to a nested CloudFormation stack
我有一個描述數據庫及其相關資源的嵌套 CloudFormation 堆棧模板。 我需要為各種環境(例如stage
、 qa
、 prod
)創建多個數據庫。
我將每個環境的數據庫密碼存儲在 SSM 參數存儲中作為安全字符串,例如:
/acme/stage/DB_PASSWORD
/acme/qa/DB_PASSWORD
/acme/prod/DB_PASSWORD
我試圖解析父模板中的 SSM 參數並將其傳遞給嵌套堆棧,但它看起來不起作用。
# parent.template
StageDatabaseStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: "…/database.template"
Parameters:
DatabasePassword: '{{resolve:ssm-secure:/acme/stage/DB_PASSWORD:1}}'
QaDatabaseStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: "…/database.template"
Parameters:
DatabasePassword: '{{resolve:ssm-secure:/acme/qa/DB_PASSWORD:1}}'
ProdDatabaseStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: "…/database.template"
Parameters:
DatabasePassword: '{{resolve:ssm-secure:/acme/prod/DB_PASSWORD:1}}'
# database.template
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
DatabasePassword:
Type: String
Resources:
Database:
Type: AWS::RDS::DBInstance
Properties:
MasterUserPassword: !Ref DatabasePassword
這種方法給了我一個錯誤:
調用 CreateStack 操作時發生錯誤 (ValidationError):[AWS::CloudFormation::Stack/Properties/Parameters/DatabasePassword] 中不支持 SSM 安全引用
根據docs ,也可以將密碼參數定義為特殊的AWS::SSM::Parameter::Value<String>
類型,但聲明如下:
AWS CloudFormation 不支持將模板參數定義為 SecureString Systems Manager 參數類型。
我實際上嘗試過使用它,但它給了我一個錯誤:
模板引用的參數 [/acme/stage/DB_PASSWORD] 具有 CloudFormation 不支持的類型。
那么,在這種情況下,我如何實際將安全數據庫密碼傳遞給數據庫資源? 我想使用一個 CloudFormation 模板來管理所有三個數據庫及其相關資源。
嘗試:
'{{resolve:ssm-secure:/acme/stage/DB_PASSWORD:1}}'
即帶撇號。 請參閱文檔中的 YAML 示例:
MyS3Bucket:
Type: 'AWS::S3::Bucket'
Properties:
AccessControl: '{{resolve:ssm:S3AccessControl:2}}'
將安全 SSM 參數傳遞給我發現的嵌套堆棧的唯一方法是將其作為字符串傳遞,而不是嘗試使用更合理的AWS::SSM::Parameter::Value<String>
然后解析安全通過使用!Sub
函數構建動態引用,嵌套堆棧中的值。
這是一個工作示例:
# parent.template
StageDatabaseStack:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
DatabasePasswordSsmKey: "/acme/stage/DB_PASSWORD:1"
ProdDatabaseStack:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
DatabasePasswordSsmKey: "/acme/prod/DB_PASSWORD:1"
# database.template
Parameters:
DatabasePasswordSsmKey:
Description: SSM property key for database password
Type: String
Database:
Type: AWS::RDS::DBInstance
Properties:
MasterUserPassword: !Sub "{{resolve:ssm-secure:${DatabasePasswordSsmKey}}}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.