你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为 Azure Red Hat OpenShift 群集配置Microsoft Entra 身份验证

本文使用 Azure CLI 为 Azure Red Hat OpenShift 群集设置Microsoft Entra 身份验证。 创建用于创建 OAuth 回调 URL、应用程序注册和客户端密码的命令中使用的变量,并更新应用程序的权限。

先决条件

  • 现有的 Azure Red Hat OpenShift 群集。 如果没有群集,请参阅 创建新群集
  • 计算机上安装了 Azure CLI 2.30.0 或更高版本。 使用 az --version 查找已安装的 Azure CLI 版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。 还可以将 Azure Cloud Shell 与 Bash 配合使用来运行命令。
  • 在计算机上或 Bash Cloud Shell 中安装的 OpenShift CLI。 有关详细信息,请参阅 安装 OpenShift CLI

创建变量

检索用于配置 Microsoft Entra 应用程序的特定于群集的 URL。

设置资源组和群集名称的变量。 替换为 <resourceGroupName> 资源组的名称和 <aroClusterName> 群集的名称。

resourceGroup=<resourceGroupName>
aroCluster=<aroClusterName>

创建其他命令中使用的以下变量以完成本文中的步骤。

domain=$(az aro show --resource-group $resourceGroup --name $aroCluster --query clusterProfile.domain --output tsv)
location=$(az aro show --resource-group $resourceGroup --name $aroCluster --query location --output tsv)
apiServer=$(az aro show --resource-group $resourceGroup --name $aroCluster --query apiserverProfile.url --output tsv)
webConsole=$(az aro show --resource-group $resourceGroup --name $aroCluster --query consoleProfile.url --output tsv)

创建群集的 OAuth 回调 URL 并将其存储在变量 oauthCallbackURL中。 entraID回调 URL 的OAuth末尾必须与稍后在 oidc.yaml 文件中创建的标识提供者名称匹配OAuth

如果使用自定义域,则 oauthCallbackURL 其格式取决于该格式。

  • 如果有类似自定义域 contoso.com,请运行以下命令。

    oauthCallbackURL=https://oauth-openshift.apps.$domain/oauth2callback/entraID
    
  • 如果不使用自定义域, $domain 则为前面 $location.aroapp.io八个字符的字母数字字符串。

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

创建用于身份验证的 Microsoft Entra 应用程序

创建Microsoft Entra 应用程序并设置应用程序的客户端密码。

appId=$(az ad app create \
  --display-name aro-auth \
  --web-redirect-uris $oauthCallbackURL \
  --query appId --output tsv)

clientSecret=$(az ad app credential reset --id $appId --query password --output tsv)

这些值存储在变量中,并 clientSecret 显示命令输出包含凭据的控制台消息。 本文稍后使用该值,完成后,可以使用命令清除变量 clientSecret=""

有关创建应用和凭据的命令的详细信息,请参阅 az ad app createaz ad app credential reset

检索拥有应用程序的订阅的租户 ID。

tenantId=$(az account show --query tenantId --output tsv)

创建清单文件以定义要包含在 ID 令牌中的可选声明

应用程序开发人员可以在 Microsoft Entra 应用程序中使用可选声明来指定要在发送到其应用程序的令牌中包含哪些声明。

您可以使用可选声明来:

  • 选择其他声明,将它们包含在应用程序的令牌中。
  • 更改 Microsoft Entra ID 在令牌中返回的某些声明的行为。
  • 为您的应用程序添加和访问自定义声明。

将 OpenShift 配置为使用 email 声明并回退以 upn 通过添加 upn Microsoft Entra ID 返回的 ID 令牌的一部分来设置首选用户名。

创建 manifest.json 文件以配置 Microsoft Entra ID 应用程序

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

使用清单更新 Microsoft Entra 应用程序的 optionalClaims

若要使用清单文件并更新应用程序的 optionalClaims清单文件,请运行以下命令。

az ad app update \
  --id $appId \
  --optional-claims @manifest.json

更新 Microsoft Entra 应用程序范围权限

为了能够从 Microsoft Entra ID 读取用户信息,我们需要定义适当的范围。

添加 Microsoft Graph User.Read 范围的权限,以启用登录和读取用户配置文件。 有关详细信息,请参阅 User.Read

az ad app permission add \
  --api 00000003-0000-0000-c000-000000000000 \
  --api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope \
  --id $appId

可以忽略此消息以授予许可,除非你作为此Microsoft Entra ID 的全局管理员进行身份验证。 当标准域用户首次使用其Microsoft Entra 凭据登录到群集时,系统会要求他们授予同意。

将用户和组分配到群集(可选)

默认情况下,在 Microsoft Entra 租户中注册的应用程序可供该租户中成功完成身份验证的所有用户使用。 租户管理员和开发人员可以通过 Microsoft Entra ID 将应用限制为仅供租户中特定的一组用户或安全组使用。

按照Microsoft Entra 文档的说明将 Microsoft Entra 应用限制为一组用户

配置 OpenShift OpenID 身份验证

检索 kubeadmin 凭据。 请运行以下命令,找到 kubeadmin 用户的密码。

kubeadminPassword=$(az aro list-credentials \
  --name $aroCluster \
  --resource-group $resourceGroup \
  --query kubeadminPassword --output tsv)

使用以下命令登录到 OpenShift 群集的 API 服务器。

oc login $apiServer --username kubeadmin --password $kubeadminPassword

创建 OpenShift 机密来存储 Microsoft Entra 应用程序机密。

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

创建 一个 oidc.yaml 文件,以针对 Microsoft Entra ID 配置 OpenShift OpenID 身份验证。

cat > oidc.yaml<< EOF
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: entraID
    mappingMethod: claim
    type: OpenID
    openID:
      clientID: $appId
      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/$tenantId
EOF

将配置应用于群集。

oc apply -f oidc.yaml

会收到如下示例所示的响应。

oauth.config.openshift.io/cluster configured

使用 Microsoft Entra ID 验证登录

注销 OpenShift Web 控制台并再次登录,你将看到使用 entraID 登录的新选项。 可能需要等待几分钟,选项才可用。

显示用于登录到 Azure Red Hat OpenShift 群集的Microsoft Entra ID 选项的屏幕截图。