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



我所在的 EC2 实例附加了 IAM 角色,并希望能够验证我是否确实在 AWS CLI 中使用此角色。

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

$ aws get-current-role-details

此功能是否存在?

使用 AWS STS 命令get-caller-identity

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

$ aws sts get-caller-identity
{
    "UserId": "AIDAxxx",
    "Account": "xxx",
    "Arn": "arn:aws:iam::xxx:user/Tyrone321"
}

然后,您可以获取角色名称,并使用内联策略的iam list-role-policies和附加托管策略的iam-list-attached-role-policies来查询 IAM 以获取角色详细信息(感谢 @Dimitry K 的标注(。

$ aws iam list-attached-role-policies --role-name Tyrone321
{
  "AttachedPolicies": [
  {
    "PolicyName": "SomePolicy",
    "PolicyArn": "arn:aws:iam::aws:policy/xxx"
  },
  {
    "PolicyName": "AnotherPolicy",
    "PolicyArn": "arn:aws:iam::aws:policy/xxx"
  } ]
}

要获取实际的 IAM 权限,请使用 aws iam get-policy 获取默认策略版本 ID,然后使用版本 ID aws iam get-policy-version以检索实际的策略语句。如果 IAM 委托人是用户,则命令aws iam list-attached-user-policiesaws iam get-user-policy。有关更多信息,请参阅 AWS IAM CLI 参考。

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

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

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

第 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 角色。通常它只有一个,但它可能会有更多。

相关内容

  • 没有找到相关文章

最新更新