随着博托库,我能避免在S3基地桶授予列表权限?(With the boto library, can

2019-09-19 11:31发布

我现在有有像这样一个政策的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/"
    ]
  }
  ]
}

宝途似乎需要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>

有什么办法,同时仍然使用博托限制桶的上市在一定前缀(如“前缀/”)?

UPDATE

为了使一切工作正常,我用了以下策略:

{
  "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/*"
    ]
  }
  ]
}

你仍然需要使用validate=False参数来get_bucket方法,但它允许前缀内上市。

Answer 1:

默认情况下,博托试图做的桶中列表操作,要求零个结果来验证桶的存在。 如果您希望它跳过此验证步骤,只是这样称呼它:

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

这应该跳过列表操作。



文章来源: With the boto library, can I avoid granting list permissions on a base bucket in S3?