Найти все публичные корзины 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/*

Эта статья также может помочь.

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