0

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

这是我的 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 下载的请求。我{'Code': '403', 'Message': 'Forbidden'}从 boto3 得到一个错误。

4

1 回答 1

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
于 2021-01-27T06:15:16.980 回答