gpt4 book ai didi

python - 使用 boto 库,我可以避免在 S3 中的基本存储桶上授予列表权限吗?

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:37 26 4
gpt4 key购买 nike

我目前有一个 IAM 角色,其政策如下:

{
"Version":"2008-10-17",
"Statement": [
{
"Effect":"Allow",
"Action":["s3:ListBucket"],
"Resource":[
"arn:aws:s3:::blah.example.com"
]
},
{
"Effect":"Allow",
"Action":["s3:GetObject", "s3:GetObjectAcl", "s3:ListBucket", "s3:PutObject", "s3:PutObjectAcl", "s3:DeleteObject"],
"Resource":[
"arn:aws:s3:::blah.example.com/prefix/"
]
}
]
}

Boto 似乎需要 ListBucket 权限出现在存储桶的根上才能执行 get_bucket 调用。如果我删除语句数组中的第一个散列,get_bucket('blah.example.com') 将失败。这是错误文本:

*** S3ResponseError: S3ResponseError: 403 Forbidden<?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>xxxx</RequestId><HostId>yyyy</HostId></Error>

Is there any way to restrict listing of the bucket to a certain prefix (e.g. "prefix/") while still using boto?

UPDATE

In order to get everything working, I used the following policy:

{
"Version":"2008-10-17",
"Statement": [
{
"Effect":"Allow",
"Action":["s3:ListBucket"],
"Resource":[
"arn:aws:s3:::blah.example.com"
],
"Condition":{
"StringLike":{
"s3:prefix":"prefix/*"
}
}
},
{
"Effect":"Allow",
"Action":["s3:GetObject", "s3:GetObjectAcl", "s3:PutObject", "s3:PutObjectAcl", "s3:DeleteObject"],
"Resource":[
"arn:aws:s3:::blah.example.com/prefix/*"
]
}
]
}

您仍然需要对 get_bucket 方法使用 validate=False 参数,但它允许在前缀内列出。

最佳答案

默认情况下,boto 会尝试通过对存储桶执行 LIST 操作来验证存储桶的存在,并询问零结果。如果您希望它跳过此验证步骤,只需这样调用它:

>>> import boto
>>> s3 = boto.connect_s3()
>>> bucket = s3.get_bucket('mybucket', validate=False)

这应该跳过 LIST 操作。

关于python - 使用 boto 库,我可以避免在 S3 中的基本存储桶上授予列表权限吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11478752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com