0

我有 2 个帐户,一个称为 RootAccount,我在其中创建了一个组织,一个称为 ChildAccount 的子帐户。

我在 RootAccount 中创建了一个名为 RootUser 的用户,并在 RootAccount 中创建了一个策略来授予 RootUser 承担权限。我想在未来自动创建更多帐户,这就是为什么我将其限制为我孩子中的所有角色。这是政策:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:PrincipalOrgID": "o-xxxxxxxxxx"
            }
        }
    }
]
}

然后我使用此信任策略在名为 ChildRole 的 ChildAccount 中创建了一个角色:

  "Version": "2012-10-17",
  "Statement": [
  {
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::1111111111:user/RootUser"
  },
  "Action": "sts:AssumeRole"
}
]
}

其中 1111111111 是 RootAccount 的帐号。

然后我创建了一个带有一些示例代码的 React 应用程序,我想在其中承担我的 RootUser 的角色:

const AWS = require("aws-sdk");
AWS.config.update({ accessKeyId: 'RootUserAccessKey', secretAccessKey: 'RootUserSecret', region: "eu-central-1" });
const sts = new AWS.STS()

const checkRights = async () => {
const params = {
  RoleArn: 'Arn of ChildRole',
  RoleSessionName: 'testsession',
  DurationSeconds: 900
}
const session = sts.assumeRole(params,function(err:any,data:any){
  if(err)
  {
    console.log('err:',err)
  }
  console.log('data:',data)
}).promise()

}

每当我运行 checkRights() 时,我都会收到一条错误消息 403 Access denied:

AccessDenied: User: {Arn of RootUser} is not authorized to perform: sts:AssumeRole on resource: {Arn of ChildRole}

知道我可能会错过什么吗?在我的代码/策略中发现错误?我仔细检查了 OrgID、ARN 并分配了正确的策略,但没有帮助。

提前致谢!

问候克里斯蒂安

编辑:

我删除了 PrincipalOrgID 条件,但它没有帮助,我仍然收到相同的错误消息。我删除了该角色,分配了 Assume All 规则并等待了大约 25 分钟。我还重新启动了节点服务器。

还有什么可能是错的?还是更新权限需要更长的时间?

4

2 回答 2

0

经过大量故障排除并获得 aws dev 支持计划后,我为用户更新了我的凭据,这解决了它

于 2020-11-19T10:33:36.070 回答
0

AWS 文档说此条件键适用于基于资源的策略。但是,您正在尝试在基于身份的策略中使用:

aws:PrincipalOrgID – 简化在基于资源的策略中指定 Principal 元素。

这可以解释为什么您的政策没有按照您期望的方式运作。

于 2020-11-18T11:32:17.490 回答