从AWS CLI查找服务器上使用的角色

时间:2017-11-15 17:29:04

标签: amazon-web-services amazon-iam

我在附有IAM角色的EC2实例上,并且希望能够验证我确实在AWS CLI中使用此角色。

我想象能够调用类似的东西(但在CLI文档中找不到类似内容):

$ aws get-current-role-details

此功能是否存在?

3 个答案:

答案 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。

注意:

  • IAM实例配置文件可能具有多个与之关联的IAM角色。通常它只有一个,但它可以有更多。

答案 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中,您可以看到您的角色名称