На этой странице собраны готовые политики для типовых сценариев. Синтаксис политик, список возможностей и правила шаблонов описаны в разделе «Политики».
Перед использованием замените пути точек монтирования (например, secret/, pki_int/, transit/), имена ролей и ключей на свои. Чтобы узнать, какие возможности нужны для конкретной команды, добавьте к ней флаг -output-policy.
Сохраните политику в файл и загрузите её в Stronghold:
d8 stronghold policy write kv-read-only kv-read-only.hclЧтение секретов KV только для чтения
Доступ на чтение к секретам secret/app/* в механизме KV версии 2. Для KV v2 данные находятся по пути secret/data/, а метаданные и список ключей — по пути secret/metadata/.
# Чтение секретов.
path "secret/data/app/*" {
capabilities = ["read"]
}
# Просмотр списка ключей и метаданных.
path "secret/metadata/app/*" {
capabilities = ["read", "list"]
}Для KV версии 1 используйте путь без data/ и metadata/:
path "kv/app/*" {
capabilities = ["read", "list"]
}Доступ приложения к собственным секретам
Одна политика для всех приложений: каждое приложение получает доступ только к секретам по пути со своим именем сущности. Подходит, если имя сущности совпадает с именем приложения, например при входе через AppRole или Kubernetes.
# Полный доступ к собственным секретам.
path "secret/data/apps/{{identity.entity.name}}/*" {
capabilities = ["create", "read", "update", "patch", "delete"]
}
path "secret/metadata/apps/{{identity.entity.name}}/*" {
capabilities = ["read", "list", "delete"]
}
# Только чтение общих секретов.
path "secret/data/shared/*" {
capabilities = ["read"]
}Вместо имени сущности можно использовать метаданные псевдонима, например неймспейс ServiceAccount:
path "secret/data/{{identity.entity.aliases.auth_kubernetes_xxxx.metadata.service_account_namespace}}/*" {
capabilities = ["read"]
}Замените auth_kubernetes_xxxx на accessor метода аутентификации Kubernetes (d8 stronghold auth list).
Политика для CI/CD
Политика для задания развёртывания: чтение секретов развёртывания, получение динамических учётных данных базы данных, выпуск токенов по роли хранилища токенов и управление собственным токеном.
# Секреты для развёртывания.
path "secret/data/ci/deploy/*" {
capabilities = ["read"]
}
# Динамические учётные данные базы данных.
path "database/creds/deploy" {
capabilities = ["read"]
}
# Выпуск токенов для развёрнутого приложения по роли хранилища токенов.
path "auth/token/create/app-runtime" {
capabilities = ["update"]
}
# Управление собственным токеном.
path "auth/token/lookup-self" {
capabilities = ["read"]
}
path "auth/token/renew-self" {
capabilities = ["update"]
}
path "auth/token/revoke-self" {
capabilities = ["update"]
}Администратор пространства имён
Политика для администратора пространства имён в Stronghold EE. Создайте её внутри пространства имён: все пути в ней считаются относительно этого пространства имён.
d8 stronghold policy write -namespace=team-a namespace-admin namespace-admin.hcl# Управление дочерними пространствами имён.
path "sys/namespaces/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# Управление политиками.
path "sys/policies/acl" {
capabilities = ["list"]
}
path "sys/policies/acl/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# Управление методами аутентификации.
path "sys/auth" {
capabilities = ["read"]
}
path "sys/auth/*" {
capabilities = ["create", "read", "update", "delete", "sudo"]
}
path "auth/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# Управление механизмами секретов.
path "sys/mounts" {
capabilities = ["read"]
}
path "sys/mounts/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# Управление идентификационными данными.
path "identity/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# Работа с секретами в пространстве имён.
path "secret/*" {
capabilities = ["create", "read", "update", "patch", "delete", "list"]
}
# Проверка собственных возможностей.
path "sys/capabilities-self" {
capabilities = ["update"]
}Подробнее о пространствах имён — в разделе «Пространства имён».
Оператор резервного копирования
Политика для создания снимков Raft вручную и управления автоматическим резервным копированием без доступа к секретам. Эндпоинты снимков описаны в разделе «Резервное копирование в Stronghold».
# Создание снимка (d8 stronghold operator raft snapshot save).
path "sys/storage/raft/snapshot" {
capabilities = ["read"]
}
# Настройка автоматических снимков.
path "sys/storage/raft/snapshot-auto/config" {
capabilities = ["list"]
}
path "sys/storage/raft/snapshot-auto/config/*" {
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}
# Статус автоматических снимков.
path "sys/storage/raft/snapshot-auto/status/*" {
capabilities = ["read"]
}
# Просмотр состава Raft-кластера.
path "sys/storage/raft/configuration" {
capabilities = ["read"]
}Снимок содержит все данные Stronghold в зашифрованном виде. Храните файлы снимков в защищённом месте. Восстановление из снимка (POST sys/storage/raft/snapshot) не включено в эту политику: выдавайте право update на этот путь только администраторам.
Путь sys/storage/raft/snapshot-auto/config/* защищён правами root, поэтому для настройки автоматических снимков нужна возможность sudo. Для создания снимка (sys/storage/raft/snapshot) и чтения статуса sudo не требуется.
Аудитор
Политика для просмотра конфигурации безопасности без доступа к секретам: аудит-устройств, политик, точек монтирования, методов аутентификации и идентификационных данных. Путь sys/audit защищён правами root, поэтому для него нужна возможность sudo.
# Список аудит-устройств.
path "sys/audit" {
capabilities = ["read", "sudo"]
}
# Просмотр политик.
path "sys/policies/acl" {
capabilities = ["list"]
}
path "sys/policies/acl/*" {
capabilities = ["read"]
}
# Просмотр точек монтирования и методов аутентификации.
path "sys/mounts" {
capabilities = ["read"]
}
path "sys/auth" {
capabilities = ["read"]
}
# Просмотр сущностей и групп.
path "identity/entity/id" {
capabilities = ["list"]
}
path "identity/entity/id/*" {
capabilities = ["read"]
}
path "identity/group/id" {
capabilities = ["list"]
}
path "identity/group/id/*" {
capabilities = ["read"]
}Доступ к секретам этой политикой не предоставляется: в Stronghold всё, что явно не разрешено, запрещено.
Выпуск сертификатов PKI
Политика для сервиса, который выпускает сертификаты по роли web-server промежуточного УЦ.
# Выпуск сертификата с генерацией ключа в Stronghold.
path "pki_int/issue/web-server" {
capabilities = ["update"]
}
# Подпись CSR, сгенерированного на стороне клиента.
path "pki_int/sign/web-server" {
capabilities = ["update"]
}
# Чтение сертификата УЦ и цепочки.
path "pki_int/cert/ca" {
capabilities = ["read"]
}
path "pki_int/ca_chain" {
capabilities = ["read"]
}Подробнее — в разделе «Механизм секретов PKI».
Только шифрование в Transit
Приложение может шифровать данные ключом app-key, но не может их расшифровывать.
path "transit/encrypt/app-key" {
capabilities = ["update"]
}
# Явный запрет расшифровки.
path "transit/decrypt/app-key" {
capabilities = ["deny"]
}Для сервиса, который только расшифровывает данные, поменяйте возможности местами. Подробнее — в разделе «Механизм секретов Transit».
Управление собственным токеном
Минимальная политика, похожая на встроенную политику default: токен может просматривать, продлевать и отзывать себя, проверять свои возможности и пользоваться cubbyhole и обёртыванием ответов.
path "auth/token/lookup-self" {
capabilities = ["read"]
}
path "auth/token/renew-self" {
capabilities = ["update"]
}
path "auth/token/revoke-self" {
capabilities = ["update"]
}
path "sys/capabilities-self" {
capabilities = ["update"]
}
path "sys/leases/renew" {
capabilities = ["update"]
}
path "sys/leases/lookup" {
capabilities = ["update"]
}
path "cubbyhole/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
path "sys/wrapping/wrap" {
capabilities = ["update"]
}
path "sys/wrapping/lookup" {
capabilities = ["update"]
}
path "sys/wrapping/unwrap" {
capabilities = ["update"]
}Актуальное содержимое встроенной политики default можно посмотреть командой d8 stronghold read sys/policy/default.
Администратор безопасности
Администратор безопасности управляет политиками, методами аутентификации, аудитом и идентификационными данными, но не имеет доступа к содержимому секретов. Возможность deny имеет наивысший приоритет, поэтому запрет сработает, даже если другая политика токена разрешает доступ.
# Управление политиками.
path "sys/policies/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# Управление методами аутентификации.
path "sys/auth" {
capabilities = ["read"]
}
path "sys/auth/*" {
capabilities = ["create", "read", "update", "delete", "sudo"]
}
path "auth/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# Управление аудит-устройствами.
path "sys/audit" {
capabilities = ["read", "sudo"]
}
path "sys/audit/*" {
capabilities = ["create", "read", "update", "delete", "sudo"]
}
# Управление идентификационными данными.
path "identity/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# Просмотр точек монтирования.
path "sys/mounts" {
capabilities = ["read"]
}
# Запрет доступа к содержимому секретов.
path "secret/data/*" {
capabilities = ["deny"]
}
path "kv/*" {
capabilities = ["deny"]
}
path "database/creds/*" {
capabilities = ["deny"]
}Перечислите в блоках deny все точки монтирования с секретами, которые используются в вашей инсталляции.
Администратор, который может изменять политики и методы аутентификации, технически способен выдать себе доступ к секретам. Контролируйте такие изменения через журнал аудита.