如何在另一个CloudFormation模板中引用已定义的SSM参数
方案说明
你可以通过两种常用方式在另一个CloudFormation模板的IAM策略中引用已经创建的SSM参数,具体实现如下:
方法1:直接使用SSM动态引用(无需额外定义模板参数,推荐)
直接通过CloudFormation内置的SSM动态解析语法引用参数,模板更新时会自动拉取SSM存储的最新值,不需要额外调整模板参数结构:
KinesisFirehoseRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: firehose.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: KinesisFirehosePolicy PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - kinesis:* - s3:* - s3-object-lambda:* Resource: - !Sub "${Bucket.Arn}/*" # 直接动态引用SSM参数 - !Sub "{{resolve:ssm:/${Environment}/Services/${Domain}/kinesis_stream_arn}}"
注意事项:
- 确保当前IAM模板中也定义了
Environment和Domain参数,取值和创建SSM参数的模板保持一致,才能匹配到正确的SSM参数路径 - 部署当前模板的CloudFormation执行角色需要拥有
ssm:GetParameter权限,权限范围覆盖上述SSM参数路径
方法2:通过SSM类型模板参数拉取值
如果你需要在模板多处复用该ARN值,可以先在IAM模板中定义SSM类型的参数,部署时CloudFormation会自动拉取对应参数值,之后在策略中直接引用即可:
第一步:在IAM模板开头添加参数定义
Parameters: # 定义SSM参数类型的模板参数 KinesisStreamARN: Type: AWS::SSM::Parameter::Value<String> Description: Kinesis流ARN对应的SSM参数路径 # 可填默认参数路径,也可部署时手动传入 Default: /dev/Services/data/kinesis_stream_arn
第二步:在IAM策略的Resource字段中引用该参数
Resource: - !Sub "${Bucket.Arn}/*" - !Ref KinesisStreamARN
两种方式差异
- 动态引用方式:栈每次更新都会自动拉取SSM参数的最新值,不需要手动重新传入参数
- SSM类型模板参数方式:仅在模板部署/更新时拉取一次SSM值,后续SSM参数变更不会主动同步到栈配置中
内容的提问来源于stack exchange,提问作者Antarr Byrd
相关产品推荐
相关产品推荐

