Методы аутентификации. Kubernetes (API)
В данном разделе представлена документация API для плагина метода аутентификации Kubernetes StarVault. Чтобы узнать больше об использовании и работе, смотрите
метод аутентификации Kubernetes StarVault.
|
Этот механизм может использовать внешние сертификаты X.509 в качестве части TLS или проверки подписи. Проверка подписей на сертификаты X.509 с использованием SHA-1 устарела и больше не может использоваться без обходного решения. |
В текущей документации предполагается, что метод аутентификации Kubernetes подключен по пути /auth/kubernetes в StarVault. Поскольку возможно включать методы аутентификации в любом месте, пожалуйста, обновите ваши вызовы API соответственно.
1. Настройка метода
Метод аутентификации Kubernetes проверяет JWT учетных записей сервисов и проверяет их существование с использованием API TokenReview Kubernetes. Эта конечная точка настраивает открытый ключ, который используется для проверки подписи JWT, и необходимую информацию для доступа к API Kubernetes.
| Метод | Путь |
|---|---|
|
|
1.1. Параметры
-
kubernetes_host(string: )- хост должен быть строкой хоста, парой хост:порт или URL-адресом базового API сервера Kubernetes; -
kubernetes_ca_cert(string: "")- PEM кодированный CA сертификат для использования TLS клиентом, который будет взаимодействовать с API Kubernetes.
|
Каждая строка должна заканчиваться новой строкой: |
Если не установлено, локальный CA сертификат будет использован, если запускать в поде Kubernetes.
-
token_reviewer_jwt(string: "")- JWT учетной записи сервиса, который используется для доступа к API TokenReview для проверки других JWT во время входа. Если не установлено, то локальный токен учетной записи сервиса используется, если запущен в поде Kubernetes, в противном случае JWT, представленный в полезной нагрузке входа, будет использоваться для доступа к API TokenReview Kubernetes. -
pem_keys(array: [])- необязательный список общественных ключей или сертификатов в формате PEM, которые используются для проверки подписи JWT учетных записей сервиса Kubernetes. Если задан сертификат, его открытый ключ будет извлечен. Не каждая установка Kubernetes открывает эти ключи. -
disable_local_ca_jwt(bool: false)- отключает возможность использования локального CA сертификата и JWT учетной записи сервиса при выполнении в поде Kubernetes.
1.2. Устаревшие параметры
|
Следующие поля устарели и будут удалены в будущих версиях: |
-
disable_iss_validation(bool: true)Устарело - отключение проверки сертификата ISS JWT. Позволяет пропустить валидацию ISS. -
issuer(string: "")Устарело - необязательный выданный JWT. Если выданное имя не указано, то этот плагин будет использовать значение по умолчаниюkubernetes/serviceaccount. См. инструкции для поиска выданного имени для данного кластера Kubernetes.
1.3. Предостережения
Если StarVault выполняется в поде Kubernetes, параметры kubernetes_ca_cert и token_reviewer_jwt будут автоматически по умолчанию устанавливаться на локальный CA сертификат (/var/run/secrets/kubernetes.io/serviceaccount/ca.crt) и локальный JWT учетной записи сервиса (/var/run/secrets/kubernetes.io/serviceaccount/token). Это поведение может быть отключено, установив disable_local_ca_jwt на true.
Когда StarVault выполняется в не-Kubernetes окружении, либо kubernetes_ca_cert, либо pem_keys должны быть указаны пользователем.
{
"kubernetes_host": "https://192.168.99.100:8443",
"kubernetes_ca_cert": "-----BEGIN CERTIFICATE-----\n.....\n-----END CERTIFICATE-----",
"pem_keys": "-----BEGIN CERTIFICATE-----\n.....\n-----END CERTIFICATE-----"
}
$ curl \
--header "X-Vault-Token: ..." \
--request POST \
--data @payload.json \
http://127.0.0.1:8200/v1/auth/kubernetes/config
2. Чтение конфигурации
Возвращает ранее настроенную конфигурацию, за исключением учетных данных.
| Метод | Путь |
|---|---|
|
|
$ curl \
--header "X-Vault-Token: ..." \
http://127.0.0.1:8200/v1/auth/kubernetes/config
{
"data":{
"kubernetes_host": "https://192.168.99.100:8443",
"kubernetes_ca_cert": "-----BEGIN CERTIFICATE-----.....-----END CERTIFICATE-----",
"pem_keys": ["-----BEGIN CERTIFICATE-----.....", .....],
"disable_local_ca_jwt": false
}
}
3. Создание/Обновление роли
Регистрация роли в методе аутентификации. Типы ролей имеют специфические сущности, которые могут выполнять операции входа через эту конечную точку. Ограничения, специфичные для типа роли, должны быть установлены на роли. Эти ограничения применяются к аутентифицированным сущностям, пытающимся войти в систему.
| Метод | Путь |
|---|---|
|
|
3.1. Параметры
-
name(string: )- имя роли. -
bound_service_account_names(array: )- список имен учетных записей сервисов, которые могут получить доступ к этой роли. Если установлено на*, то разрешены все имена. -
bound_service_account_namespaces(array: )- список пространств имен, позволяющих получить доступ к этой роли. Если установлено на*, то разрешены все пространства имен. -
audience(string: "")- необязательный Audience claim для проверки в JWT. -
alias_name_source(string: "serviceaccount_uid")- настраивает, как создаются алиасы идентичности. Допустимые значения:serviceaccount_uid,serviceaccount_name. Когда указано значениеserviceaccount_uid, будет использован UID, сгенерированный для учетной записи сервиса в качестве имени алиаса идентичности. При указании значенияserviceaccount_nameбудут использованы пространство имен и имя учетной записи сервиса в качестве имени алиаса идентичности, например:starvault/starvault-auth. Настоятельно рекомендуется использоватьserviceaccount_uid, но вы также можете использоватьserviceaccount_nameв ситуациях, когда вы хотите заранее установить алиас, и риски будут смягчены или приемлемы с учетом вашего случая использования. Очень важно ограничить, кто может удалять/создавать учетные записи сервисов в данном кластере. См. Создание алиаса сущности документ, который далее раскрывает потенциальные проблемы с безопасностью, упомянутые выше.
{
"bound_service_account_names": "starvault-auth",
"bound_service_account_namespaces": "default",
"policies": ["dev", "prod"],
"max_ttl": 1800000
}
$ curl \
--header "X-Vault-Token: ..." \
--request POST \
--data @payload.json \
http://127.0.0.1:8200/v1/auth/kubernetes/role/dev-role
4. Чтение роли
Возвращает ранее зарегистрированную конфигурацию роли.
| Метод | Путь |
|---|---|
|
|
4.1. Параметры
-
name(string: )- имя роли.
$ curl \
--header "X-Vault-Token: ..." \
http://127.0.0.1:8200/v1/auth/kubernetes/role/dev-role
{
"data": {
"bound_service_account_names": "starvault-auth",
"bound_service_account_namespaces": "default",
"max_ttl": 1800000,
"ttl": 0,
"period": 0,
"policies": ["dev", "prod"]
}
}
5. Список ролей
Перечисляет все роли, зарегистрированные с помощью метода аутентификации.
| Метод | Путь |
|---|---|
|
|
|
|
5.1. Параметры
-
after(string: "")- необязательная запись, с которой следует начинать перечисление для постраничной навигации; не требуется существовать. -
limit(int: 0)- необязательное количество записей для возврата; по умолчанию возвращаются все записи.
$ curl \
--header "X-Vault-Token: ..." \
--request LIST \
http://127.0.0.1:8200/v1/auth/kubernetes/role
{
"data": {
"keys": ["dev-role", "prod-role"]
}
}
7. Вход с помощью Kubernetes
Получите токен. Эта конечная точка принимает подписанный JSON Web Token (JWT) и имя роли для определенной сущности. Он проверяет подпись JWT для аутентификации этой сущности и затем авторизует сущность для данной роли.
| Метод | Путь |
|---|---|
|
|
7.1. Параметры
-
role(string: )- имя роли, против которой осуществляется попытка входа. -
jwt(string: )- подписанный JSON Web Token (JWT) для аутентификации учетной записи сервиса.
{
"role": "dev-role",
"jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
$ curl \
--request POST \
--data @payload.json \
http://127.0.0.1:8200/v1/auth/kubernetes/login
{
"auth": {
"client_token": "62b858f9-529c-6b26-e0b8-0457b6aacdb4",
"accessor": "afa306d0-be3d-c8d2-b0d7-2676e1c0d9b4",
"policies": ["default"],
"metadata": {
"role": "test",
"service_account_name": "starvault-auth",
"service_account_namespace": "default",
"service_account_secret_name": "starvault-auth-token-pd21c",
"service_account_uid": "aa9aa8ff-98d0-11e7-9bb7-0800276d99bf"
},
"lease_duration": 2764800,
"renewable": true
}
}