Фильтрация вывода с помощью Python3 - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть скрипт, который использует boto3 для циклического прохождения всех моих учетных записей AWS и получения списка CloudTrail следов от каждой учетной записи AWS, которой я владею. У меня проблема в том, что трассы были сделаны с использованием StackSets, поэтому все имена динамические. Поэтому, когда я пытаюсь отфильтровать по названию трейла, невозможно масштабировать каждую учетную запись и вручную находить имя, так как у меня много учетных записей. Когда я запускаю свой сценарий, я вижу нужное имя трейла, но как мне отфильтровать только это имя? Ниже мой код и вывод.

CODE:

import boto3

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_acct_nums():
    region_name = 'us-east-1'

    dynamo = boto3.client('dynamodb')
    dynamo_response = dynamo.scan(TableName='AllAccountNums')

    for item in dynamo_response['Items']:
        account = item['Accounts']['S']

        role_arn = "arn:aws:iam: 
    {}:role/ExecutionRole".format(account)
        tokens = get_sts_token(RoleArn=role_arn, RegionName=region_name)

        access_key = tokens['AccessKeyId']
        secret_key = tokens['SecretAccessKey']      
        session_token = tokens['SessionToken']

        ctrail = boto3.client('cloudtrail',
            aws_access_key_id=access_key,
            aws_secret_access_key=secret_key,
            aws_session_token=session_token)

        ctrail_response = ctrail.describe_trails()

        for trail in ctrail_response['trailList']:
            trail_name = trail['Name']

            print(trail_name)

get_acct_nums()

Output:

StackSet-trail-56ab8f59-F7VFM147fe3

cloud-trail-7327093746523

StackSet-trail-03353e-1HLJF22QI1Dw2

cloud-trail-5702290092543

и т.д.. и т. д.

Мне нужна только строка вывода: StackSet-trail-xxxx-yyyy (которая не всегда первая строка).

1 Ответ

0 голосов
/ 01 ноября 2018

Вместо того, чтобы перебирать все элементы, вы получите только имя первого элемента

ctrail_response['trailList'][0]['Name']

Однако, если вам нужна только первая строка StackSet-trail:

for trail in ctrail_response['trailList']:
    trail_name = trail['Name']
    if 'StackSet-trail' in trail_name:
        print(trail_name)
        break   # remove this if you want all StackSet-trail to appear
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...