Использование 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 в консоли:
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 с помощью Athena, что облегчает этот процесс.