【发布时间】:2021-03-05 10:33:15
【问题描述】:
我有一个 s3 存储桶,其中包含我想从我的 lambda 访问的一堆文件(由同一帐户创建的 lambda 和 s3 存储桶):
def list_all():
s3 = boto3.client('s3')
bucket = 'my-bucket'
resp = s3.list_objects(Bucket=bucket, MaxKeys=10)
print("s3.list_objects returns", resp)
这会产生如下错误:
{
"errorMessage": "An error occurred (AccessDenied) when calling the
ListObjects operation: Access Denied",
"errorType": "ClientError",
"stackTrace": [
[
"/var/task/lambda_function.py",
41,
"lambda_handler",
"list_all()"
], ...
我的存储桶设置在 aws 上显示如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
我有两个问题:
1) 我应该将我的操作字段设置为什么,以便我可以使用 boto3 从我的 lambda 中列出任何文件夹中的所有文件?
2) 我应该将我的主体设置为什么,以便只有我的 aws 帐户(例如,当我运行我的 lambda 时)才能访问存储桶?
【问题讨论】:
-
使用 S3 存储桶策略是向您的 S3 存储桶授予 Lambda 权限的错误方法。相反,创建等效的 IAM 角色,然后配置 Lambda 函数以使用该角色。
-
我创建了 iam 角色并将 LF 配置为使用该角色。如何关闭对存储桶的公共访问?
-
删除桶策略。
标签: amazon-web-services amazon-s3 aws-lambda boto3