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

上次更新日期:2022 年 1 月 31 日

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

解决方法

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

注意:如果您在运行 AWS Command Line Interface (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": "AROAXXXXXXXXXXXXXXXXX:<role-session-name>"
                }
            }
        }
    ]
}

此 IAM 策略授予 Amazon EC2 实例访问 aws:userid 全局条件键中的 IAM 角色会话的权限。其他角色会话无法执行任何 Amazon EC2 操作。

要获取 IAM 角色的角色 ID,请运行以下 AWS CLI 命令:

$ aws iam get-role --role-name <rolename>

您会收到类似如下内容的输出:

{
    "Role": {
        "Description": "Test Role",
        "AssumeRolePolicyDocument":"<URL-encoded-JSON>",
        "MaxSessionDuration": 3600,
        "RoleId": "AROA1234567890EXAMPLE",
        "CreateDate": "2019-11-13T16:45:56Z",
        "RoleName": "Test-Role",
        "Path": "/",
        "RoleLastUsed": {
            "Region": "us-east-1",
            "LastUsedDate": "2019-11-13T17:14:00Z"
        },
        "Arn": "arn:aws:iam::123456789012:role/Test-Role"
    }
}

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

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