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

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

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

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

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

Категории

Все категории
Loading categories
policy_sentry — Генерирует политики AWS IAM с минимальными привилегиями на основе ARN ресурсов и уровней доступа, автоматизируя создание безопасных политик для облачной инфраструктуры. | Kitploit
Инструменты/GitHubGitHub/salesforce/policy_sentry
Безопасность облачной инфраструктурыАудит конфигурацииБезопасность облачных средDevSecOpsУправление идентификацией и доступом (IAM)
GitHubsalesforce/policy_sentry

policy_sentry

Генерирует политики AWS IAM с минимальными привилегиями на основе ARN ресурсов и уровней доступа, автоматизируя создание безопасных политик для облачной инфраструктуры.

Репозиторий
2.2k157324 дней назадПроверено Kitploit

Популярное

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

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

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

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

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

Policy Sentry

IAM Генератор политик с минимальными привилегиями.

continuous-integration Documentation Status Join the chat at https://gitter.im/salesforce/policy_sentry Twitter PyPI Python Version Downloads

  • Руководство
    • Установка
      • Менеджеры пакетов
      • Автодополнение в оболочке
    • Шаг 1: Создание шаблона
    • Шаг 2: Копирование ARN
    • Шаг 3: Команда write-policy
  • Шпаргалки
    • Шпаргалка по написанию политик
    • Шпаргалка по запросам к базе данных IAM
    • Локальная инициализация (опционально)
  • Другое использование
    • Команды
    • Использование библиотеки Python
    • Docker
    • Terraform
  • Ссылки

Документация

Пошаговые руководства и полную документацию можно найти на проекте ReadTheDocs.

Смотрите статью в блоге Salesforce Engineering о Policy Sentry.

Обзор

Написание безопасных IAM-политик вручную может быть очень утомительным и неэффективным. Многие разработчики Infrastructure as Code сталкивались с чем-то подобным:

  • Вы полны решимости дать пользователям и ролям минимально необходимый набор прав для выполнения их обязанностей, но тратите слишком много времени на изучение документации AWS IAM по действиям, ресурсам и ключам условий для сервисов AWS.
  • Ваш руководитель команды призывает вас встроить безопасность в IAM-политики для качества продукта, но в итоге вы разочаровываетесь из-за сроков проекта.
  • У вас нет выделенного специалиста по безопасности в команде, который мог бы написать эти IAM-политики за вас, и нет автоматизированного инструмента, который бы магическим образом определял вызовы AWS API, которые вы выполняете, и затем писал их с ограничениями по ARN ресурсов.
  • После фантазий об этом уровне автоматизации вы понимаете, что написание политик с минимальными привилегиями, почти что по доброте душевной, поставит под угрозу вашу способность завершить код в срок.
  • Вы используете управляемые политики (потому что, ну, почему бы и нет) или прикидываете названия API-вызовов на глаз и используете подстановочные знаки, чтобы просто двигаться дальше.

Такой процесс не идеален ни для безопасности, ни для разработчиков Infrastructure as Code. Нам нужно упростить написание IAM-политик безопасным образом и скрыть сложность написания политик с минимальными привилегиями. Именно поэтому я создал этот инструмент.

Policy Sentry позволяет пользователям создавать IAM-политики с минимальными привилегиями за считанные секунды, вместо того чтобы часами выписывать их вручную. Эти политики ограничены по уровням доступа и ресурсам. В случае взлома это помогает ограничить радиус поражения скомпрометированных учётных данных, предоставляя IAM-принципалам только необходимый доступ.

До этого инструмента создание IAM-политики с ограничениями по ARN ресурсов могло занять часы — теперь это занимает секунды. Таким образом, разработчикам нужно только определить ресурсы, к которым им требуется доступ, а Policy Sentry абстрагирует сложность IAM-политик от процессов разработки.

Написание безопасных политик на основе ограничений по ресурсам и уровням доступа

Ключевая особенность Policy Sentry — это возможность создавать IAM-политики на основе ARN ресурсов и уровней доступа. Наша функциональность CRUD придерживается мнения, что разработчики IAC не должны понимать все тонкости AWS IAM — мы должны абстрагировать эту сложность за них. По сути, разработчики должны просто сказать...

  • "Мне нужен доступ Read/Write/List к arn:aws:s3:::example-org-sbx-vmimport"
  • "Мне нужен доступ Permissions Management к arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"
  • "Мне нужен доступ Tagging к arn:aws:ssm:us-east-1:123456789012:parameter/test"

...и наша автоматизация должна создавать политики, соответствующие этим уровням доступа.

Как мы этого добиваемся? Policy Sentry использует документацию AWS по действиям, ресурсам и ключам условий для поиска действий, уровней доступа и типов ресурсов, и генерирует политики в соответствии с ARN и уровнями доступа. Рассмотрим фрагмент таблицы ниже:

ДействияУровень доступаТипы ресурсов
ssm:GetParameterReadparameter
ssm:DescribeParametersListparameter
ssm:PutParameterWriteparameter
secretsmanager:PutResourcePolicyPermissions managementsecret
secretsmanager:TagResourceTaggingsecret

Policy Sentry агрегирует всю эту документацию в единую базу данных и использует её для генерации политик в соответствии с действиями, ресурсами и уровнями доступа.

Руководство

Установка

Менеджеры пакетов

  • Homebrew
root@kitploit:~
brew tap salesforce/policy_sentry https://github.com/salesforce/policy_sentry
brew install policy_sentry
  • Pip
root@kitploit:~
pip3 install --user policy_sentry

Автодополнение в оболочке

Чтобы включить автодополнение Bash, добавьте это в ваш .bashrc:

root@kitploit:~
eval "$(_POLICY_SENTRY_COMPLETE=bash_source policy_sentry)"

Чтобы включить автодополнение ZSH, добавьте это в ваш .zshrc:

root@kitploit:~
eval "$(_POLICY_SENTRY_COMPLETE=zsh_source policy_sentry)"

Шаг 1: Создание шаблона

  • Чтобы сгенерировать политику на основе ресурсов и уровней доступа, начните с создания шаблона с помощью этой команды, чтобы вы могли просто заполнить ARN:
root@kitploit:~
policy_sentry create-template --output-file crud.yml --template-type crud
  • Она сгенерирует файл примерно такого содержания:
root@kitploit:~
mode: crud
name: ''
# Укажите ARN ресурсов
read:
- ''
write:
- ''
list:
- ''
tagging:
- ''
permissions-management:
- ''
# Действия, которые не поддерживают ограничения по ресурсам
wildcard-only:
  single-actions: # отдельные действия
  - ''
  # По сервисам — например, 's3' или 'ec2'
  service-read:
  - ''
  service-write:
  - ''
  service-list:
  - ''
  service-tagging:
  - ''
  service-permissions-management:
  - ''
# Пропустите требования к ограничению ресурсов, перечислив действия здесь.
skip-resource-constraints:
- ''
# Исключите действия из вывода, указав их здесь. Принимаются подстановочные знаки, например kms:Delete*
exclude-actions:
- ''
# Если этой политике нужно включить действие AssumeRole
sts:
  assume-role:
    - ''
  assume-role-with-saml:
    - ''
  assume-role-with-web-identity:
    - ''

Шаг 2: Копирование ARN

  • Скопируйте и вставьте ARN, которые вы хотите включить в политику. Вы можете удалить строки, которые не используете, или просто оставить их.
root@kitploit:~
mode: crud
read:
- 'arn:aws:ssm:us-east-1:123456789012:parameter/myparameter'
write:
- 'arn:aws:ssm:us-east-1:123456789012:parameter/myparameter'
list:
- 'arn:aws:ssm:us-east-1:123456789012:parameter/myparameter'
tagging:
- 'arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret'
permissions-management:
- 'arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret'

Шаг 3: Команда write-policy

  • Затем выполните эту команду:
root@kitploit:~
policy_sentry write-policy --input-file crud.yml
  • Она сгенерирует такие результаты:
root@kitploit:~
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SsmReadParameter",
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter",
                "ssm:GetParameterHistory",
                "ssm:GetParameters",
                "ssm:GetParametersByPath",
                "ssm:ListTagsForResource"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:123456789012:parameter/myparameter"
            ]
        },
        {
            "Sid": "SsmWriteParameter",
            "Effect": "Allow",
            "Action": [
                "ssm:DeleteParameter",
                "ssm:DeleteParameters",
                "ssm:LabelParameterVersion",
                "ssm:PutParameter"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:123456789012:parameter/myparameter"
            ]
        },
        {
            "Sid": "SecretsmanagerPermissionsmanagementSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:DeleteResourcePolicy",
                "secretsmanager:PutResourcePolicy"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"
            ]
        },
        {
            "Sid": "SecretsmanagerTaggingSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:TagResource",
                "secretsmanager:UntagResource"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"
            ]
        }
    ]
}

Обратите внимание, как приведённая выше политика распознаёт ARN, предоставленные пользователем, вместе с запрошенным уровнем доступа. Например, SecretsmanagerTaggingSecret содержит только действия по тегированию, назначенные типу ресурса secret.

Это значительно ускоряет время разработки IAM-политик и гарантирует, что все созданные политики ограничивают доступ только к тому, что необходимо вашей роли. Таким образом, разработчикам нужно только определить ресурсы, к которым им требуется доступ, а мы абстрагируем сложность IAM-политик от процессов разработки.

Шпаргалки

Шпаргалка по написанию политик

root@kitploit:~
# Сначала создавайте шаблоны!!! Так вы сможете просто вставить нужные значения, не запоминая формат YAML
# Режим CRUD
policy_sentry create-template --output-file tmp.yml --template-type crud
# Режим Actions
policy_sentry create-template --output-file tmp.yml --template-type actions

# Написать политику на основе уровней доступа к конкретным ресурсам
policy_sentry write-policy --input-file examples/yml/crud.yml

# Написать политику на основе списка действий
policy_sentry write-policy --input-file examples/yml/actions.yml

Шпаргалка по запросам к базе данных IAM

root@kitploit:~

###############
# Таблица действий
###############
# ПРИМЕЧАНИЕ: Используйте --fmt yaml или --fmt json для изменения формата вывода. По умолчанию json для запросов

# Получить список действий, которые не поддерживают ограничения по ресурсам
policy_sentry query action-table --service s3 --resource-type "*" --fmt yaml

# Получить список действий уровня "Write" в сервисе S3, которые не поддерживают ограничения по ресурсам
policy_sentry query action-table --service s3 --access-level write --resource-type "*" --fmt yaml

# Получить список всех IAM-действий во всех сервисах, имеющих уровень доступа "Permissions management"
policy_sentry query action-table --service all --access-level permissions-management

# Получить список всех IAM-действий, доступных для сервиса RAM
policy_sentry query action-table --service ram

# Получить подробности об IAM-действии `ram:TagResource`
policy_sentry query action-table --service ram --name tagresource

# Получить список всех IAM-действий в сервисе RAM с уровнем доступа Permissions management
policy_sentry query action-table --service ram --access-level permissions-management

# Получить список всех IAM-действий в сервисе SES, поддерживающих ключ условия `ses:FeedbackAddress`.
policy_sentry query action-table --service ses --condition ses:FeedbackAddress

###########
# Таблица ARN
###########

# Получить список всех сырых форматов ARN, доступных через сервис SSM.
policy_sentry query arn-table --service ssm

# Получить сырой формат ARN для ARN `cloud9` с коротким именем `environment`
policy_sentry query arn-table --service cloud9 --name environment

# Получить пары ключ/значение всех сырых форматов ARN и их коротких имён
policy_sentry query arn-table --service cloud9 --list-arn-types

######################
# Таблица ключей условий
######################

# Получить список всех ключей условий, доступных для сервиса Cloud9
policy_sentry query condition-table --service cloud9

# Получить подробности о ключе условия с именем `cloud9:Permissions`
policy_sentry query condition-table --service cloud9 --name cloud9:Permissions

Локальная инициализация (опционально)

root@kitploit:~
# Инициализация папки конфигурации policy_sentry и создание таблиц базы данных IAM.
policy_sentry initialize

# Загрузить последнюю версию документации AWS, чтобы можно было экспериментировать с новыми сервисами.
policy_sentry initialize --fetch

# Переопределить уровни доступа, указав собственные уровни доступа (например, исправить уровни Permissions management)
policy_sentry initialize --access-level-overrides-file ~/.policy_sentry/overrides-resource-policies.yml

policy_sentry initialize --access-level-overrides-file ~/.policy_sentry/access-level-overrides.yml

Другое использование

Команды

  • create-template: Создаёт шаблоны YML-файлов для использования в командах типа write-policy.

  • write-policy: Использует YAML-файл для автоматического написания политик.

    • Вариант 1: Укажите уровни CRUD (Read, Write, List, Tagging или Permissions management) и ARN ресурса. Он напишет это за вас. См. документацию
    • Вариант 2: Укажите список действий. Он напишет IAM-политику за вас, но вам нужно будет заполнить ARN. См. документацию.
  • query: Запрос таблиц базы данных IAM. Это может помочь при заполнении шаблонов Policy Sentry или просто для быстрого получения знаний из базы данных.

    • Вариант 1: Запрос таблицы действий (action-table)
    • Вариант 2: Запрос таблицы ARN (arn-table)
    • Вариант 3: Запрос таблицы условий (condition-table)
  • initialize: (Опционально). Создаёт SQLite-базу данных, содержащую все сервисы, доступные через документацию по действиям, ресурсам и ключам условий. См. документацию.

Использование библиотеки Python

Если вы разрабатываете свой собственный код на Python и хотите импортировать Policy Sentry как сторонний пакет, вы можете пропустить инициализацию и использовать локальный файл базы данных, который поставляется вместе с самим пакетом Python.

Это особенно полезно для разработчиков, которые хотят использовать возможности Policy Sentry, требующие применения базы данных IAM (например, запросы к таблице базы данных IAM). Таким образом, вам не нужно инициализировать базу данных — вы можете сразу делать запросы.

Пример кода находится здесь. Он также приведён ниже.

root@kitploit:~
from policy_sentry.querying.actions import get_actions_for_service


def example():
    actions = get_actions_for_service('cloud9')  # Затем вы можете использовать любой метод, требующий доступа к базе данных.
    for action in actions:
        print(action)

if __name__ == '__main__':
    example()

Результат будет выглядеть так:

root@kitploit:~
cloud9:CreateEnvironmentEC2
cloud9:CreateEnvironmentMembership
cloud9:DeleteEnvironment
cloud9:DeleteEnvironmentMembership
cloud9:DescribeEnvironmentMemberships
cloud9:DescribeEnvironmentStatus
cloud9:DescribeEnvironments
cloud9:GetUserSettings
cloud9:ListEnvironments
cloud9:ListTagsForResource
cloud9:TagResource
cloud9:UntagResource
cloud9:UpdateEnvironment
cloud9:UpdateEnvironmentMembership
cloud9:UpdateUserSettings

Docker

Если вы предпочитаете использовать Docker вместо установки скрипта через Python, мы поддерживаем и это. Из корня репозитория выполните следующее для сборки Docker-образа:

root@kitploit:~
docker build -t kmcquade/policy_sentry .

Используйте это для выполнения некоторых базовых команд:

root@kitploit:~
# Базовые команды без аргументов
docker run -i --rm kmcquade/policy_sentry:latest "--help"
docker run -i --rm kmcquade/policy_sentry:latest "query"

# Запрос к базе данных
docker run -i --rm kmcquade/policy_sentry:latest "query action-table --service all --access-level permissions-management"

Команда write-policy также поддерживает передачу YML-конфигурации через STDIN. Если вы используете метод Docker, попробуйте следующее:

root@kitploit:~
# Написание политик путём передачи конфигурации через STDIN
cat examples/yml/crud.yml | docker run -i --rm kmcquade/policy_sentry:latest "write-policy"

cat examples/yml/actions.yml | docker run -i --rm kmcquade/policy_sentry:latest "write-policy"

Terraform

Модуль Terraform опубликован и поддерживается здесь.

Ссылки

  • Процесс извлечения документации был вдохновлён и заимствован из аналогичного скрипта ansible hacking.
  • Политики на основе идентификаторов и политики на основе ресурсов
  • Действия, ресурсы и ключи условий для сервисов AWS
Скачать инструмент