Hashicorp Vault - Политика, ограничивающая один конкретный подузел на пути

У меня настроен сервер 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 ..."

Есть ли еще один шаг, который я должен предпринять, чтобы "принудительно" применить правила политики для авторизованного пользователя?

0
задан 8 August 2019 в 11:52
1 ответ

Оказывается, что, потому что я использовал бэкенд 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

0
ответ дан 23 November 2019 в 22:25

Теги

Похожие вопросы