你当前正在访问 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
...