我在附有IAM角色的EC2实例上,并且希望能够验证我确实在AWS CLI中使用此角色。
我想象能够调用类似的东西(但在CLI文档中找不到类似内容):
$ aws get-current-role-details
此功能是否存在?
答案 0 :(得分:13)
请参见AWS STS command get-caller-identity
。
返回有关IAM身份的详细信息,其凭据用于调用API。
$ aws sts get-caller-identity
{
"Account": "0123456789",
"UserId": "AROAxxx:i-abc123",
"Arn": "arn:aws:sts::0123456789:assumed-role/EMR_EC2_DefaultRole/i-abc123"
}
然后您可以获取角色名称,并向IAM查询角色详细信息。
$ aws iam list-attached-role-policies --role-name EMR_EC2_DefaultRole
{
"AttachedPolicies": [
{
"PolicyName": "AmazonElasticMapReduceforEC2Role",
"PolicyArn": "arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceforEC2Role"
},
{
"PolicyName": "AmazonEC2RoleforDataPipelineRole",
"PolicyArn": "arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforDataPipelineRole"
}
]
}
答案 1 :(得分:6)
不幸的是,没有一种简单的方法来获取这些信息。你需要通过以下途径到达那里:
步骤1.从实例元数据中获取当前的EC2实例ID。
curl -s http://169.254.169.254/latest/meta-data/instance-id
您可能也需要当前区域。
curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/\(.*\)[a-z]/\1/'
步骤2.获取附加到EC2实例的IAM实例配置文件的ID。
aws ec2 describe-instances \
--region us-east-1 \
--instance-id i-12345678 \
--query 'Reservations[0].Instances[0].IamInstanceProfile.Id'
请记住根据需要替换EC2实例ID和区域。
步骤3.获取IAM实例配置文件角色。
aws iam list-instance-profiles \
--query "InstanceProfiles[?InstanceProfileId=='ABCDEFG'].Roles"
请记住替换IAM实例配置文件ID。
注意:
答案 2 :(得分:2)
有一种更简单,更优雅的方法来获取当前角色详细信息。
$ curl http://169.254.169.254/latest/meta-data/iam/info
{
"Code" : "Success",
"LastUpdated" : "2019-05-08T13:15:52Z",
"InstanceProfileArn" : "arn:aws:iam::xxxxxxxxxxxx:instance-profile/rolename",
"InstanceProfileId" : "AIPAIFNV5UU4JJLAXXXXX"
}
在InstanceProfileArn中,您可以看到您的角色名称