你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用托管标识
Azure AD 托管标识可用于允许 Azure CycleCloud 管理订阅中的群集(作为使用 服务主体的替代方法)。 还可以将它们分配给 CycleCloud VM,以提供对 Azure 资源(例如存储、Key Vault 或 Azure 容器注册表)的访问权限。
使用托管标识的 CycleCloud VM 权限
CycleCloud 自动执行对 Azure 资源管理器的许多调用,以便管理 HPC 群集。 此自动化需要向 CycleCloud 授予某些权限。 可以通过配置服务主体或向 CycleCloud VM 分配 托管标识 来授予此访问权限。
通常建议使用 系统分配 或 User-Assigned 托管标识 授予这些权限,而不是服务主体。
在分配有托管标识的 Azure VM 上安装 Azure CycleCloud 后,创建云提供商帐户 对话框的行为将略有不同。 托管标识 将新增一个复选框,订阅 ID 将会自动填入主机 VM 的订阅信息。
只需取消选中 托管标识 复选框,仍然可以输入一组标准的身份验证信息。 执行此操作后,标准字段将添加到表单上。 此外,使用单独的 订阅 ID是完全可以接受的;提供的值只是为了方便起见。
为 CycleCloud 创建自定义角色和托管标识
最简单的选择(在具备足够的访问权限时)是将订阅中指定的参与者角色分配给作为 System-Assigned 托管标识的 CycleCloud VM。 但是,参与者角色的特权级别高于 CycleCloud 所需的权限级别。 可以创建 自定义角色 并将其分配给 VM。
此角色涵盖所有 CycleCloud 功能:
{
"assignableScopes": [
"/subscriptions/<SubscriptionId>"
],
"description": "CycleCloud Orchestrator Role",
"permissions": [
{
"actions": [
"Microsoft.Authorization/*/read",
"Microsoft.Authorization/roleAssignments/*",
"Microsoft.Authorization/roleDefinitions/*",
"Microsoft.Commerce/RateCard/read",
"Microsoft.Compute/*/read",
"Microsoft.Compute/availabilitySets/*",
"Microsoft.Compute/disks/*",
"Microsoft.Compute/images/read",
"Microsoft.Compute/locations/usages/read",
"Microsoft.Compute/register/action",
"Microsoft.Compute/skus/read",
"Microsoft.Compute/virtualMachines/*",
"Microsoft.Compute/virtualMachineScaleSets/*",
"Microsoft.Compute/virtualMachineScaleSets/virtualMachines/*",
"Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action",
"Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read",
"Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write",
"Microsoft.Network/*/read",
"Microsoft.Network/locations/*/read",
"Microsoft.Network/networkInterfaces/read",
"Microsoft.Network/networkInterfaces/write",
"Microsoft.Network/networkInterfaces/delete",
"Microsoft.Network/networkInterfaces/join/action",
"Microsoft.Network/networkSecurityGroups/read",
"Microsoft.Network/networkSecurityGroups/write",
"Microsoft.Network/networkSecurityGroups/delete",
"Microsoft.Network/networkSecurityGroups/join/action",
"Microsoft.Network/publicIPAddresses/read",
"Microsoft.Network/publicIPAddresses/write",
"Microsoft.Network/publicIPAddresses/delete",
"Microsoft.Network/publicIPAddresses/join/action",
"Microsoft.Network/register/action",
"Microsoft.Network/virtualNetworks/read",
"Microsoft.Network/virtualNetworks/subnets/read",
"Microsoft.Network/virtualNetworks/subnets/join/action",
"Microsoft.Resources/deployments/read",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Resources/subscriptions/resourceGroups/write",
"Microsoft.Resources/subscriptions/resourceGroups/delete",
"Microsoft.Resources/subscriptions/resourceGroups/resources/read",
"Microsoft.Resources/subscriptions/operationresults/read",
"Microsoft.Storage/*/read",
"Microsoft.Storage/checknameavailability/read",
"Microsoft.Storage/register/action",
"Microsoft.Storage/storageAccounts/read",
"Microsoft.Storage/storageAccounts/listKeys/action",
"Microsoft.Storage/storageAccounts/write"
],
"dataActions": [],
"notActions": [],
"notDataActions": []
}
],
"Name": "CycleCloud <SubscriptionId>",
"roleType": "CustomRole",
"type": "Microsoft.Authorization/roleDefinitions"
}
请确保将 <SubscriptionId>
替换为订阅 ID。此角色的范围限定为订阅,但可以限定为单个资源组(如果首选)。 另请注意,该名称必须对租户是唯一的。
重要
使用自定义角色需要Microsoft Entra ID P1 许可证。 若要找到合适的许可证,请参阅 Microsoft Entra 计划和定价。
可选权限
如果要将 CycleCloud 的范围限定为每个群集使用单个资源组,则可以从 actions
中删除以下内容:
"Microsoft.Resources/subscriptions/resourceGroups/write",
"Microsoft.Resources/subscriptions/resourceGroups/delete",
如果不使用 CycleCloud 为其在群集中创建的 VM 分配托管标识,则可以从 actions
中删除以下内容:
"Microsoft.Authorization/*/read",
"Microsoft.Authorization/roleAssignments/*",
"Microsoft.Authorization/roleDefinitions/*",
警告
CycleCloud 的未来版本需要能够将托管标识分配给 VM,因此不建议删除这些权限。
创建角色
可以通过 Azure CLI 从角色定义创建角色。 使用此角色在 Azure 租户中创建角色定义。 一旦租户中已存在该角色,将该角色分配为具备适当作用域的标识。
下面是使用 Azure CLI 的基本流。
# Create a custom role definition
az role definition create --role-definition role.json
# Create user identity
az identity create --name <name>
# Assign the custom role to the identity with proper scope
az role assignment create --role <CycleCloudRole> --assignee-object-id <identity-id> --scope <subscription>
现在,自定义角色已分配并关联到标识,并可用于虚拟机。
向具有托管标识的群集 VM 分配角色
群集节点通常需要访问 Azure 资源。 例如,许多群集需要访问 Azure 存储、Key Vault 或 Azure 容器注册表才能运行其工作负荷。 强烈建议使用 User-Assigned 托管标识 传递所需的访问凭据,而不是通过群集配置将机密/凭据传递到节点。
User-Assigned 托管身份可以通过在群集 VM 上使用 Azure.Identities
节点属性进行配置。
Azure.Identities
属性的值是由逗号分隔的托管标识资源 ID 字符串列表。
[cluster sample]
...
[[node defaults]]
...
Azure.Identities = $ManagedServiceIdentity
...
[parameters Required Settings]
...
[[parameter ManagedServiceIdentity]]
ParameterType = Azure.ManagedIdentity
Label = MSI Identity
Description = The resource ID of the Managed Service Identity to apply to the nodes
...