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

rhn*_*ble 6 amazon-s3 boto amazon-iam

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

conn = S3Connection('Access_Key_ID', 'Secret_Access_Key')
conn.get_all_buckets()
Run Code Online (Sandbox Code Playgroud)

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

Vyk*_*yke 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"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

  • 您是否确定授予"Authenticated Users"访问权限不允许*everyone*访问存储桶,并使IAM策略无效?[文档](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html)让它听起来像它. (2认同)

小智 4

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

  • 事实证明你是对的。一项补充是,对于 IAM 密钥,您还需要在存储桶名称上添加一个尾随“/”。 (5认同)