У меня настроен сервер Hashicorp Vault, и все работает отлично, за исключением моих политик запрета.
Я имеют двухуровневую группировку для большинства секретов, поэтому они следуют структуре:
secret/client/environment/*
Не все секреты следуют структуре клиент / среда, но для тех, которые это делают, у меня есть «ограниченный» узел, который у меня нет хотите, чтобы пользователи этой политики имели доступ.
На основании вышеуказанных требований я получил политику, которая выглядит примерно так:
# Allow access to non client / environment secrets
path "secret/"
{
capabilities = ["create", "read", "update", "list"]
}
path "secret/+/"
{
capabilities = ["create", "read", "update", "list"]
}
path "secret/+/+/*"
{
capabilities = ["create", "read", "update", "list"]
}
# No access to restricted secrets
path "secret/+/+/restricted"
{
capabilities = ["deny"]
}
path "secret/+/+/restricted/*"
{
capabilities = ["deny"]
}
Если я создаю токен с помощью политики и использую этот токен в " vault token features ", она возвращает то, что я ожидал:
$vault token capabilities $(cat token.txt) secret/client/environment/blah
create, list, read, update
$vault token capabilities $(cat token.txt) secret/client/environment/restricted
deny
$vault token capabilities $(cat token.txt) secret/client/environment/restricted/blah
deny
Проблема возникает, когда я вхожу в систему с использованием этого токена, я могу не только перечислить содержимое ограниченного узла, но также получить подробную информацию о любом ключе в нем (на всех уровнях ниже). Это верно как через интерфейс командной строки, так и через веб-интерфейс.
Я попытался применить более простую политику: разрешить секрет / * и затем запретить секрет / + / + / ограниченный / *, но это даже не сработало правильно с помощью команды "vault token features".
Когда я вхожу в систему с использованием токена, он показывает правильную политику (а также политику по умолчанию, но по умолчанию нет разрешений на secret /).
secret / настроен как kv store, поэтому я обращаюсь к ним через интерфейс командной строки, используя "vault kv list | get ..."
Есть ли еще один шаг, который я должен предпринять, чтобы "принудительно" применить правила политики для авторизованного пользователя?
Оказывается, что, потому что я использовал бэкенд KV v2 для секретного устройства хранения данных, структуры политики немного отличаются.
я закончил тем, что имел необходимость указать секрет / метаданные / для списка полномочий и секрета / , данные / для создают/обновляют/читают
, например:
# Allow listing of all secret branches
path "secret/metadata/"
{
capabilities = ["list"]
}
path "secret/metadata/+/"
{
capabilities = ["list"]
}
path "secret/metadata/+/+/"
{
capabilities = ["list"]
}
# Allow management of all keys under secret/<client>/<environment> structure
path "secret/data/+/+/+"
{
capabilities = ["create", "read", "update"]
}
И вместо того, чтобы поместить "отклонение" на ограниченный узел, единственный другой узел на том уровне (в данный момент) является "неограниченным" узлом и таким образом, я добавил:
path "secret/metadata/+/+/unrestricted/"
{
capabilities = ["list"]
}
path "secret/data/+/+/unrestricted/*"
{
capabilities = ["create", "read", "update"]
}
, Поскольку политики Хранилища, отклоняют по умолчанию, это имело желаемый эффект.
я нашел детали для установки политики KV2 в: https://www.vaultproject.io/docs/secrets/kv/kv-v2.html#acl-rules