问题描述
通过 SAM 部署 Lambda 后,当我尝试从 S3 下载时,我在 Lambda 内部收到了 403。我在 IAM 管理控制台中检查了 Lambda 的角色,我看到角色只有 AWSLambdaBasicExecutionRole
。但是,它还应该具有 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 下载的请求。我从 boto3 收到 {'Code': '403','Message': 'Forbidden'}
错误。
解决方法
(回答我自己的问题)。问题是 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