Lambda 角色没有在 SAM 模板中定义策略

时间:2021-01-27 04:48:11

标签: amazon-web-services amazon-s3 aws-lambda aws-policies serverless-application-model

通过 SAM 部署 Lambda 后,当我尝试从 S3 下载时,我在 Lambda 内部收到了 403。我在 IAM 管理控制台中检查了 Lambda 的角色,我看到角色只有 AWSLambdaBasicExecutionRole。但是,它还应该具有 S3 读/写的 SAM 模板中的策略。

这是我的 SAM 模板中的一个片段(一些内容已重命名):

  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
    Metadata:
      DockerTag: my-tag
      DockerContext: ./src/stuff
      Dockerfile: Dockerfile
    Policies:
      - Version: '2012-10-17'
      - S3ReadPolicy:
          BucketName: !Ref MyBucket
      - S3WritePolicy:
          BucketName: !Ref MyBucket

S3ReadPolicy 和 S3WritePolicy 不应该是 Lambda 角色的一部分吗?

有什么我遗漏的吗?

我知道我可以手动添加所需的策略,但显然我希望尽可能多地通过 SAM 自动发生。

其他细节:我不确定这是否重要,但为了额外的上下文,Lambda 是 Step Function 状态机的一部分。我正在使用 boto3 库发出从 S3 下载的请求。我从 boto3 收到 {'Code': '403', 'Message': 'Forbidden'} 错误。

1 个答案:

答案 0 :(得分:0)

(回答我自己的问题)。问题是 Policies 部分需要位于 Properties 下。

MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      Policies:
        - Version: '2012-10-17'
        - S3ReadPolicy:
            BucketName: !Ref MyBucket
        - S3WritePolicy:
            BucketName: !Ref MyBucket
    Metadata:
      DockerTag: my-tag
      DockerContext: ./src/stuff
      Dockerfile: Dockerfile