为什么可能会拒绝使用正确的IAM密钥访问S3?

时间:2012-09-13 17:59:47

标签: amazon-s3 boto amazon-iam

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

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

通过boto配置文件使用访问密钥和秘密访问密钥时也会发生这种情况。还有什么我需要做的,因为键可能来自IAM吗?这可能表示设置中有错误吗?我对IAM知之甚少,我只是给了钥匙。

3 个答案:

答案 0 :(得分:6)

要检查的一些事情......

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

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

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

权限示例:

enter image description here

IAM政策示例:

注意:使用策略生成器

时将自动生成SID
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:*"
      ],
      "Sid": "Stmt0000000000001",
      "Resource": [
        "arn:aws:s3:::myBucketName"
      ],
      "Effect": "Allow"
    }
  ]
}

答案 1 :(得分:3)

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

答案 2 :(得分:-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))