AWS CLI 请求“ec2 describe-instances”和“ec2 describe-iam-instance-profile-associations”在“IamInstanceProfile”属性中包含实例配置文件。
其中包括 ARN,例如:
arn:aws:iam::123:instance-profile/AmazonSSMRoleForInstancesQuickSetup
在这种情况下,本例中的最后一段“AmazonSSMRoleForInstancesQuickSetup”是 IAM 角色名称。在对多个现有问题的回答中也建议这样做:
- https://stackoverflow.com/questions/69002676/how-to-get-an-aws-roles-friendly-name-from-its-arn
- https://stackoverflow.com/questions/68347014/is-there-a-way-to-get-name-of-iam-role-attached-to-an-ec2-instance-with-boto3
- https://stackoverflow.com/questions/70307973/how-to-get-arn-of-an-iam-role
- https://stackoverflow.com/questions/69002676/how-to-get-an-aws-roles-friendly-name-from-its-arn
但有时实例配置文件中的 ARN 看起来像这样:
arn:aws:iam::123:instance-profile/eks-ab13cc88-bc13-13bc-acdc-1234567890ab
最后一部分不再是角色名称 - 实际上,它似乎是“Auto Scaling 组名称”。AWS Web 界面确实在两种情况下都在实例属性中显示了分配的 IAM 角色。
如何在所有情况下使用 AWS CLI 可靠地获取 EC2 实例的角色名称?
答案1
非常感谢@[电子邮件保护] - 在此引用他们的回复,如果他们自己发布的话将会被删除。
EC2 实例配置文件是保存角色的容器。默认情况下,将创建一个与配置文件名称匹配的角色,但它们可能不同。
我认为您需要获取配置文件名称并使用它来调用aws iam get-instance-profile --instance-profile-name <value>
。在您想要的响应中InstanceProfile.Roles[].RoleArn
。
https://docs.aws.amazon.com/cli/latest/reference/iam/get-instance-profile.html https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html