Creazione di assegnazioni di ruoli Azure

Questa pagina mostra come concedere le autorizzazioni a GKE su Azure in modo che possa accedere alle API di Azure. Devi eseguire questi passaggi quando configuri un nuovo cluster GKE su Azure o quando aggiorni le autorizzazioni per un cluster esistente. Queste autorizzazioni sono necessarie per consentire a GKE su Azure di gestire le risorse Azure per tuo conto, ad esempio macchine virtuali, componenti di rete e archiviazione.

Ottieni gli ID entità servizio e abbonamento

Per concedere le autorizzazioni a GKE su Azure, devi ottenere l'entità servizio e l'ID abbonamento Azure. L'entità servizio Azure e l'ID abbonamento sono associati all'applicazione Azure AD che hai creato per GKE su Azure. Per maggiori dettagli, consulta Creare un'applicazione Azure Active Directory.

Un'entità del servizio è un'identità in Azure Active Directory (AD) che viene utilizzata per autenticarsi in Azure e accedere alle relative risorse. Un abbonamento Azure è un contenuto logico che ti fornisce l'accesso autorizzato ai prodotti e ai servizi Azure. Un ID abbonamento è un identificatore univoco associato al tuo abbonamento Azure.

Per salvare gli ID principale del servizio e dell'abbonamento come riferimento rapido, puoi memorizzarli nelle variabili di shell. Per creare queste variabili di shell, esegui il comando seguente:

APPLICATION_ID=$(az ad app list --all \
    --query "[?displayName=='APPLICATION_NAME'].appId" \
    --output tsv)
SERVICE_PRINCIPAL_ID=$(az ad sp list --all  --output tsv \
      --query "[?appId=='$APPLICATION_ID'].id")
SUBSCRIPTION_ID=$(az account show --query "id" --output tsv)

Sostituisci APPLICATION_NAME con il nome della tua applicazione Azure AD.

Crea tre ruoli personalizzati

Per concedere a GKE su Azure le autorizzazioni per gestire le risorse Azure, devi creare tre ruoli personalizzati e assegnarli all'entità del servizio. Nelle istruzioni riportate di seguito vengono aggiunte solo le autorizzazioni minime. Se necessario, puoi aggiungere altre autorizzazioni.

Devi creare ruoli personalizzati per i seguenti tipi di accesso:

  • Accesso a livello di abbonamento: autorizzazioni che si applicano all'intero abbonamento Azure, consentendo la gestione di tutte le risorse Azure all'interno dell'abbonamento.
  • Accesso a livello di gruppo di risorse del cluster: autorizzazioni specifiche per la gestione delle risorse Azure all'interno di un determinato gruppo di risorse contenente i cluster GKE su Azure.
  • Accesso a livello di gruppo di risorse della rete virtuale: autorizzazioni specifiche per la gestione delle risorse Azure all'interno di un gruppo di risorse che contiene le risorse di rete virtuale di Azure.

Creare un ruolo per l'accesso a livello di abbonamento

  1. Crea un file denominato GKEOnAzureAPISubscriptionScopedRole.json.

  2. Apri GKEOnAzureAPISubscriptionScopedRole.json in un editor e aggiungi le seguenti autorizzazioni:

    {
    "Name": "GKE on-Azure API Subscription Scoped Role",
    "IsCustom": true,
    "Description": "Allow GKE on-Azure service manage resources in subscription scope.",
    "Actions": [
      "Microsoft.Authorization/roleAssignments/read",
      "Microsoft.Authorization/roleAssignments/write",
      "Microsoft.Authorization/roleAssignments/delete",
      "Microsoft.Authorization/roleDefinitions/read"
    ],
    "NotActions": [],
    "DataActions": [],
    "NotDataActions": [],
    "AssignableScopes": ["/subscriptions/${SUBSCRIPTION_ID}"]
    }
    
  3. Crea il nuovo ruolo personalizzato:

    az role definition create --role-definition "GKEOnAzureAPISubscriptionScopedRole.json"
    
  4. Assegna il ruolo all'entità servizio utilizzando il seguente comando:

    az role assignment create --assignee ${SERVICE_PRINCIPAL_ID} --role "GKE on-Azure API Subscription Scoped Role" --scope /subscriptions/${SUBSCRIPTION_ID}
    

Creare un ruolo per l'accesso a livello di gruppo di risorse del cluster

  1. Crea un file denominato GKEOnAzureClusterResourceGroupScopedRole.json.

  2. Apri GKEOnAzureClusterResourceGroupScopedRole.json in un editor e aggiungi le seguenti autorizzazioni:

    {
    "Name": "GKE on-Azure API Cluster Resource Group Scoped Role",
    "IsCustom": true,
    "Description": "Allow GKE on-Azure service manage resources in cluster resource group scope.",
    "Actions": [
        "Microsoft.Resources/subscriptions/resourcegroups/read",
        "Microsoft.Authorization/roleDefinitions/write",
        "Microsoft.Authorization/roleDefinitions/delete",
        "Microsoft.ManagedIdentity/userAssignedIdentities/write",
        "Microsoft.ManagedIdentity/userAssignedIdentities/read",
        "Microsoft.ManagedIdentity/userAssignedIdentities/delete",
        "Microsoft.Network/applicationSecurityGroups/write",
        "Microsoft.Network/applicationSecurityGroups/read",
        "Microsoft.Network/applicationSecurityGroups/delete",
        "Microsoft.Network/applicationSecurityGroups/joinIpConfiguration/action",
        "Microsoft.Authorization/roleAssignments/write",
        "Microsoft.Authorization/roleAssignments/read",
        "Microsoft.Authorization/roleAssignments/delete",
        "Microsoft.Network/loadBalancers/write",
        "Microsoft.Network/loadBalancers/read",
        "Microsoft.Network/loadBalancers/delete",
        "Microsoft.Network/loadBalancers/backendAddressPools/join/action",
        "Microsoft.Network/networkSecurityGroups/write",
        "Microsoft.Network/networkSecurityGroups/read",
        "Microsoft.Network/networkSecurityGroups/delete",
        "Microsoft.Network/networkSecurityGroups/join/action",
        "Microsoft.KeyVault/vaults/write",
        "Microsoft.KeyVault/vaults/read",
        "Microsoft.KeyVault/vaults/delete",
        "Microsoft.Compute/disks/read",
        "Microsoft.Compute/disks/write",
        "Microsoft.Compute/disks/delete",
        "Microsoft.Network/networkInterfaces/read",
        "Microsoft.Network/networkInterfaces/write",
        "Microsoft.Network/networkInterfaces/delete",
        "Microsoft.Network/networkInterfaces/join/action",
        "Microsoft.Compute/virtualMachines/read",
        "Microsoft.Compute/virtualMachines/write",
        "Microsoft.Compute/virtualMachines/delete",
        "Microsoft.Compute/virtualMachineScaleSets/write",
        "Microsoft.Compute/virtualMachineScaleSets/read",
        "Microsoft.Compute/virtualMachineScaleSets/delete",
        "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action",
        "Microsoft.Compute/virtualMachines/retrieveBootDiagnosticsData/action",
        "Microsoft.Insights/Metrics/Read"
    ],
    "NotActions": [],
    "DataActions": [
        "Microsoft.KeyVault/vaults/keys/create/action",
        "Microsoft.KeyVault/vaults/keys/delete",
        "Microsoft.KeyVault/vaults/keys/read",
        "Microsoft.KeyVault/vaults/keys/encrypt/action"
    ],
    "NotDataActions": [],
    "AssignableScopes": ["/subscriptions/${SUBSCRIPTION_ID}"]
     }
     ```
    
  3. Crea il nuovo ruolo personalizzato:

    az role definition create --role-definition "GKEOnAzureClusterResourceGroupScopedRole.json"
    
  4. Assegna il ruolo all'entità servizio utilizzando il seguente comando:

    az role assignment create --assignee ${SERVICE_PRINCIPAL_ID} --role "GKE on-Azure API Cluster Resource Group Scoped Role" --scope /subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${CLUSTER_RESOURCE_GROUP_ID}
    

Creare un ruolo per l'accesso a livello di gruppo di risorse della rete virtuale

  1. Crea un file denominato GKEOnAzureAPIVNetResourceGroupScopedRole.json.

  2. Apri GKEOnAzureAPIVNetResourceGroupScopedRole.json in un editor e aggiungi le seguenti autorizzazioni:

    {
    "Name": "GKE on-Azure API VNet Resource Group Scoped Role",
    "IsCustom": true,
    "Description": "Allow GKE on-Azure service manage resources in virtual network resource group scope.",
    "Actions": [
        "Microsoft.Network/virtualNetworks/read",
        "Microsoft.Network/virtualNetworks/subnets/read",
        "Microsoft.Network/virtualNetworks/subnets/join/action",
        "Microsoft.Authorization/roleDefinitions/write",
        "Microsoft.Authorization/roleDefinitions/delete"
    ],
    "NotActions": [],
    "DataActions": [],
    "NotDataActions": [],
    "AssignableScopes": ["/subscriptions/${SUBSCRIPTION_ID}"]
    }
    
  3. Crea il nuovo ruolo personalizzato:

    az role definition create --role-definition "GKEOnAzureAPIVNetResourceGroupScopedRole.json"
    
  4. Assegna il ruolo all'entità servizio utilizzando il seguente comando:

    az role assignment create --assignee ${SERVICE_PRINCIPAL_ID} --role "GKE on-Azure API Subscription Scoped Role" --scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/VNET_RESOURCE_GROUP_ID"
    

Passaggi successivi