Utilisation d’identités managées

Les identités managées Azure AD peuvent être utilisées pour autoriser Azure CycleCloud à gérer les clusters dans votre abonnement (en guise d’alternative à l’utilisation d’un principal de service). Ils peuvent également être affectés à des machines virtuelles CycleCloud pour fournir l’accès aux ressources Azure (telles que stockage, Key Vault ou registres de conteneurs Azure).

Autorisations de machine virtuelle CycleCloud avec l’identité managée

CycleCloud automatise de nombreux appels au Resource Manager Azure à des fins de gestion des clusters HPC. Cette automatisation nécessite que certaines autorisations soient accordées à CycleCloud. Cet accès peut être accordé à CycleCloud en configurant un principal de service ou en affectant une identité managée à la machine virtuelle CycleCloud.

Il est généralement recommandé d’utiliser une identité managée affectée par le système ou une identité managée affectée par l’utilisateur pour accorder ces autorisations plutôt qu’un principal de service.

Quand Azure CycleCloud a été installé sur une machine virtuelle Azure avec une identité managée qui lui est affectée, la boîte de dialogue Créer un compte de fournisseur de cloud se comporte légèrement différemment. Il y aura une nouvelle case à cocher pour Identité managée et l’ID d’abonnement sera prérempli avec l’abonnement de la machine virtuelle hôte.

Ajouter des identités managées par abonnement

Ajouter des identités managées par abonnement

Il est toujours possible d’entrer l’ensemble standard d’informations d’identification en décochant simplement la case Identité managée . Ce faisant, les champs standard sont ajoutés au formulaire. En outre, il est parfaitement acceptable d’utiliser un ID d’abonnement distinct ; la valeur fournie est juste pour des raisons pratiques.

Créer un rôle personnalisé et une identité managée pour CycleCloud

L’option la plus simple (avec des droits d’accès suffisants) consiste à attribuer le rôle contributeur de l’abonnement à la machine virtuelle CycleCloud en tant qu’identité managée System-Assigned. Toutefois, le rôle Contributeur a un niveau de privilège supérieur à celui requis par CycleCloud. Un rôle personnalisé peut être créé et affecté à la machine virtuelle.

Une stratégie suffisante pour la plupart des fonctionnalités CycleCloud est publiée ci-dessous.

{
    "assignableScopes": [
      "/"
    ],
    "description": "CycleCloud Orchestrator Role",
    "permissions": [
      {
        "actions": [
          "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.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/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",
    "roleType": "CustomRole",
    "type": "Microsoft.Authorization/roleDefinitions"
}

Important

L’utilisation d’un rôle personnalisé nécessite une licence Azure AD Premium P1. Pour trouver la licence adaptée à vos besoins, consultez Comparaison des fonctionnalités généralement disponibles des éditions Free, Basic et Premium.

Autorisations facultatives

Pour permettre à CycleCloud d’affecter des identités managées aux machines virtuelles qu’il crée dans des clusters, ajoutez les éléments suivants "actions":

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

Pour permettre à CycleCloud de créer et de gérer des groupes de ressources par cluster (recommandé, si autorisé par la stratégie), ajoutez les éléments suivants "actions":

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

Création du rôle

Un rôle peut être créé à partir des définitions de rôle via Azure CLI . Utilisez ce rôle pour créer une définition de rôle dans le locataire Azure. Une fois que le rôle existe dans le locataire, attribuez le rôle à une identité avec une étendue appropriée.

Vous trouverez ci-dessous le flux de base à l’aide d’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>

À présent, le rôle personnalisé est attribué et étendu à l’identité et peut être utilisé avec une machine virtuelle.

Attribution de rôles à des machines virtuelles de cluster avec une identité managée

Il est courant que les nœuds de cluster nécessitent l’accès aux ressources Azure. Par exemple, de nombreux clusters ont besoin d’accéder au stockage Azure, aux Key Vault ou aux registres de conteneurs Azure pour exécuter leur charge de travail. Il est fortement recommandé de transmettre les informations d’identification d’accès requises à l’aide d’une identité managée affectée par l’utilisateur plutôt que de transmettre des secrets/informations d’identification au nœud via la configuration du cluster.

User-Assigned identités managées peuvent être configurées sur les machines virtuelles de cluster à l’aide de la propriété node Azure.Identities . La valeur de la Azure.Identities propriété est une liste séparée par des virgules de chaînes d’ID de ressource d’identité managée :

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