Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Методы аутентификации. 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.

Метод Путь

POST

/auth/kubernetes/config

1.1. Параметры

  • kubernetes_host (string: ) - хост должен быть строкой хоста, парой хост:порт или URL-адресом базового API сервера Kubernetes;

  • kubernetes_ca_cert (string: "") - PEM кодированный CA сертификат для использования TLS клиентом, который будет взаимодействовать с API Kubernetes.

Каждая строка должна заканчиваться новой строкой: \n.

Если не установлено, локальный 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. Чтение конфигурации

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

Метод Путь

GET

/auth/kubernetes/config

Пример запроса:
$ 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. Создание/Обновление роли

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

Метод Путь

POST

/auth/kubernetes/role/:name

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. Чтение роли

Возвращает ранее зарегистрированную конфигурацию роли.

Метод Путь

GET

/auth/kubernetes/role/:name

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. Список ролей

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

Метод Путь

LIST

/auth/kubernetes/role

GET

/auth/kubernetes/role?list=true

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"]
  }
}

6. Удаление роли

Удаляет ранее зарегистрированную роль.

Метод Путь

DELETE

/auth/kubernetes/role/:role

6.1. Параметры

  • role (string: ) - имя роли.

Пример запроса:
$ curl \
    --header "X-Vault-Token: ..." \
    --request DELETE \
    http://127.0.0.1:8200/v1/auth/kubernetes/role/dev-role

7. Вход с помощью Kubernetes

Получите токен. Эта конечная точка принимает подписанный JSON Web Token (JWT) и имя роли для определенной сущности. Он проверяет подпись JWT для аутентификации этой сущности и затем авторизует сущность для данной роли.

Метод Путь

POST

/auth/kubernetes/login

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
  }
}