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

跨AWS账户:IAM组无法作为Principal时,如何让Account2用户访问Account1的S3桶?

跨账户S3访问解决方案:无需频繁更新桶策略

错误原因

你遇到的Invalid principal in policy错误,是因为AWS资源策略(如S3桶策略)不支持将其他账户的IAM组直接设为Principal。IAM组仅能在同一账户的IAM策略中使用,跨账户场景下无法作为资源策略的信任主体。

解决方案:IAM角色+组策略联动

采用角色中转的方式,后续新增用户到Account2的robots-group时,无需修改Account1的任何配置,步骤如下:

1. Account1创建S3访问角色

创建名为VehicleS3AccessRole的IAM角色(名称可自定义):

  • 信任策略:允许Account2的用户Assume该角色(替换1234567890为Account2的账户ID):
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::1234567890:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringLike": {
          "aws:PrincipalArn": "arn:aws:iam::1234567890:user/*"
        }
      }
    }
  ]
}
  • 权限策略:赋予角色访问目标S3桶的权限:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:PutObject"],
      "Resource": "arn:aws:s3:::company-vehicle-configurations-test/*"
    }
  ]
}

2. Account2配置robots-group权限

编辑robots-group的IAM策略,允许组内用户AssumeAccount1的角色(替换0987654321为Account1的账户ID,VehicleS3AccessRole为你创建的角色名):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::0987654321:role/VehicleS3AccessRole"
    }
  ]
}

3. 物理机器访问流程

Account2的物理机器IAM用户需先调用sts:AssumeRole获取Account1角色的临时凭证,再用该凭证访问S3桶。主流AWS SDK均支持自动处理角色切换,只需配置角色ARN即可。

方案优势

  • 新增用户到robots-group时,仅需将用户加入组,无需修改Account1的任何策略,完全适配你的需求。
  • 通过角色实现跨账户权限中转,兼顾安全性与可维护性。

内容的提问来源于stack exchange,提问作者Esben von Buchwald

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:05:04