Сценарий Python не возвращает идентификаторы экземпляров EC2 должным образом - PullRequest
0 голосов
/ 14 мая 2018

У меня есть скрипт на python, который пытается получить каждый EC2 идентификатор экземпляра в каждой учетной записи AWS, которой я владею. Я использую пользовательскую библиотеку (nwmaws), в которой будет указан каждый идентификатор моей учетной записи. Я использую функцию, которая генерирует токен sts и извлекает каждый идентификатор учетной записи и интерполирует идентификатор для динамического создания ARN, чтобы я мог взять на себя роль в каждой учетной записи и получить идентификаторы экземпляра. Я могу сгенерировать токены sts, но я не получаю идентификаторы экземпляров в ответе. Просто HTTP 200 код состояния. Ниже мой код и ответ.

CODE:

import boto3 
import nwmaws

client = boto3.client('ec2')
accounts = nwmaws.Accounts().list()

def get_sts_token(**kwargs):
    role_arn = kwargs['RoleArn']
    region_name = kwargs['RegionName']
    sts = boto3.client(
        'sts',
        region_name=region_name,
    )
    token = sts.assume_role(
        RoleArn=role_arn,
        RoleSessionName='GetInstances',
        DurationSeconds=900,
    )
    return token["Credentials"]

def get_all_instances():
    for i in accounts:
        account_list = i.account_id
        role_arn = "arn:aws:iam::{}:role/ADFS- 
        GlobalAdmins".format(account_list)

        get_sts_token(RoleArn=role_arn, RegionName="us-east-1")

        response = client.describe_instances()
        print(response)

get_all_instances()

RESPONSE:

{'Reservations': [], 'ResponseMetadata': {'RequestId': '5c1e8326-5a36- 
4866-9cfd-bd83bff62d05', 'HTTPStatusCode': 200, 'HTTPHeaders': 
{'content-type': 'text/xml;charset=UTF-8', 'transfer-encoding': 
'chunked', 'vary': 'Accept-Encoding', 'date': 'Sun, 13 May 2018 
21:23:25 GMT', 'server': 'AmazonEC2'}, 'RetryAttempts': 0}}
{'Reservations': [], 'ResponseMetadata': {'RequestId': '1e165d98-0b5c- 
4172-8917-bf688afbad7c', 'HTTPStatusCode': 200, 'HTTPHeaders': 
{'content-type': 'text/xml;charset=UTF-8', 'content-length': '230', 
'date': 'Sun, 13 May 2018 21:23:25 GMT', 'server': 'AmazonEC2'}, 
'RetryAttempts': 0}}
{'Reservations': [], 'ResponseMetadata': {'RequestId': 'e18526d5-c7e9- 
465f-a1fd-87e1d652e95c', 'HTTPStatusCode': 200, 'HTTPHeaders': 
{'content-type': 'text/xml;charset=UTF-8', 'transfer-encoding': 
'chunked', 'vary': 'Accept-Encoding', 'date': 'Sun, 13 May 2018 
21:23:25 GMT', 'server': 'AmazonEC2'}, 'RetryAttempts': 0}} etc. etc...

DESIRED RESPONSE:

i-xxxxxx
i-xxxxxx
i-xxxxxx
i-xxxxxx
i-xxxxxx
etc etc

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Как уже упоминалось @Michael - sqlbot, вы не используете токен, сгенерированный вызовом accept_role API. Создайте свой клиентский объект EC2, используя полученные учетные данные. Замените строку get_sts_token(RoleArn=role_arn, RegionName="us-east-1") в своем коде следующими строками, чтобы получить временные учетные данные и использовать ее для перечисления экземпляров:

credentials = get_sts_token(RoleArn=role_arn, RegionName="us-east-1")
access_key = credentials['AccessKeyId']
secret_key = credentials['SecretAccessKey']
token = credentials['SessionToken']
session = boto3.session.Session(
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
    aws_session_token=token
)
client = session.client('ec2', region_name='us-east-1')
response = client.describe_instances()
print(response)

Это вернет все экземпляры в us-east-1. Если вам нужен список экземпляров во всех регионах, вызовите API description_regions и выполните итерацию по списку.

Ссылки:

  • Документацию по объекту Session можно найти здесь .
0 голосов
/ 14 мая 2018

Вывод print(response) правильный.

Однако вы можете попробовать это, чтобы получить желаемый результат:

client = boto3.client('ec2')
instances = ec2.instance.filter(Filters=[{'Name': 'instance-state-name', 
'Values' ": ['running']}])
for instance in instances:
    print(instance.id, instance.instance_type)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...