Все в Stronghold основано на путях, и политики не являются исключением. Политики предоставляют декларативный способ предоставления или запрета доступа к определенным путям и операциям в Stronghold. В этом разделе обсуждаются рабочие процессы и синтаксисы политик.

Политики по умолчанию запрещают, поэтому пустая политика не предоставляет никаких разрешений в системе.

Процесс авторизации

Прежде чем человек или машина смогут получить доступ, администратор должен настроить Stronghold с помощью метода аутентификации. Аутентификация — это процесс, посредством которого информация, предоставленная человеком или машиной, проверяется по внутренней или внешней системе.

Рассмотрим следующую схему, которая иллюстрирует шаги, которые должна предпринять группа безопасности для настройки Stronghold для аутентификации с использованием корпоративной установки LDAP или ActiveDirectory. Несмотря на то, что в этом примере используется LDAP, эта концепция применима ко всем методам аутентификации.

Команда безопасности настраивает Stronghold для подключения к методу аутентификации. Эта конфигурация зависит от метода аутентификации. В случае LDAP Stronghold необходимо знать адрес сервера LDAP и то, следует ли подключаться с использованием TLS. Важно отметить, что Stronghold не хранит копию базы данных LDAP — Stronghold делегирует аутентификацию методу аутентификации.

Команда безопасности создает политику (или использует существующую политику), которая предоставляет доступ к путям в Stronghold. Политики пишутся в HCL в редакторе по вашему выбору и сохраняются на диске.

Содержимое политики загружается и сохраняется в Stronghold и ссылается на него по имени. Вы можете рассматривать имя политики как указатель или символическую ссылку на ее набор правил.

Самое главное, группа безопасности сопоставляет данные в методе аутентификации с политикой. Например, группа безопасности может создавать такие сопоставления:

Члены группы OU «dev» сопоставляются с политикой Stronghold с именем «readonly-dev».

или

Члены группы OU «ops» сопоставляются с политиками Stronghold «admin» и «auditor».

Теперь Stronghold имеет внутреннее сопоставление между системой аутентификации бэкэнда и внутренней политикой. Когда пользователь проходит аутентификацию в Stronghold, фактическая аутентификация делегируется методу auth.

Пользователь пытается пройти аутентификацию, используя свои учетные данные LDAP, предоставляя Stronghold свое имя пользователя и пароль LDAP.

Stronghold устанавливает соединение с LDAP и запрашивает у сервера LDAP проверку предоставленных учетных данных. Сервер LDAP возвращает информацию о пользователе, включая группы OU.

Stronghold сопоставляет результат с сервера LDAP с политиками, используя сопоставление, настроенное группой безопасности в предыдущем разделе. Затем Stronghold генерирует токен и прикрепляет соответствующие политики.

Stronghold возвращает токен пользователю. Этот токен имеет правильные назначенные политики, как предписано конфигурацией сопоставления, которая была настроена группой безопасности заранее.

Затем пользователь использует этот токен Stronghold для будущих операций. Если пользователь снова выполнит шаги аутентификации, он получит новый токен. Токен будет иметь те же разрешения, но фактический токен будет другим. Аутентификация во второй раз не делает исходный токен недействительным.

Как писать политики

Политики пишутся в HCL или JSON и описывают, к каким путям в Stronghold пользователю или машине разрешен доступ.

Вот очень простая политика, которая предоставляет возможности чтения пути KVv1 “secret/foo”:

path "secret/foo" {
  capabilities = ["read"]
}

Когда эта политика назначена токену, токен может читать из “secret/foo”. Однако токен не может обновить или удалить “secret/foo”, так как возможности не позволяют этого. Поскольку политики по умолчанию запрещены, токен не будет иметь другого доступа в Stronghold.

Вот более подробная политика, и она задокументирована в строке:

# Здесь мы предоставлям полный доступ к "secret/*". Дополнительные ограничения могут быть
# применены к этой широкой политике, как показано ниже.
path "secret/*" {
  capabilities = ["create", "read", "update", "patch", "delete", "list"]
}


# Несмотря на то, что мы разрешили secret/*, эта строка явно запрещает
# secret/super-secret. это имеет приоритет.
path "secret/super-secret" {
  capabilities = ["deny"]
}

# Политики также могут указывать разрешенные, запрещенные и обязательные параметры. здесь
# ключ "secret/restricted" может содержать только "foo" (любое значение) и "bar" (один из
# "zip" или "zap").
path "secret/restricted" {
  capabilities = ["create"]
  allowed_parameters = {
    "foo" = []
    "bar" = ["zip", "zap"]
  }
}

Политики используют сопоставление на основе пути для проверки набора возможностей по запросу. Путь политики может указывать точный путь для сопоставления или может указывать шаблон glob, который предписывает Stronghold использовать сопоставление префикса:

# Разрешить чтение только "secret/foo". Прикрепленный токен не может читать "secret/food"
# или "secret/foo/bar".
path "secret/foo" {
  capabilities = ["read"]
}

# Разрешить чтение всего под "secret/bar". Прикрепленный токен может читать
# "secret/bar/zip", "secret/bar/zip/zap", но не "secret/bars/zip".
path "secret/bar/*" {
  capabilities = ["read"]
}

# Разрешить чтение всего, что имеет префикс "zip-". Прикрепленный токен может читать
# "secret/zip-zap" или "secret/zip-zap/zong", но не "secret/zip/zap
path "secret/zip-*" {
  capabilities = ["read"]
}

Кроме того, знак + может использоваться для обозначения любого количества символов, ограниченных одним сегментом пути:

# Разрешить чтение пути "teamb" в любом пути верхнего уровня в secret/
path "secret/+/teamb" {
  capabilities = ["read"]
}

# Разрешить чтение secret/foo/bar/teamb, secret/bar/foo/teamb и т.д.
path "secret/+/+/teamb" {
  capabilities = ["read"]
}

Архитектура Stronghold похожа на файловую систему. Каждое действие в Stronghold имеет соответствующий путь и возможность — даже внутренние конечные точки конфигурации ядра Stronghold находятся под путем “sys/”. Политики определяют доступ к этим путям и возможностям, которые контролируют доступ токена к учетным данным в Stronghold.

Примечание: правила политики, применяемые Stronghold, определяются наиболее точным доступным соответствием с использованием правил приоритета, описанных ниже. Это может быть точное соответствие или соответствие с самым длинным префиксом glob. Если один и тот же шаблон появляется в нескольких политиках, мы берем объединение возможностей. Если в применимых политиках появляются разные шаблоны, мы берем только самое приоритетное соответствие из этих политик.

Это означает, что если вы определяете политику для “secret/foo*”, политика также будет соответствовать “secret/foobar”. В частности, когда потенциально существует несколько соответствующих путей политики, P1 и P2, применяются следующие критерии соответствия:

Символ glob, упомянутый в этой документации, — это звездочка (*). Это не регулярное выражение, и поддерживается только как последний символ пути!

При предоставлении возможности списка важно отметить, что поскольку список всегда работает с префиксом, политики должны работать с префиксом, поскольку Stronghold очистит пути запросов, чтобы они стали префиксами.

Возможности

Каждый путь должен определять одну или несколько возможностей, которые обеспечивают тонкий контроль над разрешенными (или запрещенными) операциями. Как показано в примерах выше, возможности всегда указываются в виде списка строк, даже если существует только одна возможность.

Чтобы определить возможности, необходимые для выполнения конкретной операции, к подкоманде CLI можно добавить флаг -output-policy. В качестве примера см. раздел документа «Требования к политике печати».

Список возможностей включает следующее:

create (POST/PUT) - Позволяет создавать данные по заданному пути. Очень немногие части Stronghold проводят различие между созданием и обновлением, поэтому для большинства операций требуются возможности как создания, так и обновления.

read (GET) - Позволяет читать данные по заданному пути.

update (POST/PUT) - Позволяет изменить данные по заданному пути. В большинстве частей Stronghold это неявно включает возможность создания начального значения по данному пути.

patch (PATCH) - позволяет частично обновлять данные по заданному пути.

delete (DELETE) - позволяет удалять данные по заданному пути.

list (LIST) - позволяет перечислить значения по заданному пути. Обратите внимание, что ключи, возвращаемые операцией list, не фильтруются политиками. Не кодируйте конфиденциальную информацию в именах ключей. Не все бэкенды поддерживают перечисление.

В приведенном выше списке соответствующие HTTP-глава указаны в скобках рядом с возможностью. При составлении политики обычно полезно посмотреть документацию по HTTP API для путей и HTTP-глаголов и сопоставить их с возможностями. Хотя сопоставление не является строгим 1:1, они часто очень похожи друг на друга.

В дополнение к стандартному набору есть некоторые возможности, которые не сопоставляются с HTTP-методами.

sudo - разрешает доступ к путям, защищенным правами root. Токенам не разрешается взаимодействовать с этими путями, если у них нет возможности sudo (в дополнение к другим возможностям, необходимым для выполнения операции над этим путем, таким как чтение или удаление).

Например, для модификации бэкендов журнала аудита требуется токен с привилегиями sudo.

deny - запрещает доступ. Этот параметр всегда имеет приоритет, независимо от любых других определенных возможностей, включая sudo.

Примечание: Возможности обычно привязываются к HTTP-методу, а не к основному выполняемому действию. Это может быть частым источником путаницы. Генерация учетных данных базы данных создает учетные данные базы данных, но HTTP-запрос - это GET, что соответствует возможности чтения. Таким образом, чтобы предоставить доступ к созданию учетных данных базы данных, политика должна предоставить доступ на чтение по соответствующему пути.

Шаблонные политики

Синтаксис политик позволяет заменять переменные в некоторых строках политик на значения, доступные токену. В настоящее время можно вводить идентификационную информацию, а также ключи пути в политиках.

Параметры Имя Описание identity.entity.id Идентификатор сущности identity.entity.name Имя сущности identity.entity.metadata.<ключ метаданных=""> Метаданные, связанные с сущностью для данного ключа identity.entity.aliases..id Идентификатор псевдонима сущности для данного монтирования identity.entity.aliases..name Имя псевдонима сущности для данного крепления identity.entity.aliases..metadata. Метаданные, связанные с псевдонимом для данного монтирования и ключом метаданных identity.entity.aliases..custom_metadata. Пользовательские метаданные, связанные с псевдонимом для данного монтирования и ключом пользовательских метаданных identity.groups.ids..name Имя группы для данного идентификатора группы identity.groups.names..id Идентификатор группы для данного имени группы identity.groups.ids..metadata. Метаданные, связанные с группой для данного ключа identity.groups.names..metadata. Метаданные, связанные с группой для данного ключа

Примеры

Следующая политика создает раздел KVv2 Secret Engine для определенного пользователя

path "secret/data//*" {
  capabilities = ["create", "update", "patch", "read", "delete"]
}

path "secret/metadata//*" {
  capabilities = ["list"]
}

Если вы хотите создать общий раздел KV, связанный с сущностями, входящими в группу.

# In the example below, the group ID maps a group and the path
# В приведенном ниже примере идентификатор группы объединяет группу и путь

path "secret/data/groups//*" {
  capabilities = ["create", "update", "patch", "read", "delete"]
}

path "secret/metadata/groups//*" {
  capabilities = ["list"]
}

Примечание: При разработке шаблонных политик по возможности используйте идентификаторы. Каждый идентификатор уникален для пользователя, в то время как имена могут меняться со временем и могут использоваться повторно. Это гарантирует, что при изменении имени пользователя или группы политика будет сопоставлена с нужным субъектом или группой.

Если вы хотите использовать метаданные, связанные с плагином аутентификации, в своих шаблонах, вам нужно получить его аксессуар mount и получить к нему доступ через ключ aliases.

Получить значение аксессора монтирования можно с помощью следующей команды:

d8 stronghold auth list

Пример вывода:

Path           Type          Accessor                    Description
----           ----          --------                    -----------
kubernetes/    kubernetes    auth_kubernetes_xxxx        n/a
token/         token         auth_token_yyyy             token based credentials

Следующая шаблонная политика позволяет читать путь, связанный с пространством имен учетной записи сервиса Kubernetes идентификатора:

path "secret/data//*" {
  capabilities = ["read"]
}

Тонкий контроль

В дополнение к стандартному набору возможностей Stronghold предлагает более тонкий контроль над разрешениями на определенном пути. Возможности, связанные с путем, имеют приоритет над разрешениями на параметры.

Ограничения на параметры

Примечание: Использование глобусов (*) может привести к неожиданному поведению.

Примечание: Поля allowed_parameters, denied_parameters и required_parameters не поддерживаются для политик, используемых с механизмом секретов kv версии 2.

Дополнительную информацию см. в спецификации API.

Политики могут учитывать параметры HTTP-запроса для дальнейшего ограничения запросов, используя следующие параметры:

required_parameters - список параметров, которые должны быть указаны.

# Это требует от пользователя создания «secret/profile» с параметром/ключом с именами
# «name» и «id», где kv v1 включен по пути «secret/».
path "secret/profile" {
  capabilities = ["create"]
  required_parameters = ["name", "id"]
}

allowed_parameters - Список ключей и значений, которые разрешены для данного пути.

Задание параметру значения из пустого списка позволяет параметру содержать любое значение.

# Это позволяет пользователю обновить значение параметра пароля, установленное для любого
# пользователей, настроенных на метод аутентификации userpass. Значение пароля может быть
# что угодно. Однако пользователь не может обновлять значения других параметров, таких как
# token_ttl.
path "auth/userpass/users/*" {
  capabilities = ["update"]
  allowed_parameters = {
    "password" = []
  }
}

Пример использования: В учебном пособии ACL Policy Path Templating демонстрируется использование allowed_parameters для разрешения пользователю обновлять пароль пользователя при использовании метода userpass auth для входа в систему Stronghold.

Установка параметра со значением из заполненного списка позволяет параметру содержать только эти значения.

# Это позволяет пользователю создать или обновить ключ шифрования для транзитного
# механизма секретов по адресу «transit/». Когда вы это сделаете, вы можете установить
# значение параметра «auto_rotate_period», чтобы ключ ротировался.
# Однако период ротации должен быть равен «8h», «24 или «5d».
# Любое другое значение приведет к ошибке.

path "transit/keys/*" {
  capabilities = ["create", "update"]
  allowed_parameters = {
    "auto_rotate_period" = ["8h", "24h", "5d"]
  }
}

Если указаны какие-либо ключи, все не указанные параметры будут запрещены, за исключением случая, когда параметр «*» установлен в пустой массив, что позволит изменять все остальные параметры. Параметры с определенными значениями будут по-прежнему ограничены этими значениями.

# Когда механизм секретов kv v1 включен в «secret/», это позволяет пользователю
# создать «secret/foo» с параметром «bar». Параметр «bar» может
# содержать только значения «zip» или «zap», но любые другие параметры могут быть
# но любые другие параметры могут быть созданы с любым значением.
path "secret/foo" {
  capabilities = ["create"]
  allowed_parameters = {
    "bar" = ["zip", "zap"]
    "*"   = []
  }
}

denied_parameters - список ключей и значений, которые не разрешены для данного пути. Любые значения, указанные здесь, имеют приоритет над allowed_parameters.

Установка параметра со значением из пустого списка запрещает любые изменения этого параметра.

# Это позволяет пользователю обновлять пользовательские настройки метода userpass auth
# конфигурации (например, «пароль»), но не может обновлять значения параметров «token_policies»
# и значения параметров «policies».

path "auth/userpass/users/*" {
  capabilities = ["update"]
  denied_parameters = {
    "token_policies" = []
    "policies" = []
  }
}

Установка параметра со значением из заполненного списка запрещает любые параметры, содержащие эти значения.

# This allows the user to create or update token roles. However, the
# "allowed_policies" parameter value cannot be "admin", but the user can
# assign any other policies to the parameter.
path "auth/token/roles/*" {
  capabilities = ["create", "update"]
  denied_parameters = {
    "allowed_policies" = ["admin"]
  }
}

Setting to “*” will deny any parameter.

# This allows the user to create or update an encryption key for transit
# secrets engine enabled at "transit/". However, the user cannot set any of
# the configuration parameters. As a result, the created key will have all
# parameters set to default values.
path "transit/keys/*" {
  capabilities = ["create", "update"]
  denied_parameters = {
    "*" = []
  }
}

Если указаны какие-либо параметры, то все не указанные параметры разрешены, если только не задан параметр allowed_parameters, в этом случае применяются обычные правила.

Значения параметров также поддерживают сглаживание префиксов/суффиксов. Оглоблирование включается путем добавления к значению префикса или префикса (*):

# Only allow a parameter named "bar" with a value starting with "foo-*".
path "secret/foo" {
  capabilities = ["create"]
  allowed_parameters = {
    "bar" = ["foo-*"]
  }
}

Примечание: единственным значением, которое можно использовать с параметром *, является [].

Ограничения параметров

Значения по умолчанию

Оценка политик с разрешенными_параметрами, запрещенными_параметрами и требуемыми_параметрами происходит без учета значений параметров по умолчанию.

Рассмотрим следующую политику:

# The "no_store" parameter cannot be false
path "secret/foo" {
  capabilities = ["create"]
  denied_parameters = {
    "no_store" = [false, "false"]
  }
}

Следующая операция будет выполнена с ошибкой, поскольку для параметра «no_store» установлено значение false:

d8 stronghold write secret/foo no_store=false value=bar

В то время как следующая операция будет успешной, даже если параметр «no_store» должен быть булевым, а по умолчанию он равен false:

# Succeeds because "no_store=false" isn't present in the parameters
d8 stronghold write secret/foo value=bar

Это происходит потому, что анализатор политики не знает, какое значение по умолчанию имеет параметр «no_store». Все, что он видит, это то, что запрещенный параметр не присутствует в команде.

Эту проблему можно решить, потребовав в политике параметр «no_store»:

path "secret/foo" {
  capabilities = ["create"]
  required_parameters = ["no_store"]
  denied_parameters = {
    "no_store" = [false, "false"]
  }
}

Следующая команда, которая ранее была успешной, теперь не выполнится в соответствии с новой политикой, поскольку отсутствует параметр «no_store»:

d8 stronghold write secret/foo value=bar

Globbing

Также важно отметить, что использование globbing может привести к неожиданному поведению:

# This allows the user to create, update, or patch "secret/foo" with a parameter
# named "bar". the values passed to parameter "bar" must start with "baz/"
# so values like "baz/quux" are fine. however, values like
# "baz/quux,wibble,wobble,wubble" would also be accepted. the API that
# underlies "secret/foo" might allow comma delimited values for the "bar"
# parameter, and if it did, specifying a value like
# "baz/quux,wibble,wobble,wubble" would result in 4 different values getting
# passed along. seeing values like "wibble" or "wobble" getting passed to
# "secret/foo" might surprise someone that expected the allowed_parameters
# constraint to only allow values starting with "baz/".
path "secret/foo" {
  capabilities = ["create", "update", "patch"]
  allowed_parameters = {
    "bar" = ["baz/*"]
  }
}

Требуемые TTL для обертывания ответа

Эти параметры можно использовать для установки минимальных/максимальных значений TTL, задаваемых клиентами при запросе на обертывание ответа, с точностью до секунды. Они используют строки формата duration.

На практике установка минимального TTL в одну секунду делает обертку ответа обязательной для определенного пути.

min_wrapping_ttl - минимально допустимый TTL, который клиенты могут указать для обернутого ответа. На практике установка минимального TTL в одну секунду фактически делает обертку ответа обязательной для конкретного пути. Это также может использоваться для обеспечения того, чтобы TTL не было слишком низким, что приведет к тому, что конечные цели не смогут развернуть ответ до истечения срока действия маркера.

max_wrapping_ttl - Максимально допустимый TTL, который клиенты могут указать для обернутого ответа.

# This effectively makes response wrapping mandatory for this path by setting min_wrapping_ttl to 1 second.
# This also sets this path's wrapped response maximum allowed TTL to 90 seconds.
path "auth/approle/role/my-role/secret-id" {
    capabilities = ["create", "update"]
    min_wrapping_ttl = "1s"
    max_wrapping_ttl = "90s"
}

Если указаны оба значения, минимальное должно быть меньше максимального. Кроме того, если пути объединяются из разных строф, минимальное значение, указанное для каждой из них, является значением, которое будет получено в результате, в соответствии с идеей сохранения времени жизни токенов как можно меньше.

Встроенные политики

В Stronghold есть две встроенные политики: по умолчанию и root. В этом разделе описываются две встроенные политики.

Политика по умолчанию

Политика по умолчанию - это встроенная политика Stronghold, которую нельзя удалить. По умолчанию она прикреплена ко всем токенам, но может быть явно исключена во время создания токена с помощью поддерживаемых методов аутентификации.

Политика содержит базовую функциональность, такую как возможность для токена искать данные о себе и использовать данные о своих закутках. Однако Stronghold не предписывает ее содержание. Ее можно изменять в соответствии с вашими потребностями; Stronghold никогда не перезапишет ваши изменения. Если вы хотите быть в курсе последних версий политики по умолчанию, просто прочитайте ее содержимое с актуального dev-сервера и запишите его в политику по умолчанию вашего Stronghold.

Чтобы просмотреть все разрешения, предоставленные политикой по умолчанию для вашей установки Stronghold, выполните команду:

d8 stronghold read sys/policy/default

Чтобы отключить прикрепление политики по умолчанию:

d8 stronghold token create -no-default-policy

или через API:

curl \
  --request POST \
  --header "X-Vault-Token: ..." \
  --data '{"no_default_policy": "true"}' \
  https://stronghold.example.com/v1/auth/token/create

Корневая политика

Корневая (root) политика - это встроенная политика Stronghold, которую нельзя изменить или удалить. Любой пользователь, связанный с этой политикой, становится root пользователем. Пользователь root может делать все, что угодно в Stronghold. Поэтому настоятельно рекомендуется отозвать все root-токены перед началом эксплуатации Stronghold.

При первой инициализации сервера Stronghold всегда существует один пользователь root. Этот пользователь используется для начальной настройки и установки Stronghold. После настройки первоначальный корневой токен следует отозвать и использовать более строго контролируемых пользователей и аутентификацию.

Чтобы отозвать root токен, выполните команду:

d8 stronghold token revoke "<token>"

или через API:

curl \
  --request POST \
  --header "X-Vault-Token: ..." \
  --data '{"token": "<token>"}' \
  https://stronghold.example.com/v1/auth/token/revoke

Управление политиками

Политики создаются в выбранном вами редакторе. Они могут быть созданы в HCL или JSON, а синтаксис подробно описан выше. После сохранения политики должны быть загружены в Stronghold, прежде чем их можно будет использовать.

Список политик

Чтобы вывести список всех зарегистрированных политик в Stronghold:

d8 stronghold read sys/policy

или через API:

curl \
  --header "X-Vault-Token: ..." \
  https://stronghold.example.com/v1/sys/policy

Создание политик

Политики могут быть созданы через CLI или через API. Чтобы создать новую политику в Stronghold:

d8 stronghold policy write policy-name policy-file.hcl

или через API:

curl \
  --request POST \
  --header "X-Vault-Token: ..." \
  --data '{"policy":"path \"...\" {...} "}' \
  https://stronghold.example.com/v1/sys/policy/policy-name

В обоих примерах имя политики - «policy-name». Это имя можно рассматривать как указатель или симлинк на ACL политики. Токены прикрепляются к политике по имени, которое затем сопоставляется с набором правил, соответствующих этому имени.

Обновление политик

Существующие политики могут быть обновлены для изменения разрешений через CLI или API. Чтобы обновить существующую политику в Stronghold, выполните те же действия, что и при создании политики, но используйте имя существующей политики:

d8 stronghold write sys/policy/my-existing-policy policy=@updated-policy.json

или через API:

curl \
  --request POST \
  --header "X-Vault-Token: ..." \
  --data '{"policy":"path \"...\" {...} "}' \
  https://stronghold.example.com/v1/sys/policy/my-existing-policy

Удаление политик Существующие политики можно удалить с помощью CLI или API. Чтобы удалить политику:

d8 stronghold delete sys/policy/policy-name

или через API:

curl \
  --request DELETE \
  --header "X-Vault-Token: ..." \
  https://stronghold.example.com/v1/sys/policy/policy-name

Это идемпотентная операция. Stronghold не вернет ошибку при удалении несуществующей политики.

Ассоциирование политик

Stronghold может автоматически ассоциировать набор политик с токеном на основе авторизации. Эта конфигурация существенно различается в разных бэкендах аутентификации. Для простоты в этом примере будет использован встроенный в Stronghold метод аутентификации userpass.

Администратор или кто-то из команды безопасности создаст пользователя со списком связанных политик:

d8 stronghold write auth/userpass/users/sethvargo \
    password="s3cr3t!" \
    policies="dev-readonly,logs"

Это создает сопоставление аутентификации с политикой, так что при успешной аутентификации пользователя в Stronghold ему выдается токен со списком политик.

Пользователь, желающий пройти аутентификацию, должен выполнить команду

$ d8 stronghold login -method="userpass" username="sethvargo"
Password (will be hidden): ...

Если предоставленная информация верна, Stronghold сгенерирует токен, присвоит ему список настроенных политик и вернет этот токен аутентифицированному пользователю.

Конечные точки API с корневой защитой

Примечание: Stronghold рассматривает глаголы HTTP POST и PUT как эквивалентные, поэтому для каждого упоминания POST в таблице выше может также использоваться PUT. Stronghold использует нестандартный HTTP-глагол LIST, но также позволяет делать запросы к списку с помощью глагола GET и параметра запроса ?list=true, поэтому для каждого упоминания LIST в таблице выше можно также использовать GET с ?list=true.

Следующие пути требуют наличия в политике токена root или права sudo:

Путь HTTP verb Описание
auth/token/accessors LIST Список аксессоров токенов для всех текущих токенов службы Stronghold
auth/token/create POST Создание периодического или сиротского токена (опция period или no_parent)
pki/root DELETE Удалить текущий ключ CA (движок pki secrets)
pki/root/sign-self-issued POST Использование настроенного сертификата CA для подписи самостоятельно выпущенного сертификата (pki secrets engine)
sys/audit GET Список включенных устройств аудита
sys/audit/:path POST, DELETE Включить или удалить устройство аудита
sys/auth/:path GET, POST, DELETE Управление методами аутентификации (включение, чтение и удаление)
sys/auth/:path/tune GET, POST Управление методами аутентификации (включение, чтение, удаление и настройка)
sys/config/auditing/request-headers GET Список заголовков запросов, которые настроены на аудит
sys/config/auditing/request-headers/:name GET, POST, DELETE Управление заголовками аудита (создание, обновление, чтение и удаление)
sys/config/cors GET, POST, DELETE Настройка параметров CORS
sys/config/ui/headers GET, LIST Настройка параметров пользовательского интерфейса
sys/config/ui/headers/:name POST, DELETE Настройте пользовательские HTTP-заголовки для обслуживания пользовательского интерфейса
sys/internal/inspect/router/:tag GET Проверка внутренних компонентов маршрутизатора Stronghold. tag должен быть одним из root, uuid, accessor или storage
sys/leases/lookup/:prefix LIST Список идентификаторов аренды
sys/leases/revoke-force/:prefix POST Отменить все секреты или токены, игнорируя ошибки бэкэнда
sys/leases/revoke-prefix/:prefix POST Отменить все секреты, созданные под данным префиксом
sys/plugins/catalog/:type/:name GET, POST, DELETE Регистрация нового плагина или чтение/удаление существующего плагина
sys/raw:path GET, POST, DELETE Используется для доступа к необработанному базовому хранилищу в Stronghold
sys/raw:prefix GET, LIST Возвращает список ключей для заданного префикса пути
sys/remount POST Перемещает уже смонтированный бэкэнд в новую точку монтирования
sys/replication/reindex POST Переиндексация локального хранилища данных
sys/replication/performance/primary/secondary-token POST Генерация вторичного токена активации производительности
sys/replication/dr/primary/secondary-token POST Генерирование маркера вторичной активации DR
sys/rotate POST Запуск ротации ключа шифрования бэкэнда
sys/seal POST Запечатать хранилище
sys/step-down POST Заставляет узел отказаться от активного статуса
sys/storage/raft/snapshot-auto/config LIST Список именованных конфигураций
sys/storage/raft/snapshot-auto/config/:name GET, POST, DELETE Создает или обновляет именованную конфигурацию

Токены У токенов есть два набора политик: политики идентификации, которые вычисляются на основе сущности и ее групп, и политики токена, которые либо определяются на основе метода входа, либо, в случае явного создания токена через API, являются входными данными для создания токена. Все нижеследующее касается исключительно политик токенов: политики идентификации токена нельзя контролировать иначе, как изменяя базовые сущности, группы и членство в группах.

Токены ассоциируются со своими политиками во время создания. Например:

d8 stronghold token create -policy=dev-readonly -policy=logs

Обычно можно указывать только те политики, которые присутствуют в политиках текущего токена (т.е. родительского токена нового токена). Однако пользователи root могут назначать любые политики.

Не существует способа изменить политики, связанные с токеном, после того как токен был выпущен. Чтобы получить новый набор политик, токен должен быть отозван и получен новый.

Однако содержимое политик анализируется в режиме реального времени при каждом использовании токена. В результате, если политика была изменена, измененные правила будут действовать в следующий раз, когда токен с этой политикой будет использован для вызова Stronghold.