
Инструмент для проверки разрешений на.bucket AWS S3.
Совместим с Linux, MacOS и Windows, Python 2.7 и 3. Может использоваться как функция AWS Lambda.
Что он делает
- Проверяет все ваши bucket'и на публичный доступ
- Для каждого bucket'а выдает отчет, содержащий:
- Индикатор, является ли ваш bucket публичным или нет
- Разрешения для вашего bucket'а, если он публичный
- Список URL для доступа к вашему bucket'у (непубличные bucket'и вернут Access Denied), если он публичен
Предварительные требования
Создание нового IAM-пользователя
- Создайте IAM-пользователя с прикрепленной политикой AmazonS3ReadOnly
- Перейдите в IAM (https://console.aws.amazon.com/iam/home)
- Нажмите "Users" ("Пользователи") в левом боковом меню
- Нажмите "Add user" ("Добавить пользователя")
- Заполните имя пользователя и установите флажок Programmatic access ("Программный доступ")
- Нажмите "Next: Permissions" ("Далее: Разрешения")
- Нажмите "Attach existing policies directly" ("Прикрепить существующие политики напрямую")
- Установите флажок политики AmazonS3ReadOnly
- Нажмите "Next: Review" ("Далее: Проверка")
- Нажмите "Create user" ("Создать пользователя")
- Скопируйте учетные данные
- Идентификатор ключа доступа
- Секретный ключ доступа
- Создайте файл
~/.aws/credentials или вставьте учетные данные при запуске скрипта
- Вставьте учетные данные, скопированные на предыдущем шаге, в следующем формате:
[default]
aws_access_key_id = <your access key ID goes here>
aws_secret_access_key = <your secret_access_key goes here>
Использование существующего настроенного IAM-пользователя
- Используйте ваши существующие учетные данные или профиль, если у вас есть файл
~/.aws/credentials следующего вида:
[default]
aws_access_key_id = <your access key ID goes here>
aws_secret_access_key = <your secret_access_key goes here>
[my_profile_name]
aws_access_key_id = <your access key ID goes here>
aws_secret_access_key = <your secret_access_key goes here>
- и передайте имя профиля или оставьте поле пустым для
default при запросе:
python s3inspector.py
Enter your AWS profile name [default]:
Использование
python s3inspector.py
Пример отчета

Использование как функция Lambda
Функция Lambda для выполнения аналогичной проверки, описанной выше.
Настройка Lambda и предварительные требования
Вместо IAM-пользователя нам необходима роль, которая разрешает выполнение Lambda, а также доступ только для чтения к bucket'ам S3 и возможность публикации в SNS. Сначала нам нужно создать конечную точку SNS.
- Перейдите в консоль SNS (https://console.aws.amazon.com/sns/v2/home)
- Выберите в боковой панели 'Topics' ("Темы")
- На экране тем нажмите 'Create New Topic' ("Создать новую тему")
- В появившемся окне добавьте название и описание
- Нажмите 'Create Topic' ("Создать тему")
- Когда тема будет создана, перейдите в нее, нажав на ARN
- Нажмите 'Create Subscription' ("Создать подписку")
- В появившемся окне измените протокол на 'EMail' ("Электронная почта")
- В поле 'Endpoint' ("Конечная точка") введите адрес электронной почты получателя отчетов
- Нажмите 'Create subscription' ("Создать подписку")
- Выберите подписку и нажмите 'Request confirmations' ("Запросить подтверждения")
- В почтовом клиенте получателя подтвердите подписку по ссылке.
- Скопируйте ARN созданной темы (можно посмотреть в 'Topic details' ("Детали темы")) и установите это значение в переменную SNS_RESOURCE_ARN в файле s3inspector.py.
Как только это будет сделано, мы можем создать функцию lambda
- Перейдите в консоль lambda (https://console.aws.amazon.com/lambda/home)
- Нажмите 'Create Function' ("Создать функцию")
- Нажмите 'Author from Scratch' ("Написать с нуля")
- Задайте функции имя 's3inspector' (или имя файла, содержащего функцию)
- Примените роль, созданную выше
- Нажмите 'Create Function' ("Создать функцию")
- На странице конфигурации
- Измените Runtime ("Среду выполнения") на 'Python 2.7'
- Измените Handler ("Обработчик") на 's3inspector.lambda_handler'
- Скопируйте и вставьте содержимое файла функции lambda в экранный редактор и нажмите 'Save' ("Сохранить")
- Увеличьте тайм-аут функции до подходящего значения для количества bucket'ов S3 в аккаунте (мы тестировали с 1 минутой и 128 Мб)
Теперь вы можете запустить функцию с пустым тестовым событием или настроить триггер для функции.