如何启用对 AWS STS AssumeRole 的访问

新手上路,请多包涵

调用 assume role STS 方法时出现错误。它表示用户无权在资源 sts:AsumeRole xxx

我做了以下事情:

  1. 我创建了一个角色来访问 S3 存储桶。
  2. 我对策略模拟器进行了测试并且工作正常
  3. 我创建了一个新组,并在其中创建了一个新策略,该策略在所有资源上启用所有 sts 操作。
  4. 我用策略模拟器运行了一个测试,让 sts 承担角色,指向在第一步创建的角色的 ARN;它工作正常
  5. 我创建了一个新用户,并将其放入在第 3 步创建的组中
  6. 使用新用户的凭据,我尝试使用 sts asume 角色获取新凭据,但向我抛出一个错误,提示我的用户无权执行 sts:AssumeRole

我究竟做错了什么?

集团政策

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "some-large-id",
            "Effect": "Allow",
            "Action": [
                "sts:*"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

角色政策

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "another-large-id",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-name/*"
            ]
        }
    ]
}

最后像这样打电话

let policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "new-custom-id",
            "Effect": "Allow",
            "Action": ["s3:PutObject"],
            "Resource": ["arn:aws:s3:::my-bucket-name/*"]
        }
    ]
};

let params = {
    DurationSeconds: 3600,
    ExternalId: 'some-value',
    Policy: JSON.stringify(policy),
    RoleArn: "arn:aws:iam::NUMBER:role/ROLE-NAME", //Cheked, role is the same that step one
    RoleSessionName: this.makeNewSessionId()
};
let sts = new AWS.STS({ apiVersion: '2012-08-10' });

sts.assumeRole(params, (err, data) => {
    if(err) console.log(err);
    else console.log(data);
});

原文由 Vladimir Venegas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 602
1 个回答

缺少一个步骤:在第一步中创建的角色上设置信任关系。不管用户有什么权限,如果没有设置信任关系,STS都会拒绝该请求。

IAM 角色故障排除 解释了它的工作原理。

原文由 Vladimir Venegas 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题