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

Я пытаюсь разработать способ разрушения 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 settings

Bucket Properties

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Я не верю, что события данных видны так же, как события управления. Это, безусловно, имеет место, если вы просматриваете историю событий в консоли 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.

0 голосов
/ 11 сентября 2018

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

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

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

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

Ссылка на событие журнала CloudTrail

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

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

CloudTrail имеет PythonAPI.Однако вы захотите напрямую обрабатывать журналы CloudTrail, хранящиеся в S3.

CloudTrail Python Boto3 SDK

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...