Criar atribuições de papel do Azure
Nesta página, mostramos como conceder permissões ao GKE no Azure para que ele possa acessar as APIs do Azure. É necessário realizar essas etapas ao configurar um novo cluster do GKE no Azure ou ao atualizar as permissões de um cluster atual. Essas permissões são necessárias para que o GKE no Azure gerencie recursos do Azure em seu nome, como máquinas virtuais, componentes de rede e armazenamento.
Obter IDs de principal de serviço e de assinatura
Para conceder permissões ao GKE no Azure, você precisa conseguir o principal de serviço e o ID da assinatura do Azure. O principal de serviço e o ID da assinatura do Azure estão associados ao aplicativo do Azure AD que você criou para o GKE no Azure. Para mais detalhes, consulte Criar um aplicativo do Azure Active Directory.
Uma principal de serviço é uma identidade no Azure Active Directory (AD) usada para autenticar no Azure e acessar os recursos dele. Uma assinatura do Azure é um contêiner lógico que oferece acesso autorizado a produtos e serviços do Azure. Um ID de assinatura é um identificador exclusivo associado à sua assinatura do Azure.
Para salvar os IDs da principal de serviço e da assinatura para referência rápida, armazene-os em variáveis de shell. Para criar essas variáveis de shell, execute o seguinte comando:
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)
Substitua APPLICATION_NAME
pelo nome
do seu aplicativo do Azure AD.
Criar três papéis personalizados
Para conceder ao GKE no Azure as permissões necessárias para gerenciar seus recursos do Azure, crie três papéis personalizados e atribua-os ao principal de serviço. Apenas as permissões mínimas são adicionadas nas instruções a seguir. Você pode adicionar mais permissões se precisar.
É necessário criar papéis personalizados para os seguintes tipos de acesso:
- Acesso no nível da assinatura: permissões que se aplicam a toda a assinatura do Azure, permitindo o gerenciamento de todos os recursos do Azure nessa assinatura.
- Acesso no nível do grupo de recursos do cluster: permissões específicas para gerenciar recursos do Azure em um grupo de recursos específico que contém seus clusters do GKE no Azure.
- Acesso no nível do grupo de recursos da rede virtual: permissões específicas para gerenciar recursos do Azure em um grupo de recursos que contém os recursos da rede virtual do Azure.
Criar função para acesso no nível da assinatura
Crie um arquivo chamado
GKEOnAzureAPISubscriptionScopedRole.json
.Abra
GKEOnAzureAPISubscriptionScopedRole.json
em um editor e adicione as seguintes permissões:{ "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}"] }
Crie o novo papel personalizado:
az role definition create --role-definition "GKEOnAzureAPISubscriptionScopedRole.json"
Atribua o papel ao principal de serviço usando o seguinte comando:
az role assignment create --assignee ${SERVICE_PRINCIPAL_ID} --role "GKE on-Azure API Subscription Scoped Role" --scope /subscriptions/${SUBSCRIPTION_ID}
Criar função para acesso no nível do grupo de recursos do cluster
Crie um arquivo chamado
GKEOnAzureClusterResourceGroupScopedRole.json
.Abra
GKEOnAzureClusterResourceGroupScopedRole.json
em um editor e adicione as seguintes permissões:{ "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}"] } ```
Crie o novo papel personalizado:
az role definition create --role-definition "GKEOnAzureClusterResourceGroupScopedRole.json"
Atribua o papel ao principal de serviço usando o seguinte 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}
Criar função para acesso no nível do grupo de recursos de rede virtual
Crie um arquivo chamado
GKEOnAzureAPIVNetResourceGroupScopedRole.json
.Abra
GKEOnAzureAPIVNetResourceGroupScopedRole.json
em um editor e adicione as seguintes permissões:{ "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}"] }
Crie o novo papel personalizado:
az role definition create --role-definition "GKEOnAzureAPIVNetResourceGroupScopedRole.json"
Atribua o papel ao principal de serviço usando o seguinte 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"