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


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

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

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

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

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

Когда Azure CycleCloud установлен на виртуальной машине Azure с управляемым удостоверением, назначенным ему, диалоговое окно Создание учетной записи поставщика облачных услуг будет работать немного по-другому. Будет добавлен новый флажок для Управляемого Удостоверения, а идентификатор подписки будет предварительно заполнен подпиской виртуальной машины хоста.

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

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

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

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

Самый простой вариант (с достаточными правами доступа) — назначить роль Контрибьютора для подписки CycleCloud ВМ как управляемой идентификации System-Assigned. Однако роль участника имеет более высокий уровень привилегий, чем это необходимо для CycleCloud. Можно создать и назначить виртуальной машине настраиваемую роль.

Эта роль охватывает все функции 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> на ваш идентификатор подписки. Эта роль применяется к подписке, но при желании её можно применять к одной группе ресурсов. Обратите внимание также, что имя должно быть уникальным для клиента.

Важный

Для использования пользовательской роли требуется лицензия 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
...