Используйте Python и BOTO3 для отображения IP-адресов и устройств AWS - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь использовать Python и BOTO3, чтобы перечислить IP-адреса всех устройств в AWS (ELB, EC2 и т. Д.)

Я смог собрать весь инвентарь, но Как я могу предположитьроль и список только IP-адреса и устройства во всех моих связанных учетных записях AWS?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Поздний ответ, но надеюсь, что это полезно.На самом деле вы должны использовать 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')

Это может быть предпочтительным, если, например, вам также необходимоцикл по нескольким регионам.

0 голосов
/ 01 июня 2018

Для EC2 легко собирать частные / публичные IP-адреса, например:

EC2 - Документация Boto 3 1.7.30

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)

Но,вам нужно использовать ключ iam для EC2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...