Créer des attributions de rôles Azure

Cette page explique comment accorder des autorisations à GKE sur Azure pour qu'il puisse accéder aux API Azure. Vous devez effectuer ces étapes lorsque vous configurez un cluster GKE sur Azure ou lorsque vous mettez à jour les autorisations d'un cluster existant. Ces autorisations sont nécessaires pour que GKE sur Azure puisse gérer les ressources Azure en votre nom, telles que les machines virtuelles, les composants réseau et le stockage.

Obtenir les ID du compte principal de service et de l'abonnement

Pour accorder des autorisations à GKE sur Azure, vous devez obtenir votre compte de service principal et votre ID d'abonnement Azure. Le compte principal de service et l'ID d'abonnement Azure sont associés à l'application Azure AD que vous avez créée pour GKE sur Azure. Pour en savoir plus, consultez Créer une application Azure Active Directory.

Un compte de service principal est une identité dans Azure Active Directory (AD) qui est utilisée pour s'authentifier auprès d'Azure et accéder à ses ressources. Un abonnement Azure est un conteneur logique qui vous permet d'accéder aux produits et services Azure. Un ID d'abonnement est un identifiant unique associé à votre abonnement Azure.

Pour enregistrer vos ID d'entité principale de service et d'abonnement afin de pouvoir les consulter rapidement, vous pouvez les stocker dans des variables d'interface système. Pour créer ces variables de shell, exécutez la commande suivante :

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)

Remplacez APPLICATION_NAME par le nom de votre application Azure AD.

Créer trois rôles personnalisés

Pour accorder à GKE sur Azure les autorisations nécessaires pour gérer vos ressources Azure, vous devez créer trois rôles personnalisés et les attribuer au compte de service principal. Seules les autorisations minimales sont ajoutées dans les instructions suivantes. Vous pouvez ajouter d'autres autorisations si nécessaire.

Vous devez créer des rôles personnalisés pour les types d'accès suivants :

  • Accès au niveau de l'abonnement : autorisations qui s'appliquent à l'ensemble de l'abonnement Azure, permettant la gestion de toutes les ressources Azure de cet abonnement.
  • Accès au niveau du groupe de ressources du cluster : autorisations spécifiques à la gestion des ressources Azure dans un groupe de ressources particulier contenant vos clusters GKE sur Azure.
  • Accès au niveau du groupe de ressources du réseau virtuel : autorisations spécifiques à la gestion des ressources Azure dans un groupe de ressources contenant vos ressources de réseau virtuel Azure.

Créer un rôle pour l'accès au niveau de l'abonnement

  1. Créez un fichier nommé GKEOnAzureAPISubscriptionScopedRole.json.

  2. Ouvrez GKEOnAzureAPISubscriptionScopedRole.json dans un éditeur et ajoutez les autorisations suivantes :

    {
    "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. Créez le nouveau rôle personnalisé :

    az role definition create --role-definition "GKEOnAzureAPISubscriptionScopedRole.json"
    
  4. Attribuez le rôle au compte principal de service à l'aide de la commande suivante :

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

Créer un rôle pour l'accès au niveau du groupe de ressources du cluster

  1. Créez un fichier nommé GKEOnAzureClusterResourceGroupScopedRole.json.

  2. Ouvrez GKEOnAzureClusterResourceGroupScopedRole.json dans un éditeur et ajoutez les autorisations suivantes :

    {
    "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. Créez le nouveau rôle personnalisé :

    az role definition create --role-definition "GKEOnAzureClusterResourceGroupScopedRole.json"
    
  4. Attribuez le rôle au compte principal de service à l'aide de la commande suivante :

    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}
    

Créer un rôle pour l'accès au niveau du groupe de ressources de réseau virtuel

  1. Créez un fichier nommé GKEOnAzureAPIVNetResourceGroupScopedRole.json.

  2. Ouvrez GKEOnAzureAPIVNetResourceGroupScopedRole.json dans un éditeur et ajoutez les autorisations suivantes :

    {
    "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. Créez le nouveau rôle personnalisé :

    az role definition create --role-definition "GKEOnAzureAPIVNetResourceGroupScopedRole.json"
    
  4. Attribuez le rôle au compte principal de service à l'aide de la commande suivante :

    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"
    

Étapes suivantes