使用Python和BOTO3列出AWS IP和设备

时间:2018-05-31 23:37:44

标签: python bash amazon-web-services boto

我正在尝试使用Python和BOTO3列出AWS中所有设备的IP(ELB,EC2等)

我已经能够提取整个库存但是我如何承担一个角色并仅列出所有链接的AWS账户中的IP和设备?

2 个答案:

答案 0 :(得分:1)

最新答案,但希望对您有所帮助。您实际上应该使用network_interfaces来获取所有服务的IP地址。我使用一组已命名的配置文件运行类似的报告。像这样:

for profile in self.profiles:
    print(f'Analyzing {profile}...')
    session = boto3.Session(profile_name=profile)
    ec2 = session.resource('ec2')
    for eni in ec2.network_interfaces.all():
        attachment_info = 'No attachment'
        if eni.attachment:
            if 'InstanceId' in eni.attachment:
                attachment_info = eni.attachment['InstanceId']
            else:
                attachment_info = eni.attachment['InstanceOwnerId']

        row = (
            profile,
            eni.private_ip_address,
            eni.subnet_id,
            eni.subnet.cidr_block,
            attachment_info,
        )
        print(row)

关于跨帐户的角色,如您在代码中所见,boto3将遵守~/.aws/config中的命名配置文件。参见https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html

但是,您也可以通过如下代码直接在代码中扮演角色:

sts = boto3.client('sts')
creds = sts.assume_role(
    RoleArn=f'arn:aws:iam::{acct_id}:role/{role_name}',
    RoleSessionName='...'
)
auth = {
    'aws_access_key_id': creds['Credentials']['AccessKeyId'],
    'aws_secret_access_key': creds['Credentials']['SecretAccessKey'],
    'aws_session_token': creds['Credentials']['SessionToken'],
}
session = boto3.Session(**auth)
ec2 = session.resource('ec2')

例如,如果您还需要遍历多个区域,则可能更可取。

答案 1 :(得分:0)

对于EC2,收集私人/公共IP地址很容易,如下所示:

EC2 — Boto 3 Docs 1.7.30 documentation

import boto3

ec2 = boto3.resource(service_name='ec2',
                     region_name='xxx',
                     aws_access_key_id='xxx',
                     aws_secret_access_key='xxx')

for i in ec2.instances.all():
    print(i.private_ip_address)
    print(i.public_ip_address)

但是,你需要使用EC2的iam密钥。