You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CloudFormation中使用!Sub生成多个ARN数组作为Lambda策略Resource时出现MalformedPolicyDocument错误

CloudFormation中使用!Sub生成多个ARN数组作为Lambda策略Resource时出现MalformedPolicyDocument错误

嘿,我帮你排查到问题啦,你的CloudFormation模板里Lambda策略的格式有两处错误,才触发了这个MalformedPolicyDocument报错:

问题分析

  1. 自定义策略的结构缩进错误:你把Version和Statement直接放在了AWSLambdaBasicExecutionRole的下方,这会让CloudFormation无法识别这是一个完整的自定义IAM策略,正确的做法是把自定义策略作为Policies列表里的一个独立项。
  2. Resource数组的写法不规范:你现在的两个!Sub没有明确作为数组元素来定义,CloudFormation无法正确解析成多个ARN的数组。

修正后的模板代码

Type: AWS::Serverless::Function
Properties:
  FunctionName: !Join
    - "-"
    - - !Ref NamePrefix
      - !FindInMap [ NameMap, SEND-SES-EMAIL-FUNCTION, NAME ]
      - !Ref NamePostfix
  Description: "Lambda function to send email with CSV file through SES"
  CodeUri: source/resources/sendSESEmailFunction
  Handler: sendSESEmail.lambda_handler
  Policies:
    - AWSLambdaBasicExecutionRole
    - Version: 2012-10-17
      Statement:
        - Sid: SESPermissions
          Effect: Allow
          Action:
            - 'ses:SendEmail'
          Resource:
            - !Sub
              - 'arn:aws:ses:${AWS::Region}:${SESAccountID}:identity/${SenderEmail}'
              - SenderEmail: !Ref SenderSESEmail
                SESAccountID: !Ref SESAccountID
            - !Sub
              - 'arn:aws:ses:${AWS::Region}:${SESAccountID}:identity/${ReceiverEmail}'
              - ReceiverEmail: 'testing'
                SESAccountID: !Ref SESAccountID

关键修正点说明

  • 把自定义IAM策略用-开头,和AWSLambdaBasicExecutionRole并列,确保Policies列表的结构正确。
  • 在Resource字段下,每个!Sub都用-开头,明确这是数组中的一个元素,这样CloudFormation就能正确生成两个ARN作为策略的资源目标了。

备注:内容来源于stack exchange,提问作者Martin Golis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 09:09:10