6

我正在尝试使用 boto 访问 S3 上的存储桶。我已获得对存储桶的读取访问权限,并且当我在 S3 浏览器中探索它时,我的密钥正在工作。以下代码返回 403 Forbidden Access Denied。

conn = S3Connection('Access_Key_ID', 'Secret_Access_Key')
conn.get_all_buckets()

通过 boto 配置文件使用访问密钥和秘密访问密钥时也会发生这种情况。由于密钥可能来自 IAM,我还需要做些什么吗?这是否表明设置中有错误?我对 IAM 了解不多,我只是得到了钥匙。

4

3 回答 3

6

有些事情要检查...

  • 如果您使用 boto,请确保您使用 conn.get_bucket(bucket_name) 仅访问您有权访问的存储桶。

  • 在您的 IAM(用户)策略中,如果您要限制对单个存储桶的访问,请确保该策略包含对存储桶的足够权限,并且不包含用于 ARN 名称的尾部斜杠+星号(请参见下面的示例)。

  • 请务必在存储桶的 S3 中为“Authenticated Users”设置“上传/删除”权限。

权限示例:

在此处输入图像描述

IAM 政策示例:

注意:使用策略生成器时会自动生成 SID

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:*"
      ],
      "Sid": "Stmt0000000000001",
      "Resource": [
        "arn:aws:s3:::myBucketName"
      ],
      "Effect": "Allow"
    }
  ]
}
于 2013-10-01T21:16:31.640 回答
4

我的猜测是,这是因为您为您有权访问的单个存储桶调用 conn.get_all_buckets() 而不是 conn.get_bucket(bucket_name) 。

于 2012-09-13T21:30:06.653 回答
-2

from boto.s3.connection import S3Connection conn = S3Connection('access key', 'secret access key') allBuckets = conn.get_all_buckets() for bucket in allBuckets: print(str(bucket.name))

于 2018-01-20T01:46:30.753 回答