Настройка проверки подлинности Microsoft Entra для кластера Azure Red Hat OpenShift 4 (CLI)

Если вы решили установить и использовать интерфейс командной строки локально, в этой статье необходимо запустить Azure CLI версии 2.30.0 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Получите URL-адреса, относящиеся к кластеру, которые будут использоваться для настройки приложения Microsoft Entra.

Задайте переменные для группы ресурсов и имени кластера.

Замените <resource_group> именем группы ресурсов и< aro_cluster> именем кластера.

resource_group=<resource_group>
aro_cluster=<aro_cluster>

Создайте URL-адрес обратного вызова OAuth кластера и сохраните его в переменной oauthCallbackURL.

Примечание.

Раздел AAD в URL-адресе обратного вызова OAuth должен соответствовать имени поставщика удостоверений OAuth, которое будет настроено позже.

domain=$(az aro show -g $resource_group -n $aro_cluster --query clusterProfile.domain -o tsv)
location=$(az aro show -g $resource_group -n $aro_cluster --query location -o tsv)
apiServer=$(az aro show -g $resource_group -n $aro_cluster --query apiserverProfile.url -o tsv)
webConsole=$(az aro show -g $resource_group -n $aro_cluster --query consoleProfile.url -o tsv)

Формат oauthCallbackURL немного отличается от личных доменов:

  • Если используется личный домен, например contoso.com, выполните указанную ниже команду.

    oauthCallbackURL=https://oauth-openshift.apps.$domain/oauth2callback/AAD
    
  • Если вы не используете личный домен, то $domain будет строкой alnum из восьми символов, расширенной с помощью $location.aroapp.io.

    oauthCallbackURL=https://oauth-openshift.apps.$domain.$location.aroapp.io/oauth2callback/AAD
    

Примечание.

Раздел AAD в URL-адресе обратного вызова OAuth должен соответствовать имени поставщика удостоверений OAuth, которое будет настроено позже.

Создание приложения Microsoft Entra для проверки подлинности

Замените <client_secret> безопасным паролем для приложения.

client_secret=<client_secret>

Создайте приложение Microsoft Entra и получите созданный идентификатор приложения.

app_id=$(az ad app create \
  --query appId -o tsv \
  --display-name aro-auth \
  --reply-urls $oauthCallbackURL \
  --password $client_secret)

Получите идентификатор клиента подписки, которой принадлежит приложение.

tenant_id=$(az account show --query tenantId -o tsv)

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

Разработчики приложений могут использовать необязательные утверждения в своих приложениях Microsoft Entra, чтобы указать утверждения, которые они хотят в токенах, отправленных в приложение.

Необязательные утверждения можно использовать, чтобы:

  • выбрать дополнительные утверждения для включения в токены для приложения;
  • Измените поведение определенных утверждений, возвращаемых идентификатором Microsoft Entra в токенах.
  • добавлять пользовательские утверждения для приложения и обращаться к ним.

Мы настроим OpenShift использовать email утверждение и вернуться к upn настройке предпочтительного имени пользователя, добавив upn его как часть маркера идентификатора, возвращаемого идентификатором Microsoft Entra ID.

Создайте файл manifest.json для настройки приложения Microsoft Entra.

cat > manifest.json<< EOF
[{
  "name": "upn",
  "source": null,
  "essential": false,
  "additionalProperties": []
},
{
"name": "email",
  "source": null,
  "essential": false,
  "additionalProperties": []
}]
EOF

Обновление необязательных выражений приложения Microsoft Entra с помощью манифеста

az ad app update \
  --set optionalClaims.idToken=@manifest.json \
  --id $app_id

Обновление разрешений приложения Microsoft Entra область

Чтобы иметь возможность считывать сведения о пользователе из идентификатора Microsoft Entra, необходимо определить правильные область.

Добавьте разрешение для области Azure Active Directory Graph.User.Read, чтобы обеспечить вход в профиль пользователя и его чтение.

az ad app permission add \
 --api 00000002-0000-0000-c000-000000000000 \
 --api-permissions 311a71cc-e848-46a1-bdf8-97ff7156d8e6=Scope \
 --id $app_id

Примечание.

Вы можете безопасно игнорировать сообщение, чтобы предоставить согласие, если вы не прошли проверку подлинности в качестве глобального Администратор istrator для этого идентификатора Microsoft Entra. Пользователям домена уровня "Стандартный" будет предложено предоставить согласие при первом входе в кластер с помощью учетных данных Microsoft Entra.

Назначение пользователей и групп для кластера (необязательно)

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

Следуйте инструкциям в документации Microsoft Entra, чтобы назначить пользователей и группы приложению.

Настройка проверки подлинности OpenShift OpenID

Получите учетные данные kubeadmin. Выполните следующую команду, чтобы найти пароль для пользователя kubeadmin.

kubeadmin_password=$(az aro list-credentials \
  --name $aro_cluster \
  --resource-group $resource_group \
  --query kubeadminPassword --output tsv)

Войдите на сервер API кластера OpenShift с помощью указанной ниже команды.

oc login $apiServer -u kubeadmin -p $kubeadmin_password

Создайте секрет OpenShift для хранения секрета приложения Microsoft Entra.

oc create secret generic openid-client-secret-azuread \
  --namespace openshift-config \
  --from-literal=clientSecret=$client_secret

Создайте файл oidc.yaml, чтобы настроить проверку подлинности OpenShift OpenID для идентификатора Microsoft Entra ID.

cat > oidc.yaml<< EOF
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: AAD
    mappingMethod: claim
    type: OpenID
    openID:
      clientID: $app_id
      clientSecret:
        name: openid-client-secret-azuread
      extraScopes:
      - email
      - profile
      extraAuthorizeParameters:
        include_granted_scopes: "true"
      claims:
        preferredUsername:
        - email
        - upn
        name:
        - name
        email:
        - email
      issuer: https://login.microsoftonline.com/$tenant_id
EOF

Примените конфигурацию для кластера.

oc apply -f oidc.yaml

Вы получите ответ, аналогичный приведенному ниже.

oauth.config.openshift.io/cluster configured

Проверка входа с помощью идентификатора Microsoft Entra

Если вы теперь выйдите из веб-консоли OpenShift и попытаетесь войти еще раз, вы увидите новый параметр для входа с помощью идентификатора Microsoft Entra. Потребуется подождать несколько минут.

Log in screen with Microsoft Entra option