1

我正在使用 AWS IAM STS(通过 boto)为我访问 S3 存储桶创建凭证。我不知道以下政策有什么问题。我已经尽可能地简化了我的政策,但仍然得到了意想不到的结果。

当我获得用户的令牌时,我附上了以下政策:

user_policy_string = r'{"Statement":[{"Effect":"Allow","Action": "s3:*","Resource":"arn:aws:s3:::*"}]}'

这可行,但显然有点过于宽松。在缩小与这些凭据关联的权限时,我尝试使用相同的策略,但指定存储桶:

user_policy_string = r'{"Statement":[{"Effect":"Allow","Action": "s3:*","Resource":"arn:aws:s3:::buck_binary_bucket_bay-earth-d5a/*"}]}'

在这里,当我尝试访问 S3 时出现 403 错误。根据 AWS 文档,我确信这是解决策略中特定存储桶的方法,所以我不知道是什么导致了这种限制。我是否错误地指代了存储桶?

在 S3 控制台中,策略为空(也尝试添加完全许可策略)。对于用于生成 STS 令牌的 AWS 账户,策略如下:

  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:GetFederationToken",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:GetUser",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}
4

1 回答 1

6

在这里,当我尝试访问 S3 时出现 403 错误。

您实际上是如何尝试访问 S3的,即通过哪个工具、服务、API?

很多情况下,一个用例涉及 S3 API 调用,该调用解决了不同的资源类型,以及Resource策略已经定位的目标。具体来说,您需要了解服务上的操作(例如ListAllMyBuckets)、桶上的操作(例如ListBucket)和对象上的操作(例如GetObject)之间的区别。

如果您的 S3 访问方法也隐式使用任何其他资源类型(即除了您已经通过 寻址的对象资源之外buck_binary_bucket_bay-earth-d5a/*),这些都需要相应的附加策略。例如,在访问对象本身之前能够通过ListBucket列出存储桶中的对象的常见要求将需要一个相应的策略片段来寻址存储桶,如下所示:

   "Statement":[{
      "Effect":"Allow",
      "Action":"s3:ListBucket",
      "Resource":"arn:aws:s3:::buck_binary_bucket_bay-earth-d5a",
      }
   ]
于 2012-02-01T01:20:29.760 回答