CloudFormation用!Ref引用SES ARN参数触发MalformedPolicyDocument错误
问题原因分析
你遇到的报错核心是IAM服务实际收到的策略中,SES授权的Resource字段取值为纯邮箱地址no-reply@companytest.no,不符合ARN格式要求,触发格式校验失败,常见原因分为两类:
- 部署参数被手动覆盖:你在更新CloudFormation栈时,
TestEmailFromAddress参数没有使用模板中定义的默认ARN值,而是被手动填入了纯邮箱地址,导致!Ref解析后的值不符合要求。 - CloudFormation IAM预校验限制:IAM资源在部署前会经过CloudFormation和IAM的双重预校验,当你使用
!Ref引用参数作为Policy的Resource值时,默认的预校验逻辑不会代入参数的默认值做格式校验,无法确认动态取值是否符合ARN规范,因此抛出错误。而硬编码ARN时,预校验逻辑可以直接识别值的合法性,因此可以正常部署。
排查方向
- 首先核对栈更新时的参数提交记录,确认
TestEmailFromAddress参数是否被手动修改为纯邮箱地址,若存在覆盖情况,重新部署时保留默认值或手动填入完整ARN即可。 - 若确认参数取值正确,可以为邮箱参数增加
AllowedPattern校验规则,强制参数取值必须符合SES ARN格式,让CloudFormation预校验阶段确认参数的合法性,即可正常使用!Ref引用,示例配置如下:
TestEmailFromAddress: Type: String Description: "Email address to use as sender" Default: "arn:aws:ses:eu-west-1:YYYYYYYYYYYYY:identity/no-reply@companytest.no" AllowedPattern: "^arn:aws:ses:[a-z0-9-]+:[0-9]{12}:identity/.+$" ConstraintDescription: "必须为合法的SES身份ARN"
- 你可以通过CloudTrail查询报错中对应的Request ID:
7af958ba-9c99-4073-a3b3-4da1b3ae80da的事件详情,直接查看IAM服务实际接收到的PolicyDocument全文,确认Resource字段的实际取值,快速定位根因。
内容的提问来源于stack exchange,提问作者dotmindlabs
相关产品推荐
相关产品推荐

