我有一个脚本,它使用boto3循环我所有的AWS帐户,从我拥有的每个AWS帐户中获得一个CloudTrail跟踪列表。我遇到的问题是,这些跟踪是使用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 (并不总是第一行)。
发布于 2018-11-01 20:35:46
这将只给出第一个元素的名称,而不是遍历所有元素。
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 appearhttps://stackoverflow.com/questions/53108953
复制相似问题