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 授权方?

用户未在 MEAN Stack 中获得授权?

如何授权 lambda 使用 CDK 执行 ses:SendEmail?

同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示

尝试使用 AWS CLI 运行 ECS 任务时出现资源:内存错误