调用 assume role
STS 方法时出现错误。它表示用户无权在资源 sts:AsumeRole
xxx
。
我做了以下事情:
- 我创建了一个角色来访问 S3 存储桶。
- 我对策略模拟器进行了测试并且工作正常
- 我创建了一个新组,并在其中创建了一个新策略,该策略在所有资源上启用所有 sts 操作。
- 我用策略模拟器运行了一个测试,让 sts 承担角色,指向在第一步创建的角色的 ARN;它工作正常
- 我创建了一个新用户,并将其放入在第 3 步创建的组中
- 使用新用户的凭据,我尝试使用 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 许可协议
缺少一个步骤:在第一步中创建的角色上设置信任关系。不管用户有什么权限,如果没有设置信任关系,STS都会拒绝该请求。
IAM 角色故障排除 解释了它的工作原理。