AWS cli:未授权执行:资源上的 sts:AssumeRole
Posted
技术标签:
【中文标题】AWS cli:未授权执行:资源上的 sts:AssumeRole【英文标题】:AWS cli: not authorized to perform: sts:AssumeRole on resource 【发布时间】:2020-06-05 14:44:57 【问题描述】:我有一个 AWS 账户,我在其中担任名为 A(role-A
) 的角色,我通过 Web 控制台从该角色创建了另一个名为 B(role-B
) 的角色,并将管理员策略附加到该角色
这里是cli配置
[default]
aws_access_key_id = <>
aws_secret_access_key = <>
region = eu-central-1
[role-B]
role_arn = arn:aws:iam::<id>:role/ics-role
mfa_serial = arn:aws:iam::<id>:mfa/<name>
external_id = <name>
source_profile = default
role-B
我从role-A
创建的
当我尝试获取角色详细信息时
aws --profile role-B sts get-caller-identity
我收到以下错误
调用 AssumeRole 操作时发生错误 (AccessDenied):用户:arn:aws:iam:::user/ 无权执行:sts:AssumeRole on resource:arn:aws: iam:::role/ics-role
【问题讨论】:
【参考方案1】:您需要检查 iam 角色的信任关系策略文档,以确认您的用户在其中。
另外确保 iam 用户具有允许他们担任该角色的明确权限。
信任关系应该是这样的:
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Principal":
"AWS": [
"arn:aws:iam::1234567890:user/person"
]
,
"Action": "sts:AssumeRole"
]
【讨论】:
我在创建角色和策略附件时没有遇到任何权限问题。信任文件是什么意思 在控制台中将是信任关系,我将更新答案以包含示例。 这帮助我解决了我的问题,因为在打开信任关系选项卡时我发现设置了一个外部 ID。【参考方案2】:我的问题是我在策略 json 中设置了条件。
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Principal":
"AWS": "arn:aws:iam::000000000:dave"
,
"Action": "sts:AssumeRole",
"Condition":
// Condition set here
]
我删除了条件,现在它可以正常工作了。
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Principal":
"AWS": "arn:aws:iam::000000000:dave"
,
"Action": "sts:AssumeRole"
]
【讨论】:
以上是关于AWS cli:未授权执行:资源上的 sts:AssumeRole的主要内容,如果未能解决你的问题,请参考以下文章
如何通过忽略未使用的资源从 aws cli 创建 aws java lambda 函数?
如何为 CORS 预检请求绕过 AWS API Gateway 代理资源上的 Cognito 授权方?
如何授权 lambda 使用 CDK 执行 ses:SendEmail?