【问题标题】:Problems specifying a single bucket in a simple AWS user policy在简单的 AWS 用户策略中指定单个存储桶时出现问题
【发布时间】:2026-01-11 15:05:02
【问题描述】:

我正在使用 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": "*"
    }
  ]
}

【问题讨论】:

    标签: amazon-s3 policy boto bucket amazon-iam


    【解决方案1】:

    当我尝试访问 S3 时出现 403 错误。

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

    除了策略已经针对的Resource 之外,通常情况下,一个用例还涉及针对不同资源类型的 S3 API 调用。具体来说,您需要注意Operations on the Service(例如ListAllMyBuckets)、Operations on Buckets(例如ListBucket)和Operations on Objects(例如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",
          }
       ]
    

    【讨论】:

    • 谢谢。这正是问题所在。
    • 啊。 AWS 的策略机制是加重。作为参考,我的特定问题(授予用户对存储桶的完全访问权限)通过以下行解决:“Resource”:[“arn:aws:s3:::BUCKETNAME”,“Resource”:“arn:aws: s3:::BUCKETNAME/*"]
    • @Steffen :先生,我已将策略应用于 s3 以列出单个存储桶,但当我登录控制台时,我看不到任何内容,我收到此错误:You dont have permission to access it