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

AWS IAM角色主体vs角色会话主体:资源策略中角色主体的适用场景

IAM角色ARN在Principal元素中的适用场景

AWS官方文档指出,在IAM政策的Principal元素中指定角色ARN时,需使用如下格式:

"Principal": { "AWS": "arn:aws:iam::AWS-account-ID:role/role-name" }

但在资源型政策(比如S3桶政策)中直接使用该格式作为Principal时,无法为已扮演该角色的主体授权——因为所有IAM操作实际是由角色会话主体(格式如arn:aws:sts::XXXXXXXXXXXX:assumed-role/MyRole/MyRoleSessionName)执行的。

比如下面这个S3桶政策,直接用角色ARN作为Principal,对同一账户下已扮演MyRole的主体完全无效:

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::XXXXXXXXXXXX:role/MyRole"
        },
        "Action": "s3:ListBucket",
        "Resource": "arn:aws:s3:::my-bucket"
    }
}

要实现授权,要么指定具体的角色会话ARN:

"Principal": {
    "AWS": "arn:aws:sts::XXXXXXXXXXXX:assumed-role/MyRole/MyRoleSessionName"
}

要么通过Condition元素匹配该角色的所有会话:

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:ListBucket",
        "Resource": "arn:aws:s3:::my-bucket",
        "Condition": {
            "ArnEquals": {
                "aws:PrincipalArn": "arn:aws:iam::XXXXXXXXXXXX:role/MyRole"
            }
        }
    }
}

那什么时候才适合在Principal元素中直接使用IAM角色ARN呢?主要有以下两种场景:

  • 跨账户授权时,允许对方账户中的角色访问本账户资源
    当需要给其他AWS账户中的角色授予访问权限时,可以直接在资源型政策的Principal中写入对方角色的完整ARN。此时AWS会验证请求的角色会话所属的角色是否匹配该ARN,从而实现授权。示例:
{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::OTHER-ACCOUNT-ID:role/TheirCrossAccountRole"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::my-bucket/*"
    }
}
  • 信任政策(Trust Policy)中指定可扮演该角色的主体
    IAM角色的信任政策本身就是用来定义哪些主体可以扮演该角色的,此时必须在Principal中直接使用角色或用户的ARN(或账户ID等)。示例:允许本账户中的MyOtherRole扮演当前角色的信任政策:
{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::MY-ACCOUNT-ID:role/MyOtherRole"
        },
        "Action": "sts:AssumeRole"
    }
}

简单总结:资源型政策的同账户场景下,直接用角色ARN做Principal无效;但跨账户资源授权、以及角色的信任政策中,直接使用角色ARN作为Principal是标准且有效的用法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:09:22