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

为 Azure Red Hat OpenShift 4 群集配置 Microsoft Entra 身份验证(CLI)

如果选择在本地安装并使用 CLI,本文要求运行 Azure CLI 2.30.0 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

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

设置资源组和群集名称的变量。

将 <resource_group> 替换为你的资源组名称,将 <aro_cluster> 替换为你的群集名称。

resource_group=<resource_group>
aro_cluster=<aro_cluster>

构造群集的 OAuth 回叫 URL,并将其存储在变量 oauthCallbackURL 中

注意

OAuth 回叫 URL 中的 AAD 部分应与稍后设置的 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
    

注意

OAuth 回叫 URL 中的 AAD 部分应与稍后设置的 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)

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

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

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

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

使用可选声明可以:

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

我们将 OpenShift 配置为使用 email 声明并回退以 upn 通过添加 upn Microsoft Entra ID 返回的 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 应用程序的 optionalClaims

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

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

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

为 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

注意

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

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

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

按照 Microsoft Entra 文档中的说明将 用户和组分配到应用

配置 OpenShift OpenID 身份验证

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

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

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

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 文件,以针对 Microsoft Entra ID 配置 OpenShift OpenID 身份验证。

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 ID 验证登录

如果现在注销 OpenShift Web 控制台并尝试再次登录,你将看到一个新选项,用于使用 Microsoft Entra ID 登录。 你可能需要等待几分钟。

Log in screen with Microsoft Entra option