У меня есть скрипт, который использует 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
(которая не всегда первая строка).