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

  1. Crie um arquivo chamado GKEOnAzureAPISubscriptionScopedRole.json.

  2. 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}"]
    }
    
  3. Crie o novo papel personalizado:

    az role definition create --role-definition "GKEOnAzureAPISubscriptionScopedRole.json"
    
  4. 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

  1. Crie um arquivo chamado GKEOnAzureClusterResourceGroupScopedRole.json.

  2. 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}"]
     }
     ```
    
  3. Crie o novo papel personalizado:

    az role definition create --role-definition "GKEOnAzureClusterResourceGroupScopedRole.json"
    
  4. 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

  1. Crie um arquivo chamado GKEOnAzureAPIVNetResourceGroupScopedRole.json.

  2. 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}"]
    }
    
  3. Crie o novo papel personalizado:

    az role definition create --role-definition "GKEOnAzureAPIVNetResourceGroupScopedRole.json"
    
  4. 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"
    

A seguir