你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文使用 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 create 和 az 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 登录的新选项。 可能需要等待几分钟,选项才可用。