跳至内容

如何使用基于 IAM 身份的策略来限制对特定 IAM 角色会话的访问?

1 分钟阅读
0

我想使用基于身份的策略授予对特定 AWS Identity and Access Management (IAM) 角色会话的权限。

解决方法

要创建允许访问特定 IAM 角色会话的 IAM 策略,请使用 AWS 全局条件上下文键 aws:userid

**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

aws: userid 全局条件键会检查发起请求的主体的唯一 ID 是否与 IAM 策略中指定的唯一 ID 相匹配。例如,要允许 IAM 角色会话在您的 AWS 账户中执行特定的 Amazon Elastic Compute Cloud (Amazon EC2) 操作,请创建 IAM 策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowASpecificRoleSession",
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances",
                "ec2:RebootInstances",
                "ec2:TerminateInstances"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:userid": "AROA123456789EXAMPLE:&ExampleRoleSessionName"
                }
            }
        }
    ]
}

**注意:**请将 aws: userid 替换为您角色的唯一 ID 和会话名称。

上述 IAM 策略通过 aws: userid 全局条件键授予 Amazon EC2 实例对 IAM 角色会话的访问权限。其他角色会话无法执行 Amazon EC2 操作。

要获取 IAM 角色的角色 ID,请运行 get-role AWS CLI 命令:

aws iam get-role --role-name role_name

**注意:**请将 role_name 替换为您的角色名称。

您将收到类似于以下内容的输出:

{
    "Role": {
        "Path": "/",
        "RoleName": "Test-Role",
        "RoleId": "AROA123456789EXAMPLE",
        "Arn": "arn:aws:iam::444455556666:role/Role",
        "CreateDate": "2023-08-04T12:37:14+00:00",
        "AssumeRolePolicyDocument": "URL-encoded-JSON",
        "Description": "Test Role",
        "MaxSessionDuration": 3600,
        "RoleLastUsed": {
            "Region": "us-east-1",
            "LastUsedDate": "2025-10-27T12:36:29+00:00"
        }
    }
}

在输出中,检查 RoleId 字符串。角色 ID 会在基于身份的策略中使用,以限制 Amazon EC2 实例对 IAM 角色会话的访问权限。

**注意:**aws:userid 全局条件键可用于任何类型的 IAM 策略,例如基于身份的策略、基于资源的策略以及权限边界策略。aws:userid 全局条件键的值取决于发起请求的主体类型。要确定不同主体类型的值,请参阅主体键值

相关信息

如何限制 IAM 身份对特定 Amazon EC2 资源的访问?

如何使用 IAM 策略标签来限制 EC2 实例或 EBS 卷的创建和访问方式?

AWS 官方已更新 3 个月前