Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
aws-key-disabler — Небольшой lambda-скрипт, который отключает ключи доступа старше заданного количества дней. | Kitploit
Инструменты/GitHubGitHub/te-papa/aws-key-disabler
Аудит конфигурацииБезопасность облачных средУправление идентификацией и доступом (IAM)
GitHubte-papa/aws-key-disabler

aws-key-disabler

Небольшой lambda-скрипт, который отключает ключи доступа старше заданного количества дней.

Репозиторий
1533635 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

AWS Lambda - Отключатель ключей доступа IAM

Image of KeyIcon

AWS Key Disabler — это Lambda-функция, которая отключает ключи доступа пользователей IAM AWS по истечении заданного времени, чтобы снизить риски, связанные со старыми ключами доступа.

Архитектура AWS Lambda

Image of Arch

Вывод SysOps для конечного пользователя

Image of iPhoneEmail

Инструментарий разработчика

Image of Toolchain

Текущие ограничения

  • Отчет с результатами сканирования (json) будет отправлен на одну определенную учетную запись системного администратора; см. атрибут report_to в файле конфигурации сборки /grunt/package.json.
  • Ключи только отключаются, не удаляются и не заменяются

Предварительные требования

Для работы этого скрипта требуются следующие компоненты:

  • Node.js with NPM installed https://nodejs.org/en/
  • Gruntjs installed http://gruntjs.com/
  • AWSCLI commandline tool installed https://aws.amazon.com/cli/

Также предполагается, что у вас есть учетная запись AWS с включенным SES, т.е. подтвержденным доменом и отключенным режимом песочницы.

Инструкции по установке

Эти инструкции для OSX. На Windows и других *nix возможны отличия.

  1. Скачайте копию этого скрипта
  2. Перейдите в папку /grunt
  3. Настройте задачу Grunt, например, установите зависимости: npm install
  4. Заполните следующую информацию в /grunt/package.json
    1. Установите значение aws_account_number равным вашему идентификатору учетной записи AWS, который можно найти на https://portal.aws.amazon.com/gp/aws/manageYourAccount
    2. Установите first_warning и last_warning — возраст ключа в днях, при котором отправляется предупреждение. Эти пределы инициируют отправку электронного письма на report_to
    3. Установите expiry — возраст в днях, по истечении которого ключ считается истекшим. По достижении этого возраста ключ отключается, и на report_to отправляется уведомление об этом изменении
    4. Установите serviceaccount — имя учетной записи пользователя, который скрипт должен игнорировать
    5. Установите exclusiongroup — имя группы, назначенной пользователям, которых скрипт должен игнорировать

Ручной вызов Lambda-функции из командной строки с помощью AWSCLI

Выполните Lambda-функцию по имени AccessKeyRotation, записав вывод сканирования в файл scan.report.log:

aws lambda invoke --function-name AccessKeyRotation scan.report.log --region us-east-1

root@kitploit:~
{
    "StatusCode": 200
}

Используйте jq для отображения содержимого scan.report.log в консоли:

jq '.' scan.report.log

root@kitploit:~
{
  "reportdate": "2016-06-26 10:37:24.071091",
  "users": [
    {
      "username": "TestS3User",
      "userid": "1",
      "keys": [
        {
          "age": 72,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************Q3GA1"
        },
        {
          "age": 12,
          "changed": false,
          "state": "key is still young",
          "accesskeyid": "**************F3AA2"
        }
      ]
    },
    {
      "username": "BlahUser22",
      "userid": "2",
      "keys": []
    },
    {
      "username": "LambdaFake1",
      "userid": "3",
       "keys": [
        {
          "age": 23,
          "changed": false,
          "state": "key is due to expire in 1 week (7 days)",
          "accesskeyid": "**************DFG12"
        },
        {
          "age": 296,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************4ZASD"
        }
      ]
    },
    {
      "username": "apiuser49",
      "userid": "4",
       "keys": [
        {
          "age": 30,
          "changed": true,
          "state": "key is now EXPIRED! Changing key to INACTIVE state",
          "accesskeyid": "**************ER2E2"
        },
        {
          "age": 107,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************AWQ4K"
        }
      ]
    },
    {
      "username": "UserEMRKinesis",
      "userid": "5",
       "keys": [
        {
          "age": 30,
          "changed": false,
          "state": "key is now EXPIRED! Changing key to INACTIVE state",
          "accesskeyid": "**************MGB41A"
        }
      ]
    },
    {
      "username": "CDN-Drupal",
      "userid": "6",
       "keys": [
        {
          "age": 10,
          "changed": false,
          "state": "key is still young",
          "accesskeyid": "**************ZDSQ5A"
        },
        {
          "age": 5,
          "changed": false,
          "state": "key is still young",
          "accesskeyid": "**************E3ODA"
        }
      ]
    },
    {
      "username": "ChocDonutUser1",
      "userid": "7",
       "keys": [
        {
          "age": 59,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************CSA123"
        }
      ]
    },
    {
      "username": "ChocDonut2",
      "userid": "8",
       "keys": [
        {
          "age": 60,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************FDGD2"
        }
      ]
    },
    {
      "username": "[email protected]",
      "userid": "9",
       "keys": [
        {
          "age": 45,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************BLQ5GJ"
        },
        {
          "age": 71,
          "changed": false,
          "state": "key is already in an INACTIVE state",
          "accesskeyid": "**************GJFF53"
        }
      ]
    }
  ]
}

Дополнительная опция конфигурации

  • Вы можете задать сообщение для каждого предупреждения и для окончательного отключения, изменив значения в key_disabler.keystates.<state>.message
  • Вы можете изменить длину маскировки в key_disabler.mask_accesskey_length. Ключи доступа имеют длину 20 символов.

Устранение неполадок

Этот скрипт предоставляется как есть. Мы рады ответить на вопросы по мере возможности, но не можем давать никаких обещаний.

Если что-то не работает, убедитесь, что:

  • Вы успешно проходите аутентификацию в AWS с помощью инструмента командной строки AWSCLI
  • SES не находится в режиме песочницы, и домен отправителя подтвержден
  • Выбранный регион поддерживает как Lambda, так и SES https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/

Бонусные очки

После успешного развертывания Lambda-функции можно выполнить следующие команды:

  1. aws lambda list-functions
  2. openssl dgst -binary -sha256 ..\Releases\AccessKeyRotationPackage.1.0.18.zip | openssl base64
  3. aws lambda invoke --function-name AccessKeyRotation report.log --region us-east-1
  4. jq '.' report.log
  5. jq '.users[] | select(.username=="johndoe")' report.log
  6. jq '.' report.log | grep age | cut -d':' -f2 | sort -n

Бонусные бонусные очки

  1. jq 'def maximal_by(f): (map(f) | max) as $mx | .[] | select(f == $mx); .users | maximal_by(.keys[].age)' report.log
  2. jq 'def minimal_by(f): (map(f) | min) as $mn | .[] | select(f == $mn); .users | minimal_by(.keys[].age)' report.log
Скачать инструмент
  • Установите значение send_completion_report в True, чтобы включить отправку электронной почты через SES
  • Установите значение report_to — адрес электронной почты, на который вы хотите получать отчеты об удалении
  • Установите значение report_from — адрес электронной почты, который будет использоваться в качестве адреса отправителя для отчетов об удалении. Обратите внимание, что домен для этого адреса должен быть подтвержден в AWS SES.
  • Установите deployment_region — регион, поддерживающий Lambda.
  • Установите email_region — регион, поддерживающий SES. Также убедитесь, что в регионе отключен режим песочницы SES.
    • См. таблицу регионов AWS для поддержки https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/
  • Убедитесь, что вы можете успешно подключиться к AWS из CLI, например выполните aws iam get-user для проверки соединения
  • Из каталога /grunt выполните grunt bumpup && grunt deployLambda, чтобы увеличить номер версии и выполнить сборку/развертывание Lambda-функции в выбранном регионе