小编mik*_*ike的帖子

33
推荐指数
2
解决办法
12万
查看次数

如何限制对特定前缀的S3密钥的访问?(在Python/boto中)

我想限制一个boto程序,以便能够列出密钥并仅从S3存储桶中的特定文件夹(前缀)获取密钥.

我有一个具有以下访问策略的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/*"]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

在boto中,我连接到S3并获得临时信誉.然后我运行这个:

bucket = s3_connection.get_bucket('my-bucket')
all_keys = bucket.get_all_keys()
for key in all_keys:
    print key
Run Code Online (Sandbox Code Playgroud)

这在get_bucket调用上失败了.到目前为止,我能让它工作的唯一方法是删除s3:Prefix条件(基本上,删除策略中的第一个语句).但是,然后允许脚本列出整个存储桶中的密钥,而不仅仅是具有特定前缀的密钥.我使用错误的方法获取密钥吗?所有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 …
Run Code Online (Sandbox Code Playgroud)

boto amazon-web-services

3
推荐指数
1
解决办法
939
查看次数