Поделиться через


Использование управляемых удостоверений

Управляемые удостоверения Azure AD могут использоваться, чтобы Azure CycleCloud мог управлять кластерами в вашей подписке (в качестве альтернативы использованию субъекта-службы ). Они также могут быть назначены виртуальным машинам CycleCloud для предоставления доступа к ресурсам Azure (например, хранилищу ключей или реестрам контейнеров Azure).

Разрешения виртуальных машин CycleCloud с управляемой идентификацией

CycleCloud автоматизирует множество вызовов в Azure Resource Manager для управления кластерами HPC. Данная автоматизация требует предоставления определённых разрешений CycleCloud. Этот доступ можно предоставить в CycleCloud, настроив служебный принципал или назначив управляемое удостоверение виртуальной машине CycleCloud.

Обычно рекомендуется использовать либо назначенную системой, либо управляемое удостоверениеUser-Assigned для предоставления этих разрешений, а не служебный принципал.

При установке Azure CycleCloud на виртуальной машине Azure с назначенным на нее управляемым идентификатором, диалоговое окно "Добавление подписки" будет вести себя немного иначе. Параметр аутентификации с помощью управляемой учетной записи будет включен и по умолчанию выбран, а идентификатор подписки будет автоматически заполнен подпиской виртуальной машины узла.

Добавить управляемые ИД подписки

Добавить управляемые ИД подписки

По-прежнему можно ввести стандартный набор учетных данных, просто выбрав параметр проверки подлинности регистрации приложений . После этого в форму будут добавлены стандартные поля. Кроме того, можно использовать отдельный идентификатор подписки; данное значение предназначено исключительно для удобства.

При использовании управляемого удостоверения, назначенного системой, поле ClientID можно оставить пустым. Однако при использовании CycleCloud c управляемым удостоверением User-Assigned, для ClientID должно быть установлено значение ClientID конкретного управляемого удостоверения, используемого для оркестрации кластера.

Доступ к шкафчику для хранения

Помимо использования управляемого удостоверения для оркестрации кластеров на виртуальной машине CycleCloud, CycleCloud также можно настроить для назначения управляемого удостоверения User-Assigned кластерам для обеспечения доступа к учетной записи хранения или Locker с узлов кластера вместо использования маркеров SAS, созданных на основе общего ключа доступа учетной записи хранения.

Чтобы настроить кластеры для использования управляемого удостоверения User-Assigned вместо ключа общего доступа, рекомендуется создать выделенное User-Assigned управляемое удостоверение с доступом для чтения данных блоб-хранилища на уровне учетной записи хранения. Сначала создайте учетную запись хранения и управляемое удостоверение User-Assigned в подписке Azure. Затем в разделе конфигурации хранилища в диалоговом окне "Добавить подписку" выберите новое управляемое удостоверение из раскрывающегося списка Locker Identity и учетную запись хранения из раскрывающегося списка "Учетная запись хранения".

Создайте настраиваемую роль и управляемое удостоверение для CycleCloud

Самый простой вариант (с достаточными правами доступа) — назначить роли Contributor и Storage Blob Data Contributor подписке для виртуальной машины CycleCloud в качестве управляемого удостоверения System-Assigned. Однако роль Contributor имеет более высокий уровень привилегий, чем требуется для CycleCloud. Можно создать и назначить виртуальной машине настраиваемую роль. Аналогичным образом, роль может быть назначена на уровне учетной записи хранения, а не на уровне подписки, Storage Blob Data Contributor если учетная запись хранения уже создана.

Эта роль охватывает все функции 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/*/read",
          "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/blobServices/containers/delete",
          "Microsoft.Storage/storageAccounts/blobServices/containers/read",
          "Microsoft.Storage/storageAccounts/blobServices/containers/write",
          "Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action",
          "Microsoft.Storage/storageAccounts/read",
          "Microsoft.Storage/storageAccounts/listKeys/action",
          "Microsoft.Storage/storageAccounts/write"
        ],
        "dataActions": [
          "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete",
          "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read",
          "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write",
          "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/move/action",
          "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action"
        ],
        "notActions": [],
        "notDataActions": []
      }
    ],
    "Name": "CycleCloud <SubscriptionId>",
    "roleType": "CustomRole",
    "type": "Microsoft.Authorization/roleDefinitions"
}

Обязательно замените <SubscriptionId> на ваш идентификатор подписки. Эта роль применяется к подписке, но при желании её можно применять к одной группе ресурсов. Обратите внимание также, что имя должно быть уникальным для клиента.

Это важно

Для использования настраиваемой роли требуется лицензия Microsoft Entra ID P1. Чтобы найти подходящую лицензию для ваших требований, ознакомьтесь с планами Microsoft Entra и ценами.

Необязательные разрешения

Если вы определяете использование CycleCloud так, чтобы одна группа ресурсов использовалась для каждого кластера, можно удалить следующее из actions:

          "Microsoft.Resources/subscriptions/resourceGroups/write",
          "Microsoft.Resources/subscriptions/resourceGroups/delete",

Если вы не используете CycleCloud для назначения управляемых удостоверений виртуальным машинам, создаваемым в кластерах, можно удалить следующее из actions:

          "Microsoft.Authorization/*/read",
          "Microsoft.Authorization/roleAssignments/*",
          "Microsoft.Authorization/roleDefinitions/*",

Предупреждение

Для будущих версий CycleCloud потребуется возможность назначать управляемые удостоверения виртуальным машинам, поэтому удаление этих разрешений не рекомендуется.

Создание роли

Роль можно создать из определений ролей с помощью 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>

Теперь пользовательская роль назначена и привязана к удостоверению и может использоваться с виртуальной машиной.

Назначение ролей виртуальным машинам кластера с помощью управляемого удостоверения

Обычно для узлов кластера требуется доступ к ресурсам Azure. Например, многим кластерам требуется доступ к службе хранилища Azure, Key Vault или реестрам контейнеров Azure для выполнения рабочей нагрузки. Настоятельно рекомендуется передавать требуемые учетные данные доступа с помощью User-Assigned Управляемого Удостоверения вместо передачи секретов и учетных данных узлу через конфигурацию кластера.

Управляемые удостоверения User-Assigned можно настроить на виртуальных машинах кластера, используя свойство узла Azure.Identities. Значение свойства Azure.Identities — это список строк с ресурсными идентификаторами управляемых удостоверений, разделённый запятыми.

[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
...