You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS IAM角色链为何无法获取子角色的CloudFormation权限?

问题分析与原因说明

问题背景

用户拥有附加的策略FooPol:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::000000000000:role/fooRole",
            "Effect": "Allow"
        }
    ]
}

fooRole附加了策略BarPol:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::000000000000:role/barRole",
            "Effect": "Allow"
        }
    ]
}

barRole具备cloudformation:DescribeStacks权限,但通过「用户→fooRole→barRole」的角色链无法执行该操作,直接将BarPol附加到用户则可正常授权。

核心原因

1. barRole的信任策略未授权fooRole作为可信实体

当用户直接通过自身的BarPol执行sts:AssumeRole访问barRole时,barRole的信任策略必然包含了该用户(或用户所属AWS账户)作为可信主体,因此操作能成功。但通过角色链访问时,是fooRole发起Assume barRole的请求,此时barRole的信任策略需要明确允许fooRole的ARN作为可信实体,否则这个请求会被拒绝,无法获取barRole的权限。

2. 角色链的权限传递需满足双向授权规则

AWS角色链的每一步都必须同时满足两个条件:

  • 上层实体(用户/前序角色)拥有允许Assume目标角色的权限策略;
  • 目标角色的信任策略明确允许上层实体作为可信来源。

你的场景中,fooRole虽然有BarPol允许它Assume barRole,但barRole的信任策略未对fooRole开放权限,导致角色链在第二步中断,无法获取barRole的权限执行cloudformation:DescribeStacks操作。

解决方法

更新barRole的信任策略,添加允许fooRole Assume它的规则,示例如下:

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

内容的提问来源于stack exchange,提问作者Varid Vaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 10:24:45