Найти все публичные корзины s3
Я работал над модулем boto3 в python и создал бот, который будет находить общедоступные сегменты, но это делается для одного пользователя с его учетными данными. Я подумываю о расширении возможностей и обеспечении того, чтобы бот извлекал все общедоступные сегменты в каждой учетной записи пользователя. Я хотел бы знать, возможно ли это, если да, то как, если нет, то почему?
2 ответа
Это невозможно.
Невозможно найти имена всех миллионов существующих сегментов. Известно, что в S3 хранится не менее 2 000 000 000 000 объектов, число которых было объявлено несколько лет назад и, вероятно, значительно ниже, чем реальное число в настоящее время. Если бы в каждом ведре было 1 000 000 таких предметов, это означало бы 2 000 000 ведер для их хранения.
Вам не хватает времени и разрешения на их сканирование, и интуиция подсказывает, что AWS Security начнет задавать вопросы, если вы попробуете.
Заглянуть в метод get_bucket_acl()
,
Если корзина общедоступна, вы должны увидеть ACL для Grantee
-> http://acs.amazonaws.com/groups/global/AllUsers'
Пример:
>> client.get_bucket_acl(Bucket='PublicBucket')
....
{'Grantee': {u'Type': 'Group',
'URI': 'http://acs.amazonaws.com/groups/global/AllUsers'},
'Permission': 'READ'}], ...
Как вы видете AllUsers
глобальная группа разрешена READ
доступ на этом ведре.
Вы также можете проверить get_bucket_policy()
и убедитесь, что в корзине есть политика, которая не разрешает публичный доступ.
Пример:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/*"]
}
]
}
"Principal": "*"
означает, что у всех будет доступ к действию S3:GetObject
на examplebucket/*
Эта статья также может помочь.