Criar atribuições de função do Azure

Esta página mostra como conceder permissões ao GKE no Azure para que ele possa acessar as APIs do Azure. Você precisa executar estas etapas ao configurar um novo cluster do GKE no Azure ou ao atualizar as permissões de um cluster existente. Essas permissões são necessárias para que o GKE no Azure gerencie os recursos do Azure em seu nome, como máquinas virtuais, componentes de rede e armazenamento.

Obter IDs de assinatura e principal de serviço

Para conceder permissões ao GKE no Azure, você precisa obter sua entidade de serviço e ID da assinatura do Azure. A entidade 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 obter mais detalhes, consulte Criar um aplicativo do Azure Active Directory .

Uma entidade de serviço é uma identidade no Azure Active Directory (AD) usada para autenticação no Azure e acesso aos seus recursos. Uma assinatura do Azure é um contêiner lógico que fornece acesso autorizado aos produtos e serviços do Azure. Um ID de assinatura é um identificador exclusivo associado à sua assinatura do Azure.

Para salvar os IDs de assinatura e principal do serviço para referência rápida, você pode armazená-los 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.

Crie três funções personalizadas

Para conceder ao GKE no Azure as permissões para gerenciar seus recursos do Azure, você precisa criar três funções personalizadas e atribuí-las à entidade de serviço. Somente as permissões mínimas são adicionadas nas instruções a seguir. Você pode adicionar mais permissões, se necessário.

Você precisa criar funções personalizadas para os seguintes tipos de acesso:

  • Acesso em nível de assinatura : permissões que se aplicam a toda a assinatura do Azure, permitindo o gerenciamento de todos os recursos do Azure dentro dessa assinatura.
  • Acesso em nível de grupo de recursos de cluster : permissões específicas para gerenciar recursos do Azure dentro de um grupo de recursos específico que contém seus clusters do GKE no Azure.
  • Acesso em nível de grupo de recursos de rede virtual : permissões específicas para gerenciar recursos do Azure dentro de um grupo de recursos que contém seus recursos de rede virtual do Azure.

Criar função para acesso em nível de 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 a nova função personalizada:

    az role definition create --role-definition "GKEOnAzureAPISubscriptionScopedRole.json"
    
  4. Atribua a função ao principal do 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 em nível de grupo de recursos de 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 a nova função personalizada:

    az role definition create --role-definition "GKEOnAzureClusterResourceGroupScopedRole.json"
    
  4. Atribua a função ao principal do 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 em nível de 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 a nova função personalizada:

    az role definition create --role-definition "GKEOnAzureAPIVNetResourceGroupScopedRole.json"
    
  4. Atribua a função ao principal do 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"
    

O que vem a seguir