同CloudFormation模板内创建存储AMI ImageID的SSM参数时创建失败
问题原因与解决方案
原因1:SSM校验AMI有效性所需权限缺失
你当前的IAM策略仅配置了SSM相关操作权限,当AWS::SSM::Parameter的DataType设置为aws:ec2:image时,AWS会自动校验传入的ImageId是否为当前区域下的有效AMI,这个校验过程需要调用ec2:DescribeImages接口,你的执行角色缺少该权限就会导致稳定化检查失败。
修复方案:
在你的SSMCreation策略的Action列表中添加ec2:DescribeImages权限,修改后策略如下:
- PolicyName: SSMCreation PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - ssm:DescribeParameters - ssm:AddTagsToResource - ssm:GetParameter - ssm:GetParameters - ssm:GetParametersByPath - ssm:GetParameterHistory - ssm:PutParameter - ssm:LabelParameterVersion - ssm:DeleteParameter - ssm:DeleteParameters - ec2:DescribeImages # 新增该行 Resource: - !Sub "arn:${AWS::Partition}:ssm:${AWS::Region}:${AWS::AccountId}:parameter/*" - !Sub "arn:${AWS::Partition}:ec2:${AWS::Region}:${AWS::AccountId}:image/*" # 也可按需缩小资源范围
原因2:同模板生成的AMI未就绪就触发SSM参数创建
CloudFormation中AWS::EC2::Image资源返回ImageId属性时,AMI本身可能还处于pending状态未完全可用,此时传入SSM参数会触发校验失败。
修复方案:
添加DependsOn显式依赖,或使用WaitCondition等待AMI状态变为可用后再创建SSM参数。如果是用自定义资源生成的AMI,确保自定义资源的返回逻辑是等到AMI状态为available之后再返回ImageId。
临时验证方案
如果不需要SSM对AMI ID做自动校验,可以先删除DataType: aws:ec2:image配置,直接存储普通String类型的参数,确认参数能创建成功后再逐步排查校验相关问题。
内容的提问来源于stack exchange,提问作者eambriz27
相关产品推荐
相关产品推荐

