gpt4 book ai didi

amazon-web-services - 如何限制对特定前缀中的 S3 key 的访问? (在 Python/boto 中)

转载 作者:行者123 更新时间:2023-12-03 01:29:03 24 4
gpt4 key购买 nike

我想限制 boto 程序只能列出 key 并仅从 S3 存储桶中的特定文件夹(前缀)获取 key 。

我有一个具有以下访问策略的 IAM 角色(当然是实名)。这是 IAM 文档中有关如何允许用户访问“主目录”的示例策略的变体:

{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:Get*", "s3:List*"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-bucket"],
"Condition":{"StringLike":{"s3:prefix":["my-prefix/*"]}}
},
{
"Action":["s3:Get*", "s3:List*"],
"Effect":"Allow",
"Resource": ["arn:aws:s3:::my-bucket/my-prefix/*"]
}
]
}

在 boto 中,我连接到 S3 并获取临时信用。然后我运行这个:

bucket = s3_connection.get_bucket('my-bucket')
all_keys = bucket.get_all_keys()
for key in all_keys:
print key

get_bucket 调用失败。到目前为止,我可以让它工作的唯一方法是删除 s3:Prefix 条件(基本上,删除策略中的第一个语句)。但这允许脚本列出整个存储桶中的键,而不仅仅是那些具有特定前缀的键。我是否使用了错误的方法来获取 key ?所有 S3 访问似乎都以 get_bucket 开头。

可以使用 AWS CLI 完成这项工作,如下所示:

aws sts assume-role --role-arn arn:aws:iam::123456789012:role/my-role --role-session-name "role1" --profile other-account-admin-user > temp-creds.txt
# ... copy temp-creds into credentials file using profile name "temp-creds", then ...
# works
aws s3api list-objects --bucket my-bucket --prefix my-prefix/ --profile temp-creds
# fails, as expected
aws s3api list-objects --bucket my-bucket --profile temp-creds

这让我觉得 boto 有一种方法可以做到这一点,但我就是想不出来。 (当然,我的测试可能会有缺陷,这种情况发生的比较多,哈哈。)

最佳答案

默认情况下,boto 中的 get_bucket 方法会尝试通过对存储桶 URL 执行 HEAD 请求来验证存储桶是否存在。我认为这在您的情况下会失败,因为用户无权访问存储桶的根目录。

所以,我认为这样的东西对你有用:

bucket = s3_connection.get_bucket('my-bucket', validate=False)
for key in bucket.list(prefix='my-prefix'):
print(key)

关于amazon-web-services - 如何限制对特定前缀中的 S3 key 的访问? (在 Python/boto 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24353337/

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