3

現在、次のようなポリシーを持つ 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 は、get_bucket 呼び出しを実行するために、バケットのルートに ListBucket パーミッションが存在する必要があるようです。Statement 配列の最初のハッシュを削除すると、get_bucket('blah.example.com') は失敗します。エラーテキストは次のとおりです。

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

boto を使用しながら、バケットのリストを特定のプレフィックス (「prefix/」など) に制限する方法はありますか?

アップデート

すべてを機能させるために、次のポリシーを使用しました。

{
  "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が、プレフィックス内にリストすることができます。

4

1 に答える 1

5

デフォルトでは、botoはバケットに対してLIST操作を実行し、結果をゼロにすることでバケットの存在を検証しようとします。この検証手順をスキップしたい場合は、次のように呼び出します。

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

これにより、LIST操作がスキップされます。

于 2012-07-13T21:47:01.270 に答える