You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为AWS另一账户所有用户授予S3桶ListBucket权限?

解决AWS S3跨账户授予所有用户ListBucket权限的问题

错误原因

你之前使用arn:aws:iam::<account_b>:user/*作为Principal的配置无效,是因为AWS不允许在S3桶策略中通过通配符直接指定另一账户的所有IAM用户,这种写法会触发Invalid principal in policy错误。

可行解决方案

方案1:通过账户根ARN授权,配合IAM内部权限控制

直接将账户B的根ARN作为Principal,然后在账户B的IAM体系内控制哪些用户可以访问该桶:

桶策略示例(替换<account_b_id>和<your_bucket_name>为实际值):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<account_b_id>:root"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::<your_bucket_name>"
    }
  ]
}

配置完成后,在账户B中给需要访问的用户/用户组添加IAM权限策略,允许s3:ListBucket操作目标桶即可。

方案2:使用条件键限制账户来源

如果需要更精准地限定只有账户B的实体能访问,可以用aws:PrincipalAccount条件键,配合通配符Principal:

桶策略示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::<your_bucket_name>",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalAccount": "<account_b_id>"
        }
      }
    }
  ]
}

这种方式会允许账户B下的所有IAM用户、角色等实体执行ListBucket操作,同样需要账户B内部的IAM策略允许对应用户的该操作才能生效。

注意事项

AWS的权限遵循桶策略 + IAM策略的交集规则,只有两者都允许的操作,用户才能实际执行。所以即使桶策略开放了权限,账户B的用户仍需要自身IAM策略具备对应的s3:ListBucket权限。

内容的提问来源于stack exchange,提问作者pyCthon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:52:15