Azure Kubernetes 舰队管理器使用 Microsoft Entra 身份来访问 Azure 资源(例如 Azure 虚拟网络)或管理长时间运行的后台活动(例如多集群自动升级)。
可以使用托管标识授权从舰队管理器访问任何支持 Microsoft Entra 授权的服务,而无需管理凭据或将其包含在代码中。 为托管标识分配 Azure 基于角色的访问控制 (Azure RBAC) 角色,以授予其对 Azure 中特定资源的权限。 有关 Azure RBAC 的详细信息,请参阅什么是 Azure 基于角色的访问控制 (Azure RBAC)?。
本文介绍如何在新的或现有的 Azure Kubernetes 舰队管理器上启用以下类型的托管标识:
- 系统分配的托管标识。 系统分配的托管标识与单个 Azure 资源(例如舰队管理器)相关联。 它仅适用于舰队管理器的生命周期。
- 用户分配的托管标识。 用户分配的托管标识是一个独立的 Azure 资源,舰队管理器可以使用它来授权访问其他 Azure 服务。 它独立于舰队管理器存在,可供多个 Azure 资源使用。
若要了解托管标识的详细信息,请参阅 Azure 资源托管标识。
在您开始之前
如果打算使用 Azure CLI,请确保已安装 Azure CLI 2.75.0 或更高版本。 若要查找版本,请运行 az --version。 如果需要进行安装或升级,请参阅安装 Azure CLI。
在运行本文中的 Azure CLI 示例之前,请先调用 az account set 命令并传入订阅 ID,将订阅设置为当前活动订阅。
az account set --subscription <subscription-id>
如果你没有 Azure 资源组,也可以通过调用 az group create 命令创建一个。
az group create \
--name myResourceGroup \
--location westus2
启用系统分配的托管标识
系统分配的托管标识是与舰队管理器或其他 Azure 资源相关联的标识。 系统分配的托管标识与舰队管理器的生命周期相关联。 删除舰队管理器时,也会删除系统分配的托管标识。
舰队管理器可以使用系统分配的托管标识来授权访问 Azure 中运行的其他资源,并执行长时间运行的后台进程。 可以将 Azure RBAC 角色分配到系统分配的托管标识,以授予舰队管理器访问特定资源的权限。 例如,如果舰队管理器需要管理网络资源,则可以将系统分配的托管标识分配给授予这些权限的 Azure RBAC 角色。
在新的舰队管理器上启用系统分配的托管标识
在 Azure 门户中创建新的舰队管理器时,系统会自动创建系统分配的托管标识。
可以通过检查舰队管理器的“设置”部分中的“标识”边栏选项卡来验证是否已启用系统分配的托管标识。 状态为“开启”,对象(主体)ID 已填充(图中未显示)。
使用 az fleet create 命令创建一个舰队管理器,传递 --enable-managed-identity 参数以启用系统分配的托管标识。
az fleet create \
--resource-group myResourceGroup \
--name myFleetName \
--location westus2 \
--enable-managed-identity
命令输出指示标识类型为 SystemAssigned,并包括主体 ID 和租户。
{
"eTag": "\"13003f4b-0000-1b00-0000-68900c3c0000\"",
"hubProfile": null,
"id": "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerService/fleets/myFleetName",
"identity": {
"principalId": "<principal-id>",
"tenantId": "<tenant-id>",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
"location": "westus2",
"name": "flt-mgr-02",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"status": {
"lastOperationError": null,
"lastOperationId": "d31e866c-a3d3-46ab-8a97-094bc4672d35"
},
"systemData": {
"createdAt": "2025-08-04T01:26:17.588030+00:00",
"createdBy": "",
"createdByType": "User",
"lastModifiedAt": "2025-08-04T01:26:17.588030+00:00",
"lastModifiedBy": "",
"lastModifiedByType": "User"
},
"tags": null,
"type": "Microsoft.ContainerService/fleets"
}
更新现有舰队管理器以使用系统分配的托管标识
可以使用舰队管理器“设置”部分中的“标识”边栏选项卡来管理舰队管理器托管标识。
通过将“系统分配”状态设置为“开启”并选择“保存”来启用系统分配的托管标识。
在确认对话框中选择“是”。
片刻之后,状态变为“开启”,并且对象(主体)ID 已填充(图中未显示)。
要将现有的舰队管理器更新为使用系统分配的托管标识,请运行 az fleet update 命令,并将 --enable-managed-identity 参数设置为 true。
az fleet update \
--resource-group myResourceGroup \
--name myFleetName \
--enable-managed-identity true
命令输出指示标识类型为 SystemAssigned,并包括主体 ID 和租户。
{
"eTag": "\"13003f4b-0000-1b00-0000-68900c3c0000\"",
"hubProfile": null,
"id": "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerService/fleets/myFleetName",
"identity": {
"principalId": "<principal-id>",
"tenantId": "<tenant-id>",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
"location": "westus2",
"name": "flt-mgr-02",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"status": {
"lastOperationError": null,
"lastOperationId": "d31e866c-a3d3-46ab-8a97-094bc4672d35"
},
"systemData": {
"createdAt": "2025-08-04T01:26:17.588030+00:00",
"createdBy": "",
"createdByType": "User",
"lastModifiedAt": "2025-08-04T01:26:17.588030+00:00",
"lastModifiedBy": "",
"lastModifiedByType": "User"
},
"tags": null,
"type": "Microsoft.ContainerService/fleets"
}
为系统分配的托管标识添加角色分配
可以将 Azure RBAC 角色分配到系统分配的托管标识,以授予舰队管理器对另一个 Azure 资源的权限。 Azure RBAC 支持指定权限级别的内置和自定义角色定义。 有关分配 Azure RBAC 角色的详细信息,请参阅分配 Azure 角色的步骤。
将 Azure RBAC 角色分配到托管标识时,必须定义该角色的范围。 一般情况下,最佳做法是将角色的范围限制为托管标识所需的最低特权。 有关确定 Azure RBAC 角色范围的详细信息,请参阅了解 Azure RBAC 的范围。
注释
为舰队管理器托管标识授予的权限,可能需要最长 60 分钟才能生效。
在舰队管理器的“标识”边栏选项卡中选择“Azure 角色分配”选项卡。 此操作将打开“Azure 角色分配”窗格。
选择“添加角色分配”以打开“添加角色分配”窗格,然后输入:
选择“保存”以将角色分配给舰队管理器的系统分配的托管标识。
获取系统分配的托管标识的主体 ID
若要将 Azure RBAC 角色分配到舰队管理器的系统分配托管标识,首先需要获取该托管标识的主体 ID。 通过调用 az fleet show 命令获取舰队管理器的系统分配托管标识的主体 ID。
# Get the principal ID for a system-assigned managed identity.
CLIENT_ID=$(az fleet show \
--name myFleetName \
--resource-group myResourceGroup \
--query identity.principalId \
--output tsv)
将 Azure RBAC 角色分配到系统分配的托管标识
若要向系统分配的托管标识授予对 Azure 中资源的权限,请调用 az role assignment create 命令以将 Azure RBAC 角色分配到托管标识。
例如,使用 az role assignment create 命令在自定义资源组上分配 Network Contributor 角色。 对于 --scope 参数,请提供舰队管理器资源组的资源 ID。
az role assignment create \
--assignee $CLIENT_ID \
--role "Network Contributor" \
--scope "<fleet-manager-resource-group-id>"
启用用户分配的托管标识
用户分配的托管标识是独立的 Azure 资源。 使用用户分配的托管标识创建舰队管理器时,用户分配的托管标识资源必须在创建舰队管理器之前就已存在。
创建用户分配的托管标识
如果你没有用户分配的托管标识资源,请使用 Azure 门户或 Azure CLI 创建一个。
创建用户分配的托管标识。
如果你没有用户分配的托管标识资源,请使用 az identity create 命令创建一个。
az identity create \
--name myIdentity \
--resource-group myResourceGroup
输出应与下面的示例输出类似:
{
"clientId": "<client-id>",
"clientSecretUrl": "<clientSecretUrl>",
"id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity",
"location": "westus2",
"name": "myIdentity",
"principalId": "<principal-id>",
"resourceGroup": "myResourceGroup",
"tags": {},
"tenantId": "<tenant-id>",
"type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}
获取用户分配的托管标识的主体 ID
若要获取用户分配的托管标识的主体 ID,请调用 az Identity Show 并查询 principalId 属性:
CLIENT_ID=$(az identity show \
--name myIdentity \
--resource-group myResourceGroup \
--query principalId \
--output tsv)
获取用户分配的托管标识的资源 ID
若要创建具有用户分配的托管标识的舰队管理器,需要获取新托管标识的资源 ID。 若要获取用户分配的托管标识的资源 ID,请调用 az identity show 并查询 id 属性:
RESOURCE_ID=$(az identity show \
--name myIdentity \
--resource-group myResourceGroup \
--query id \
--output tsv)
将 Azure RBAC 角色分配给用户分配的托管标识
在创建舰队管理器之前,请为托管标识添加角色分配。
注释
为舰队管理器托管标识授予的权限,可能需要最长 60 分钟才能生效。
导航到托管标识资源。
在托管标识资源的左侧导航栏中选择“Azure 角色分配”选项卡。 此操作将打开“Azure 角色分配”窗格。
选择“添加角色分配”以打开“添加角色分配”窗格,然后输入:
选择“保存”,将角色分配给托管标识。
使用 az role assignment create 命令将角色分配给用户分配的托管标识。
以下示例分配了“网络参与者”角色,以向标识授予访问网络资源的权限。 角色分配的范围限定为舰队管理器资源组。
az role assignment create \
--assignee $CLIENT_ID \
--role "Network Contributor" \
--scope "<fleet-manager-resource-group-id>"
使用用户分配的托管标识创建舰队管理器
注释
Azure 美国政府云中的 USDOD Central、USDOD East 和 USGov Iowa 区域不支持创建具有用户分配的托管标识的舰队管理器。
在 Azure 门户中,无法使用用户分配的托管标识创建舰队管理器。 在创建舰队管理器之后,可以将其标识类型更改为用户分配,或者使用 Azure CLI 来完成此操作。
使用带有 --assign-identity 参数的 az fleet create 命令创建具有用户分配的托管标识的舰队管理器。 传入用户分配的托管标识的资源 ID:
az fleet create \
--resource-group myResourceGroup \
--name myFleetName \
--assign-identity $RESOURCE_ID
更新现有舰队管理器以使用用户分配的托管标识
可以使用舰队管理器“设置”部分中的“标识”边栏选项卡来管理舰队管理器托管标识。
选择“用户分配”,切换到用户分配的托管标识选项卡。
选择“+ 添加”,打开“添加用户分配的托管标识”窗格。
-
订阅 - 选择包含要使用的用户分配的托管标识的 Azure 订阅。
-
用户分配的托管标识 - 搜索要使用的用户分配的托管标识。
选择“添加”,将用户分配的托管标识添加到舰队管理器。
片刻之后,用户分配的列表会发生变化,其中列出了用户分配的托管标识。
若要更新现有舰队管理器以使用用户分配的托管标识,请调用 az fleet update 命令。 包含 --assign-identity 参数并传入用户分配的托管标识的资源 ID:
az fleet update \
--resource-group myResourceGroup \
--name myFleetName \
--enable-managed-identity \
--assign-identity $RESOURCE_ID
成功更新舰队管理器以使用用户分配的托管标识后,输出应如以下示例所示:
"identity": {
"principalId": null,
"tenantId": null,
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
"clientId": "<client-id>",
"principalId": "<principal-id>"
}
}
},
确定正在使用的托管标识的类型
可以使用舰队管理器“设置”部分中的“标识”边栏选项卡来检查舰队管理器托管标识设置。
检查“系统分配”和“用户分配”部分,以确定启用了哪种类型的托管标识。
若要确定现有舰队管理器正在使用哪种类型的托管标识,请调用 az fleet show 命令并查询标识的 type 属性。
az fleet show \
--name myFleetName \
--resource-group myResourceGroup \
--query identity.type \
--output tsv
响应为 SystemAssigned 或 UserAssigned。
后续步骤