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

Rya*_*uck 12 amazon-web-services amazon-iam

我正在使用附加了IAM角色的EC2实例,并且希望能够验证我确实在AWS CLI中使用此角色.

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

$ aws get-current-role-details
Run Code Online (Sandbox Code Playgroud)

这个功能是否存在?

Tyr*_*321 27

请参阅AWS STS命令 get-caller-identity

返回有关其凭据用于调用API的IAM身份的详细信息。

$ aws sts get-caller-identity
{
    "Account": "0123456789",
    "UserId": "AROAxxx:i-abc123",
    "Arn": "arn:aws:sts::0123456789:assumed-role/EMR_EC2_DefaultRole/i-abc123"
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以获取角色名称,并向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"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*ser 7

不幸的是,没有一种简单的方法来获取这些信息.您需要通过以下路径到达目的地:

步骤1.从实例元数据中获取当前EC2实例ID.

curl -s http://169.254.169.254/latest/meta-data/instance-id
Run Code Online (Sandbox Code Playgroud)

您可能还需要当前区域.

curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/\(.*\)[a-z]/\1/'
Run Code Online (Sandbox Code Playgroud)

步骤2.获取附加到EC2实例的IAM实例配置文件的ID.

aws ec2 describe-instances \
    --region us-east-1 \
    --instance-id i-12345678 \
    --query 'Reservations[0].Instances[0].IamInstanceProfile.Id'
Run Code Online (Sandbox Code Playgroud)

请记住根据需要替换EC2实例ID和区域.

步骤3.获取IAM实例配置文件角色.

aws iam list-instance-profiles \
    --query "InstanceProfiles[?InstanceProfileId=='ABCDEFG'].Roles"
Run Code Online (Sandbox Code Playgroud)

请记住替换IAM实例配置文件ID.

笔记:

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


小智 5

有一种更简单,更优雅的方法来获取当前角色详细信息。

$ 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"
}
Run Code Online (Sandbox Code Playgroud)

在InstanceProfileArn中,您可以看到您的角色名称

  • 这将告诉您哪个实例配置文件已附加到 EC2 实例,但它不会验证发出 AWS CLI 命令时使用的身份。如果您配置了 ```~/.aws/credentials``` 或将凭证传递给 AWS CLI 命令,则该值将不准确。 (3认同)
  • 补充一下 @Tyrone321 所说的,实例配置文件是验证 AWS api 调用时最后要检查的事情。尽管该curl 命令会告诉您某个角色是否已附加到该实例,但它不会告诉您该角色是否正在使用。有关优先顺序的文档:https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-precedence (2认同)