Подключить внешний OIDC-провайдер

Платформа “Штурвал” поддерживает подключение Keycloak и Blitz как внешних OIDC-провайдеров.

Когда в кластере управления работают такие сервисы, как Kubeflow, ArgoCD и Grafana, при изменении OIDC-провайдера изменения в ssc не потребуются.

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

Подготовка к настройке подключения в платформе

Требования к Access Token внешнего OIDC-провайдера

Для корректной интеграции с платформой “Штурвал” на стороне внешнего OIDC-провайдера (Blitz, Keycloak) в access_token должны быть настроены поля:

Claim в токенеЗначениеИсточник значения
audИдентификатор клиента, для которого выпущен токен. Должен соответствовать CLIENT_ID, например, backend.Настройки клиента в OIDC-провайдере
subУникальное имя пользователя.Например, sAMAccountName пользователя в AD
preferred_usernameИмя учётной записи пользователя.Например, sAMAccountName пользователя в AD
nameОтображаемое имя пользователя.Например, displayName или sAMAccountName пользователя в AD
emailEmail пользователя.Например, mail пользователя в AD
claimsСписок групп, в которые входит пользователь.Например, claims в AD
issIssuer URL внешнего OIDC-провайдера.Настройки OIDC-провайдера
jti, exp, iatОбязательные claim токена. Должны присутствовать и формироваться в соответствии с RFC 7519.Настройки OIDC-провайдера

Для Keycloak в маппере групп клиента (Group Membership) параметр Full group path должен быть выключен (Off). Если оставить его включённым, в токене вместо имени группы, например, developers, придёт полный путь /parent/developers, и интеграция завершится ошибкой.

При настройке интеграции в GUI можно сопоставить поля access_token внешнего OIDC-провайдера с полями, которые ожидает платформа. Используйте эту настройку, если в токене вашего OIDC-провайдера поля называются не aud, sub, preferred_username, name, email, а иначе.

Корневой CA сертификат внешнего OIDC-провайдера

Если необходимо устанавливать TLS соединение при аутентификации, получите корневой CA сертификат внешнего OIDC-провайдера, закодированный в base64. Вы можете запросить сертификат у администратора OIDC-провайдера или получить его способом, приведенным далее.

В интерфейсе командной строки подключитесь по SSH к OIDC-провайдеру и получите сертификат, закодированный в base64.

Команда — иллюстрация
cat <путь до файла сертификата внешнего OIDC-провайдера> | base64

Например, путь до файла сертификата внешнего OIDC-провайдера: /usr/share/keycloak/cert/keycloak.shturval.crt.

Пример ответа
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tClvRgdC10YDRgtC40YTQuNC60LDRgiDQstC90LXRiNC90LXQs9C+INGB0LXRgNCy0LjRgdCwINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40LhdCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=

Подключение внешнего OIDC-провайдера в платформе

Вы можете настроить интеграцию с внешним OIDC-провайдером в графическом интерфейсе (GUI) или в интерфейсе командной строки (CLI), создав Secret auth-provider в неймспейсе shturval-backend.

Для интеграции платформы с новым OIDC-провайдером рекомендуется использовать настройки в GUI.

Если интеграция с OIDC-провайдером настроена через ssc Модуля управления аутентификацией (shturval-auth), редактирование в GUI будет недоступно. 

В графическом интерфейсе

Как перейти к настройке интеграции

  1. В платформе перейдите на страницу Интеграция с OIDC провайдером одним из способов:
    • В платформе откройте раздел Управление доступом → страница Интеграция с OIDC провайдером;
    • На вкладке Платформа из блока Доступ к платформе перейдите по кнопке Интеграция с OIDC провайдером.

На вкладке Платформа в строке Провайдер аутентификации отображается статус подключения провайдера:

  • если подключен внутренний провайдер, отображается Внутренний;
  • если подключен внешний OIDC-провайдер, отображается его имя. Нажатие на имя открывает страницу просмотра Интеграция с OIDC провайдером.

Шаг 1. Заполните параметры подключения

На странице Интеграция с OIDC провайдером заполните поля:

Параметры блока «Конфигурация провайдера»

Поле в интерфейсеОписание
Имя провайдераИмя конфигурации провайдера. Отображается при аутентификации в графическом интерфейсе. Доступно к редактированию после сохранения настроек интеграции.
Отображать внутренний провайдер аутентификацииОпределяет, будет ли внутренний провайдер доступен для аутентификации при подключении внешнего OIDC-провайдера. По умолчанию выбрано Да. Если не удалось проверить подключение по ID и секрету клиента, установленное значение Нет будет проигнорировано.
URL эмитента OIDCURL issuer внешнего OIDC-провайдера. Например, для Keycloak, Issuer находится в разделе Identity providers в блоке OpenID Connect settings.
ID клиента OIDCИдентификатор клиента OIDC-провайдера.
Секрет клиентаСекрет клиента внешнего OIDC-провайдера. Например, для Keycloak clientSecret находится в разделе Clients на странице клиента, вкладка Credentials в поле Client Secret
Метод PKCEВыберите метод, если в провайдере включен Proof Key for Code Exchange (PKCE) Challenge Method. Доступные варианты: plain или S256. По умолчанию метод не выбран.
Включить верификацию CAОпределяет, нужно ли проверять CA-сертификат OIDC-провайдера. По умолчанию выбрано Нет. При включении верификации доступна загрузка корневого СА сертификата
Корневой CA сертификатЗакодированный в base64 корневой CA сертификат внешнего OIDC-провайдера

Шаг 2. Проверьте подключение

Когда все обязательные поля заполнены, нажмите Проверить подключение. Платформа проверит доступность well-known конфигурации OIDC-провайдера и endpoints аутентификации, необходимых для корректной работы внешней аутентификации в Штурвале.

Если проверка выполнена успешно, станут доступны:

  • поля для сопоставления полей Access Token OIDC-провайдера.
  • переключатель режима работы OIDC-провайдера в платформе.

В случае если при проверке подключения не удалось проверить client.clientId и client.clientSecret, то вернется предупреждение. В этом случае при подключении внешнего OIDC-провайдера внутренний провайдер останется доступен для безопасного входа в систему.

Шаг 3. Маппинг Access Token OIDC-провайдера

После успешной проверки подключения доступно задать Сопоставление полей Access Token OIDC-провайдера. Заполните параметры, только если в Access Token OIDC-провайдера используются названия claim, отличные от названий: sub, claims, preferred_username, aud, name, email.

Укажите в полях имена claim access_token OIDC-провайдера. Например, если группы пользователя передаются не в claim claims, а в claim groups, в поле Claims укажите groups.

Поле в интерфейсеClaim по умолчаниюОписаниеЧто платформа ожидает получитьПример
SubsubНаименование поля с уникальным именем пользователя (UserID).Уникальное имя пользователяsAMAccountName
ClaimsclaimsНаименование поля с группами пользователя.Список групп AD пользователя
Preferred Usernamepreferred_usernameНаименование поля с именем учётной записи для входа (логин).Логин пользователяsAMAccountName
AudaudНаименование поля с ID клиента.CLIENT_ID сервисаbackend
NamenameНаименование поля с полным именем пользователя.Отображаемое имя пользователяdisplayName или sAMAccountName
EmailemailНаименование поля с email-адресом пользователя с UPN-суффиксом и @.Email пользователяmail

Шаг 4. Включите и сохраните конфигурацию

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

Просмотр и редактирование настроек интеграции

  • После сохранения открывается страница просмотра настроек интеграции.
  • Доступно редактирование всех полей.
  • В целях безопасности секрет клиента не отображается. Чтобы проверить подключение, повторно загрузите секрет.
  • После любых изменений необходимо повторно проверить подключение перед сохранением и/или изменением режима работы провайдера в платформе.

Если в платформе настроено подключение OIDC-провайдера через ssc Модуля управления аутентификацией (shturval-auth), редактирование в интерфейсе недоступно.

В интерфейсе командной строки

Конфигурация внешнего OIDC-провайдера

  1. До подключения внешнего OIDC-провайдера в платформе “Штурвал” подготовьте конфигурацию согласно примеру, использовав ваши значения параметров.
Пример конфигурации внешнего OIDC-провайдера
{
  "name": "<ваше значение параметра>",
  "issuerUrl": "<ваше значение параметра>",
  "codeVerifyMethod": "<ваше значение параметра>",
  "client": {
    "clientId": "<ваше значение параметра>",
    "clientSecret": "<ваше значение параметра>"
  },
  "insecureSkipVerify": "<ваше значение параметра>",
  "caBundle": "<ваше значение параметра>",
  "tokenClaimMapping": {
    "sub": "<ваше значение параметра>",
    "name": "<ваше значение параметра>",
    "email": "<ваше значение параметра>",
    "preferredUsername": "<ваше значение параметра>",
    "claims": "<ваше значение параметра>",
    "aud": "<ваше значение параметра>"
  }
ПараметрОписаниеПример
nameИмя конфигурации (задайте любое)keycloak
issuerUrlURL issuer внешнего OIDC-провайдера. Например, для Keycloak, Issuer находится в разделе Identity providers в блоке OpenID Connect settingshttps://keycloak.ip-XX-XX-XX-XX.shturval.link/realms/shturval
codeVerifyMethodЕсли в Keycloak включен Proof Key for Code Exchange Code (PKCE) Challenge Method, укажите Challenge Method в параметре codeVerifyMethod. Поддерживаются только S256 и plain. Когда Challenge Method не включен, оставьте codeVerifyMethod пустым или не указывайте его.S256
client.clientIdID клиента внешнего OIDC-провайдераshturval_unikeycloak_backend_client_id
client.clientSecretСекрет клиента внешнего OIDC-провайдера. Например, для Keycloak clientSecret находится в разделе Clients на странице клиента, вкладка Credentials в поле Client SecretHG0rxJMKopmAGSasDxDtkJYQH
insecureSkipVerifyУстанавливать ли tls-соединениеtrue
caBundleЗакодированный в base64 корневой CA сертификат внешнего OIDC-провайдера. Добавьте в caBundle полученный сертификат, закодированный в base64.*
tokenClaimMappingСписок соответствий между claim в access_token внешнего OIDC-провайдера и полями, которые ожидает платформа. Укажите значения, если в токене провайдера claim называются иначе-
tokenClaimMapping.subClaim с уникальным идентификатором пользователяsub
tokenClaimMapping.nameClaim с отображаемым именем пользователяname
tokenClaimMapping.emailClaim с email-адресом пользователяemail
tokenClaimMapping.preferredUsernameClaim с именем учётной записи пользователяsub
tokenClaimMapping.claimsClaim со списком групп пользователяgroups
tokenClaimMapping.audClaim с идентификатором клиента, для которого выпущен токенaud

*LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tClvRgdC10YDRgtC40YTQuNC60LDRgiDQstC90LXRiNC90LXQs9C+INGB0LXRgNCy0LjRgdCwINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40LhdCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=

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

Скриншот интерфейса платформы

Скриншот интерфейса: Скриншот интерфейса платформы

  1. Скопируйте конфигурацию, подготовленную на предыдущем шаге. При создании Secret через stringData кодировать конфигурацию в base64 не требуется.

  2. Загрузите и сохраните действующие kubeconfigs кластеров (клиентских кластеров, кластера управления). Kubeconfig потребуется для подключения к кластеру из консоли.

Далее создайте Secret auth-provider в неймспейсе shturval-backend.

Подключение в платформе

Авторизуйтесь в платформе “Штурвал” по kubeconfig, полученному при инсталляции платформы или можно взять его с Control Plane узла платформы /etc/kubernetes/admin.conf.

  1. Подготовьте YAML-файл с манифестом Secret именем auth-provider и лейблом auth.shturval.tech/oidc-provider: "". В Secret задайте требуемые параметры.
apiVersion: v1
kind: Secret
metadata:
  name: auth-provider
  namespace: shturval-backend
  labels:
    auth.shturval.tech/oidc-provider: ""
type: Opaque
stringData:
  active: "true"
  external_idp: |
        {"name":"shturval-keycloak","issuerUrl":"https://keycloak.example.com/realms/shturval","codeVerifyMethod":"plain","client":{"clientId":"shturval_keycloak","clientSecret":"<client-secret>"},"insecureSkipVerify":true,"tokenClaimMapping":{"sub":"sub","name":"name","email":"email","preferredUsername":"sub","claims":"groups","aud":"aud"}}
  skip_internal_auth: "false"
ПараметрОписаниеТип данныхПример
activeВключение Keycloak как внешнего OIDC-провайдераstring"true"
external_idpJSON-конфигурация Keycloak. В примере указана конфигурация с issuerUrl https://keycloak.example.com/realms/shturval, clientId shturval_keycloak, clientSecret <client-secret> и стандартным маппингом claimstring{"name":"shturval-keycloak",...}
skip_internal_authДоступность внутреннего провайдера при включенном Keycloakstring"false"
apiVersion: v1
kind: Secret
metadata:
  name: auth-provider
  namespace: shturval-backend
  labels:
    auth.shturval.tech/oidc-provider: ""
type: Opaque
stringData:
  active: "true"
  external_idp: |
        {"name":"shturval-blitz","issuerUrl":"https://blitz.example.com/realms/shturval","client":{"clientId":"shturval_blitz","clientSecret":"<client-secret>"},"insecureSkipVerify":true,"tokenClaimMapping":{"sub":"sub","name":"name","email":"email","preferredUsername":"sub","claims":"groups","aud":"aud"}}
  skip_internal_auth: "false"
ПараметрОписаниеТип данныхПример
activeВключение Blitz как внешнего OIDC-провайдераstring"true"
external_idpJSON-конфигурация Blitz. В примере указана конфигурация с issuerUrl https://blitz.example.com/realms/shturval, clientId shturval_blitz, clientSecret <client-secret> и стандартным маппингом claimstring{"name":"shturval-blitz",...}
skip_internal_authДоступность внутреннего провайдера при включенном Blitzstring"false"
  1. Создайте в кластере Secret auth-provider
Команда — иллюстрация
kubectl apply -f УКАЖИТЕ-ФАЙЛ-С-МАНИФЕСТОМ-SECRET.yaml

Пример имени файла с манифестом: auth-provider.yaml.

  1. Проверьте, что Secret auth-provider создан в неймспейсе shturval-backend и содержит конфигурацию внешнего OIDC-провайдера.
Команда — иллюстрация
kubectl get secret auth-provider -n shturval-backend -o yaml

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