Condividi tramite


Uso di identità gestite

Usare le identità gestite di Microsoft Entra per concedere ad Azure CycleCloud l'autorizzazione per gestire i cluster nella sottoscrizione. Questo approccio funge da alternativa all'uso di un service principal. Assegnare identità gestite alle macchine virtuali CycleCloud per fornire l'accesso alle risorse di Azure, ad esempio Archiviazione, Key Vault o Registri contenitori di Azure.

Autorizzazioni di macchina virtuale CycleCloud con identità gestita

CycleCloud automatizza molte chiamate ad Azure Resource Manager per gestire i cluster HPC. Questa automazione richiede determinate autorizzazioni per CycleCloud. È possibile concedere a CycleCloud questo accesso configurando un'entità servizio o assegnando un'identità gestita alla macchina virtuale CycleCloud.

È consigliabile usare un'identità gestita assegnata dal sistema o assegnata dall'utente per concedere queste autorizzazioni anziché un'entità servizio.

Quando si installa Azure CycleCloud in una macchina virtuale di Azure e si assegna un'identità gestita alla macchina virtuale, la finestra di dialogo Aggiungi sottoscrizione funziona in modo leggermente diverso. La finestra di dialogo abilita e preseleziona l'opzione di autenticazione dell'identità gestita . Compila anche l'ID sottoscrizione con la sottoscrizione per la macchina virtuale host.

Aggiungere identità gestite di sottoscrizione

Aggiungere identità gestite di sottoscrizione

È comunque possibile immettere il set standard di credenziali selezionando l'opzione di autenticazione Registrazione app. Quando si seleziona questa opzione, i campi standard vengono visualizzati nel modulo. È anche possibile usare un ID sottoscrizione diverso; il valore fornito è solo per praticità.

Quando si usa un'identità gestita assegnata dal sistema, lasciare vuoto il campo ClientID. Tuttavia, quando si usa CycleCloud con un'identità gestita assegnata dall'utente, impostare ClientID sull'ID client dell'identità gestita specifica desiderata per l'orchestrazione del cluster.

Accesso al contenitore di archiviazione

Oltre a usare un'identità gestita per l'orchestrazione del cluster nella macchina virtuale CycleCloud, è possibile configurare CycleCloud per assegnare un'identità gestita assegnata dall'utente ai cluster per l'account di archiviazione e l'accesso inlocker dai nodi del cluster. Questo approccio usa l'identità gestita assegnata dall'utente anziché i token di firma di accesso condiviso derivati dalla chiave di accesso condiviso dell'account di archiviazione.

Per configurare i cluster affinché usino un'identità gestita assegnata dall'utente anziché la chiave di accesso condiviso, creare un'identità gestita assegnata dall'utente dedicata con accesso lettore dati BLOB di archiviazione a livello dell'ambito dell'account di archiviazione. Creare prima di tutto l'account di archiviazione e l'identità gestita assegnata dall'utente nella sottoscrizione di Azure. Nella sezione Configurazione di una casella di archiviazione della finestra di dialogo Aggiungi sottoscrizione. Selezionare quindi la nuova identità gestita dall'elenco a discesa Identità della casella di archiviazione e l'account di archiviazione dall'elenco a discesa Account di archiviazione.

Creare un ruolo personalizzato e un'identità gestita per CycleCloud

L'opzione più semplice che fornisce diritti di accesso sufficienti consiste nell'assegnare i Contributor ruoli e Storage Blob Data Contributor per la sottoscrizione alla macchina virtuale CycleCloud come identità gestita assegnata dal sistema. Tuttavia, il Contributor ruolo ha un livello di privilegio superiore rispetto a quello richiesto da CycleCloud. È possibile creare e assegnare un ruolo personalizzato alla macchina virtuale. Analogamente, assegnare il ruolo Storage Blob Data Contributor nell'ambito dell'account di archiviazione anziché nell'ambito della sottoscrizione se è già stato creato l'account di archiviazione.

Questo ruolo copre tutte le funzionalità 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"
}

Assicurarsi di sostituire <SubscriptionId> con l'ID sottoscrizione. È possibile definire l'ambito di questo ruolo in una sottoscrizione, ma è possibile definire l'ambito in un singolo gruppo di risorse, se si preferisce. Il nome deve essere univoco per il tenant.

Importante

Per usare un ruolo personalizzato, è necessaria una licenza microsoft Entra ID P1. Per altre informazioni sulle licenze, vedere Piani e prezzi di Microsoft Entra.

Autorizzazioni facoltative

Se si definisce l'ambito CycleCloud per usare un singolo gruppo di risorse per ogni cluster, è possibile rimuovere le autorizzazioni seguenti da actions:

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

Se non si usa CycleCloud per assegnare identità gestite alle macchine virtuali create all'interno dei cluster, è possibile rimuovere le autorizzazioni seguenti da actions:

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

Avvertimento

Le versioni future di CycleCloud richiedono la possibilità di assegnare identità gestite alle macchine virtuali. Non è consigliabile rimuovere queste autorizzazioni.

Creazione del ruolo

È possibile creare un ruolo dalle definizioni dei ruoli usando l'interfaccia della riga di comando di Azure. Usare questo ruolo per creare una definizione di ruolo all'interno del tenant di Azure. Quando il ruolo esiste nel tenant, assegnare il ruolo a un'identità con l'ambito appropriato.

L'esempio seguente illustra il flusso di base usando l'interfaccia della riga di comando di Azure.

# 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>

Il ruolo personalizzato viene ora assegnato con ambito a livello di identità. È possibile usarlo con una macchina virtuale.

Assegnazione di ruoli alle macchine virtuali del cluster con identità gestita

I nodi del cluster spesso necessitano dell'accesso alle risorse di Azure. Ad esempio, molti cluster richiedono l'accesso ad Azure Storage, Key Vault o Azure Container Registries per eseguire il carico di lavoro. È consigliabile usare un'identità gestita diUser-Assigned per fornire credenziali di accesso anziché passare segreti o credenziali al nodo tramite la configurazione del cluster.

È possibile configurare le identità gestite assegnate dall'utente nelle macchine virtuali del cluster usando la Azure.Identities proprietà node. Impostare la proprietà Azure.Identities su un elenco delimitato da virgole di stringhe ID risorsa dell'identità gestita:

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