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

AWS SAM部署失败:如何为UploadTriggerFunction添加调用EmoryParserFunction的权限?

问题:AWS SAM中为Lambda添加跨函数调用权限时IAM策略语法错误

尝试在AWS SAM的template.yaml中为UploadTriggerFunction Lambda函数添加调用EmoryParserFunction Lambda的权限,执行sam deploy --guided部署失败,提示UploadTriggerFunctionRole的IAM策略存在语法错误。

原错误配置代码

UploadTriggerFunction:
  Type: AWS::Serverless::Function
  Properties:
    CodeUri: src/upload_trigger/
    Policies:
      - DynamoDBCrudPolicy:
          TableName: !Ref DocumentTable
      - DynamoDBCrudPolicy:
          TableName: !Ref MemoryTable
      - S3ReadPolicy:
          BucketName: !Sub "${AWS::StackName}-${AWS::Region}-${AWS::AccountId}*"
      - SQSSendMessagePolicy:
          QueueName: !GetAtt EmbeddingQueue.QueueName
      - Statement:
          - Sid: "LambdaInvokePermission"
            Action: "lambda:*"
            FunctionName: !Ref EmoryParserFunction
            Principal: "*"

部署错误信息

UPDATE_FAILED                    AWS::IAM::Role                   UploadTriggerFunctionRole        Resource handler returned       
                                                                                               message: "Syntax errors in     
                                                                                               policy. (Service: Iam, Status  
                                                                                               Code: 400, Request ID: 67a2b4d 
                                                                                               6-4efd-483e-9a20-              
                                                                                               290b983f3521)" (RequestToken:  
                                                                                               afebd2d9-cc06-70e2-ba50-       
                                                                                               5dca6751f288,                  
                                                                                               HandlerErrorCode:              
                                                                                               InvalidRequest)    

错误原因

自定义IAM策略Statement存在以下问题:

  • 缺少必填的Effect字段(必须指定Allow或Deny)
  • 错误使用FunctionName字段,IAM策略中需要用Resource指定目标Lambda的ARN,而非FunctionName
  • Principal字段属于资源级权限配置(给外部主体授权调用Lambda),但此处是给当前角色添加调用权限,不需要该字段

正确配置方式

方式一:使用SAM内置的LambdaInvokePolicy(推荐)

SAM提供了内置策略简化Lambda调用权限配置,直接指定目标函数即可:

UploadTriggerFunction:
  Type: AWS::Serverless::Function
  Properties:
    CodeUri: src/upload_trigger/
    Policies:
      - DynamoDBCrudPolicy:
          TableName: !Ref DocumentTable
      - DynamoDBCrudPolicy:
          TableName: !Ref MemoryTable
      - S3ReadPolicy:
          BucketName: !Sub "${AWS::StackName}-${AWS::Region}-${AWS::AccountId}*"
      - SQSSendMessagePolicy:
          QueueName: !GetAtt EmbeddingQueue.QueueName
      - LambdaInvokePolicy:
          FunctionName: !Ref EmoryParserFunction

方式二:自定义完整IAM策略Statement

如果需要更精细的权限控制(比如仅允许lambda:InvokeFunction动作),可以使用标准IAM策略格式:

UploadTriggerFunction:
  Type: AWS::Serverless::Function
  Properties:
    CodeUri: src/upload_trigger/
    Policies:
      - DynamoDBCrudPolicy:
          TableName: !Ref DocumentTable
      - DynamoDBCrudPolicy:
          TableName: !Ref MemoryTable
      - S3ReadPolicy:
          BucketName: !Sub "${AWS::StackName}-${AWS::Region}-${AWS::AccountId}*"
      - SQSSendMessagePolicy:
          QueueName: !GetAtt EmbeddingQueue.QueueName
      - Statement:
          - Sid: "LambdaInvokePermission"
            Effect: "Allow"
            Action: "lambda:InvokeFunction"
            Resource: !GetAtt EmoryParserFunction.Arn

注意:如果目标Lambda函数和当前函数不在同一个AWS账号或区域,需要在Resource中指定完整的ARN,同时确保跨账号权限配置正确。

内容的提问来源于stack exchange,提问作者eduardosufan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:53:33