Мне нужно проанализировать все события cloudtrail внутри учетной записи (на самом деле несколько учетных записей, но пока я ограничиваюсь одной) - однако у меня нет прямого доступа к корзине S3, где хранятся события.
Мне нужно найти все события, инициированные любой ролью, которая соответствует шаблону. Причина этого заключается в том, что мне нужно рассчитать расходы на охрану, связанные с приложением, которое выполняет вызовы API.
У меня есть скрипт, который работает (он просто скомпонован в данный момент), однако это ОЧЕНЬ медленнее, так как он анализирует миллионы событий Cloudtrail.
Есть ли лучший способ получить нужные мне данные?
import boto3
from datetime import datetime
import json
session = boto3.Session(profile_name='<profile_name_here>')
client = session.client('cloudtrail')
total_events = 0
target_events = 0
start_time = datetime(2020, 1, 22)
guard_duty_cost = 0.0000044
paginator = client.get_paginator('lookup_events')
response_iterator = paginator.paginate(
StartTime = start_time,
MaxResults = 1000
)
y = 1
for response in response_iterator:
events = response['Events']
print('Processing response {}'.format(y))
y += 1
for event in events:
total_events += 1
cloudtrail_event = event['CloudTrailEvent']
cloudtrail_event_json = json.loads(cloudtrail_event)
user_identity = cloudtrail_event_json['userIdentity']
if 'sessionContext' in user_identity:
user_name = user_identity['sessionContext']['sessionIssuer']['userName']
if '<target_role_pattern>' in user_name:
target_events += 1
total_cost = guard_duty_cost * total_events
target_cost = guard_duty_cost * target_events
print('Total number of events since {} is {} - cost EUR {}'.format(start_time, total_events, total_cost))
print('Number of target events since {} is {} - cost EUR {}'.format(start_time, target_events, target_cost))