Есть ли более эффективный способ найти все события Cloudtrail в AWS, выполняемые определенной ролью?

Мне нужно проанализировать все события Cloudtrail в одной учетной записи (на самом деле несколько учетных записей, но пока ограничиваюсь одной), однако у меня нет прямого доступа к корзине S3, в которой хранятся события.

Мне нужно найти все события, инициированные любой ролью, которая соответствует шаблону. Причина в том, что мне нужно рассчитать затраты на охрану, связанные с приложением, которое выполняет вызовы API.

У меня есть сценарий, который работает (на данный момент он просто скомпонован), но он ОЧЕНЬ медленный, поскольку анализирует миллионы событий облачных трассировок.

Есть ли лучший способ получить нужные мне данные?

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))



person Slushysnowman    schedule 23.01.2020    source источник


Ответы (1)


Вам, вероятно, следует подумать об использовании для этого AWS Athena, но вам понадобится доступ к корзине S3 - не знаете, как какое-либо решение будет работать без этого доступа.

Использование Athena с журналами CloudTrail - мощный способ улучшить анализ активности сервисов AWS. Например, вы можете использовать запросы для выявления тенденций и дальнейшей изоляции активности по таким атрибутам, как исходный IP-адрес или пользователь.

https://docs.aws.amazon.com/athena/latest/ug/cloudtrail-logs.html

person E.J. Brennan    schedule 23.01.2020
comment
Да, это моя основная другая мысль - решение, описанное выше, работает без этого доступа, поскольку оно напрямую обращается к облачному трейлу, но Афина занимает одно из первых мест в моем списке других подходов - я пытаюсь получить доступ к ведру в данный момент, чтобы проверить это подход. - person Slushysnowman; 24.01.2020