为 Azure Kubernetes 服务 (AKS) 群集更新或轮换凭据

使用服务主体创建的 AKS 群集具有为期一年的有效期。 在有效期即将结束时,你可以重置凭据来将服务主体延长额外的一段时间。 作为已定义安全策略的一部分,还可能要更新或轮换凭据。 与 Microsoft Entra ID(作为身份验证提供程序)集成的 AKS 群集有两个标识:Microsoft Entra 服务器应用和 Microsoft Entra 客户端应用。 本文详细介绍如何更新 AKS 群集的服务主体和 Microsoft Entra 凭据。

注意

或者,可以使用托管标识而不是服务主体来获得权限。 托管标识不需要更新或轮换。 有关详细信息,请参阅使用托管标识

准备阶段

需要安装并配置 Azure CLI 2.0.65 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

为 AKS 群集更新或创建新的服务主体

要为 AKS 群集更新凭据时,可以选择以下任一操作:

  • 为现有服务主体更新凭据。
  • 创建新服务主体并更新群集以使用这些新凭据。

警告

如果选择创建新的服务主体,请等待大约 30 分钟,让服务主体权限在所有区域中进行传播。 更新大型 AKS 群集以使用这些凭据可能需要很长时间才能完成。

检查服务主体的到期日期

若要检查服务主体的到期日期,请使用 az ad app credential list 命令。 以下示例使用 az aks show 命令获取 $RESOURCE_GROUP_NAME 资源组中 $CLUSTER_NAME 群集的服务主体 ID。 服务主体 ID 设置为名为“SP_ID”的变量。

SP_ID=$(az aks show --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME \
    --query servicePrincipalProfile.clientId -o tsv)
az ad app credential list --id "$SP_ID" --query "[].endDateTime" -o tsv

重置现有的服务主体凭据

若要为现有服务主体更新凭据,请使用 az aks show 命令获取群集的服务主体 ID。 以下示例获取 $RESOURCE_GROUP_NAME 资源组中 $CLUSTER_NAME 群集的 ID。 名为“SP_ID”的变量存储在下一步使用的服务主体 ID。 这些命令使用 Bash 命令语言。

警告

在使用 Azure 虚拟机规模集的 AKS 群集上重置群集凭据时,将执行节点映像升级以使用新凭据信息更新节点。

SP_ID=$(az aks show --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME \
    --query servicePrincipalProfile.clientId -o tsv)

使用包含服务主体 ID 的变量 SP_ID 通过 az ad app credential reset 命令重置凭据。 以下示例使 Azure 平台能够为服务主体生成新的安全机密,并将其存储为名为“SP_SECRET”的变量。

SP_SECRET=$(az ad app credential reset --id "$SP_ID" --query password -o tsv)

接下来,使用服务主体凭据更新 AKS 群集。 若要更新 AKS 群集上的服务主体,必须执行此步骤。

创建新服务主体

注意

如果在上一部分更新了现有的服务主体凭据,请跳过此部分,改为使用服务主体凭据更新 AKS 群集

若要创建服务主体并将 AKS 群集更新为使用新凭据,请使用 az ad sp create-for-rbac 命令。

az ad sp create-for-rbac --role Contributor --scopes /subscriptions/$SUBSCRIPTION_ID

输出类似于以下示例输出。 记下自己的 appIdpassword,以便在下一步使用它们。

{
  "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "name": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

使用运行 az ad sp create-for-rbac 命令后获得的输出为服务主体 ID 和客户端机密定义变量。 SP_ID 是 appId,SP_SECRET 是 password。

SP_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SP_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

接下来,使用新的服务主体凭据更新 AKS 群集。 此步骤是使用新的服务主体凭据更新 AKS 群集所必需的。

使用服务主体凭据更新 AKS 群集

重要

对于大型群集,使用新服务主体更新 AKS 群集可能需要很长时间才能完成。 请考虑查看和自定义节点激增升级设置,以最大程度地减少更新期间的中断。 对于小型和中型群集,需要几分钟时间才能在群集中更新新凭据。

通过运行 az aks update-credentials 命令,使用新的或现有的凭据更新 AKS 群集。

az aks update-credentials \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --reset-service-principal \
    --service-principal "$SP_ID" \
    --client-secret "${SP_SECRET}"

使用新的 Microsoft Entra 应用程序凭据更新 AKS 群集

可以按照 Microsoft Entra 集成步骤创建新的 Microsoft Entra 服务器和客户端应用程序,或按照与服务主体重置相同的方法重置现有的 Microsoft Entra 应用程序。 之后,你需要使用带有 --reset-aad 变量的 az aks update-credentials 命令更新群集 Microsoft Entra 应用程序凭据。

az aks update-credentials \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --reset-aad \
    --aad-server-app-id $SERVER_APPLICATION_ID \
    --aad-server-app-secret $SERVER_APPLICATION_SECRET \
    --aad-client-app-id $CLIENT_APPLICATION_ID

后续步骤

本文介绍了如何更新或轮换服务主体和 Microsoft Entra 应用程序凭据。 若要详细了解如何将托管标识用于 AKS 群集中的工作负荷,请参阅 AKS 中的身份验证和授权的最佳做法