Использование boto3 для запроса AWS CloudTrail, чтобы определить, какой пользователь IAM загрузил файл на S3?

Я пытаюсь разработать способ разрушения S3, с помощью которого пользователи / проекты используют CloudTrail. Обладает ли CloudTrail возможностью видеть, какой пользователь IAM загрузил конкретный объект в корзину?

ОБНОВЛЕНИЕ:

У меня включен CloudTrail, который отслеживает действия на уровне объектов (для всех блоков s3, включая операции чтения и записи), однако, когда я пытаюсь перечислить события "PutObject" в моем обновлении выше, он не работает (то есть список событий выходит пустым).

ct_client = boto3.client('cloudtrail')

response = ct_client.lookup_events(
    LookupAttributes=[
        {
            'AttributeKey': 'EventName',
            'AttributeValue': 'PutObject'
        }],
    StartTime=datetime(2018, 3, 1),
    EndTime=datetime.now(),
    MaxResults=50
)

ОБНОВЛЕНИЕ 2

Изображения моих свойств корзины и CloudTrail в консоли:

Настройки CloudTrail

Bucket Properties

2 ответа

Я не верю, что события данных видны так же, как события управления. Это, безусловно, имеет место, если вы просматриваете историю событий в консоли AWS.

Как было предложено в другом месте, наложение таблицы Athena на место s3, где хранятся события данных, работает хорошо - что-то вроде этого скажет вам, кто / что загрузил объект:

SELECT
    useridentity
,   json_extract_scalar(requestparameters,'$.bucketName')
,   json_extract_scalar(requestparameters,'$.key')
FROM cloudtrail_logs
WHERE eventname IN ('PutObject')
AND json_extract_scalar(requestparameters,'$.bucketName') = 'xxx'
AND json_extract_scalar(requestparameters,'$.key') = 'yyy';

куда cloudtrail_logs создается в соответствии с документами по адресу: https://docs.aws.amazon.com/athena/latest/ug/cloudtrail-logs.html

useridentity не всегда будет пользователем IAM - это может быть служба AWS, внешняя учетная запись, а также предполагаемая роль - вы можете использовать элемент.type для фильтрации по мере необходимости или просто извлекать все элементы.

В зависимости от количества объектов в S3 / размера ваших cloudtrail_logs в S3 вы можете уточнить местоположение s3 таблицы cloudtrail_logs по дате - например:

s3://<BUCKETNAME>/AWSLogs/<ACCOUNTNUMBER>/CloudTrail/<REGION>/2018/08/17

Если вы хотите, вы можете выполнить запрос Athena, используя boto3, сохранив вывод в S3-местоположении, а затем извлечь эти данные из S3, также используя boto3.

Да, вы можете отслеживать пользователей IAM, загружающих объекты в S3, используя CloudTrail. Количество информации, которую записывает CloudTrail, обширно.

Эта ссылка на документ даст вам представление о регистрации в CloudTrail S3:

Регистрация вызовов API Amazon S3 с помощью AWS CloudTrail

Эта ссылка на документ предоставит вам подробную информацию о событиях, зарегистрированных в CloudTrail:

CloudTrail Log Справочник по событиям

Перейдите по этой ссылке на документ, чтобы включить ведение журнала уровня объекта для корзины S3. Это необходимо для просмотра таких API, как PutObject:

Как включить ведение журнала на уровне объекта для корзины S3 с событиями данных AWS CloudTrail?

CloudTrail имеет API-интерфейс Python. Тем не менее, вы захотите напрямую обрабатывать журналы CloudTrail, хранящиеся в S3.

CloudTrail Python Boto3 SDK

Я предпочитаю анализировать журналы CloudTrail с помощью Athena, что облегчает этот процесс.

Запрос к журналам AWS CloudTrail

Другие вопросы по тегам