我想使用基于身份的策略向特定 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 全局条件键的值取决于发起请求的主体的类型。要确定不同类型主体的值,请参阅所有请求中的可用信息。
相关信息
我能否限制 IAM 用户对特定 Amazon EC2 资源的访问?
如何使用 IAM 策略标签来限制 EC2 实例或 EBS 卷的创建方式?