
Запросы 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/есть-способ-получить-имя-роли-iam-прикрепленной-к-экземпляру-ec2-с-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
И последняя часть больше не является именем роли - на самом деле, это, похоже, "Имя группы автоматического масштабирования". Веб-интерфейс AWS отображает назначенную роль IAM в обоих случаях внутри свойств экземпляра.
Как можно надежно получить имя роли для экземпляров EC2 во всех случаях с использованием AWS CLI?
решение1
Большое спасибо @[email protected] - цитирую их ответ здесь, удалю, если они опубликуют себя.
Профиль экземпляра 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