实例

时间:2016-09-07 04:45:55

标签: amazon-web-services amazon-ec2 amazon-iam aws-cli

如何检查哪些IAM角色及其策略json附加到正在运行的EC2 实例?

是否可以通过AWS CLI实现?

这里是aws ec2 ddescribe-instances的响应 enter image description here

我尝试触发命令 - aws iam list-instance-profiles ,它给了我以下错误 -

发生错误(AccessDenied)时调用ListInstanceProfiles操作:用户:无权执行:iam:资源上的ListInstanceProfiles:

5 个答案:

答案 0 :(得分:2)

是。如果查看aws ec2 describe-instances命令生成的响应,您会注意到生成的JSON数据

  

IamInstanceProfile - > (结构)

     

与实例关联的IAM实例配置文件(如果适用)。

     

Arn - > (字符串)

     

实例配置文件的Amazon资源名称(ARN)。

     

Id - > (字符串)

     

实例配置文件的ID。

稍后,您可以使用iam cli interface来获取政策/角色详情。

aws iam get-instance-profile --instance-profile-name <name here>

答案 1 :(得分:1)

请运行describe-instances命令(OSX / Linux / UNIX)确定所选实例是否分配了任何IAM角色/实例配置文件:

  aws ec2 describe-instances
    --region us-east-1
    --instance-ids i-07a2ad8872fb3226b
    --query 'Reservations[*].Instances[*].IamInstanceProfile'

答案 2 :(得分:1)

无需查找已安装计算机的AWS CLI,仅该计算机应具有Internet且没有元数据的阻止。 您可以卷曲EC2中的元数据 curl -s http://169.254.169.254/latest/meta-data/iam/info |grep InstanceProfileArn | awk '{print $3}'

答案 3 :(得分:0)

如果您使用的是(Python):

import boto3    
client = boto3.client('ec2')

response = client.describe_instances()

# Example 1 - Short version
for r in response['Reservations']:
  for instance in r['Instances']:
    if instance.get('IamInstanceProfile'):
      print (instance['InstanceId'], instance['IamInstanceProfile'])



# Example 2 - Longer version    
for r in response['Reservations']:
  for instance in r['Instances']:
    if instance.get('IamInstanceProfile'):
      raw = client.describe_iam_instance_profile_associations(
        Filters=[
            {
                'Name': 'instance-id',
                'Values': [instance['InstanceId']]
            }
        ]
      )
      current_res = raw.get('IamInstanceProfileAssociations')[0] # <----- We're passing only one instance id in filter so only one result is returned
      print (current_res.get('InstanceId'), current_res.get('IamInstanceProfile'))

答案 4 :(得分:0)

使用 boto3

ec2 = session.client('ec2') 
iam = session.client('iam')

使用 ec2 客户端描述实例配置文件关联并获取实例配置文件名称

ec2.describe_iam_instance_profile_associations(Filters=[{'Name': 'instance-id','Values': ['i-02a1cde71XXXXXX']}])

回复:

{'IamInstanceProfileAssociations': [{'AssociationId': 'iip-assoc-0f7dd8ceeXXXXXX', 'InstanceId': 'i-02a1cde71XXXXXX', 'IamInstanceProfile': {'Arn': 'arn:aws:iam::12345679012:instance-profile/XYZ', 'Id': 'XXXXXXXXXXXXX'}, 'State': 'associated'}],....... }

使用 iam 客户端并调用 get_instance_profile 来获取与 instanceProfile 关联的 RoleName

iam.get_instance_profile(InstanceProfileName='XYZ')

回复:

{'InstanceProfile': {'Path': '/', 'InstanceProfileName': 'XYZ', 'InstanceProfileId': 'XXXXXXXXXXXXX', 'Arn': arn:aws:iam::12345679012:instance-profile/XYZ', 'CreateDate': datetime.datetime(2021, 6, 10, 16, 15, 8, tzinfo=tzutc()), 'Roles': [{'Path': '/', 'RoleName': 'ABCD', ............... 'RetryAttempts': 0}}

或者,您可以使用 list_attached_role_policies 来了解角色附加的托管策略是什么

iam.list_attached_role_policies(RoleName='ABCD')

回复:

{'AttachedPolicies': [{'PolicyName': 'EFG', 'PolicyArn': 'arn:aws:iam::12345679012:policy/EFG'}], 'IsTruncated': ......}}