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
Créez un fichier nommé
GKEOnAzureAPISubscriptionScopedRole.json
.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}"] }
Créez le nouveau rôle personnalisé :
az role definition create --role-definition "GKEOnAzureAPISubscriptionScopedRole.json"
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
Créez un fichier nommé
GKEOnAzureClusterResourceGroupScopedRole.json
.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}"] } ```
Créez le nouveau rôle personnalisé :
az role definition create --role-definition "GKEOnAzureClusterResourceGroupScopedRole.json"
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
Créez un fichier nommé
GKEOnAzureAPIVNetResourceGroupScopedRole.json
.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}"] }
Créez le nouveau rôle personnalisé :
az role definition create --role-definition "GKEOnAzureAPIVNetResourceGroupScopedRole.json"
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"