Usar o controle de acesso baseado em função do Azure para autorização do Kubernetes

Este artigo aborda como usar o RBAC do Azure para Autorização do Kubernetes, o que permite o gerenciamento unificado e o controle de acesso entre recursos do Azure, AKS e Kubernetes. Para saber mais, confira RBAC do Azure para autorização do Kubernetes.

Observação

Ao usar a autenticação integrada entre a ID do Microsoft Entra e o AKS, você pode usar usuários, grupos ou entidades de serviço do Microsoft Entra como entidades de controle de acesso baseado em função (RBAC do Kubernetes) do Kubernetes. Com esse recurso, você não precisa gerenciar separadamente identidades e credenciais de usuários para o Kubernetes. No entanto, você ainda precisa configurar e gerenciar o RBAC do Azure e o RBAC do Kubernetes separadamente.

Antes de começar

  • Será necessária a CLI do Azure versão 2.24.0 ou posterior instalada e configurada. Execute az --version para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.
  • Você precisa de kubectl, com uma versão mínima de 1.18.3.
  • Você precisa da integração gerenciada do Microsoft Entra habilitada no seu cluster antes de adicionar o RBAC do Azure para autorização do Kubernetes. Se você precisar habilitar a integração gerenciada do Microsoft Entra, consulte Usar a ID do Microsoft Entra no AKS.
  • Se você tem CRDs e está fazendo definições de função personalizadas, a única maneira de cobrir CRDs hoje é usar Microsoft.ContainerService/managedClusters/*/read. Para os objetos restantes, você pode usar Grupos de API específicos, como: Microsoft.ContainerService/apps/deployments/read.
  • Novas atribuições de função podem levar até cinco minutos para serem propagadas e atualizadas pelo servidor de autorização.
  • O RBAC do Azure para Autorização do Kubernetes requer que o locatário do Microsoft Entra configurado para autenticação seja o mesmo que o locatário da assinatura que contém o cluster do AKS.

Crie um novo cluster do AKS com a integração gerenciada do Microsoft Entra e RBAC do Azure para Autorização do Kubernetes

  1. Crie um grupo de recursos do Azure usando o comando az group create.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=<azure-region>
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. Crie um cluster do AKS com a integração gerenciada do Microsoft Entra e o RBAC do Azure para Autorização do Kubernetes usando o comando az aks create.

    export CLUSTER_NAME=<cluster-name>
    
    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --enable-aad \
        --enable-azure-rbac \
        --generate-ssh-keys
    

    Seu resultado deve ser semelhante ao seguinte exemplo de saída:

    "AADProfile": {
        "adminGroupObjectIds": null,
        "clientAppId": null,
        "enableAzureRbac": true,
        "managed": true,
        "serverAppId": null,
        "serverAppSecret": null,
        "tenantId": "****-****-****-****-****"
    }
    

Habilitar o RBAC do Azure em um cluster AKS existente

  • Habilite o RBAC do Azure para autorização do Kubernetes em um cluster existente do AKS, usando o comando az aks update com o sinalizador --enable-azure-rbac.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
    

Desabilitar a autorização do RBAC do Azure para Kubernetes de um cluster do AKS

  • Remova o RBAC do Azure para autorização de Kubernetes de um cluster existente do AKS, usando o comando az aks update com o sinalizador --disable-azure-rbac.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
    

Funções internas do AKS

O AKS fornece as seguintes funções internas:

Função Descrição
Leitor de RBAC do Serviço de Kubernetes do Azure Permite acesso somente leitura para ver a maioria dos objetos em um namespace. Não permite exibir funções nem associações de função. Essa função não permite a exibição de Secrets, pois a leitura do conteúdo dos Segredos permite acesso às credenciais de ServiceAccount no namespace, o que permitiria acesso à API como qualquer ServiceAccount no namespace (uma forma de elevação de privilégio).
Gravador de RBAC do Serviço de Kubernetes do Azure Permite acesso de leitura/gravação à maioria dos objetos em um namespace. Essa função não permite exibir ou modificar funções ou associações de função. No entanto, essa função permite acessar Secrets e executar Pods como uma ServiceAccount no namespace, de modo que ela pode ser usada para obter os níveis de acesso de API de qualquer conta no namespace.
Administrador do RBAC do Serviço de Kubernetes do Azure Permite o acesso de administrador, destinado a ser concedido em um namespace. Permite acesso de leitura/gravação para a maioria dos recursos em um namespace (ou escopo de cluster), incluindo a capacidade de criar funções e associações de função no namespace. Essa função não permite acesso de gravação à cota de recursos ou ao próprio namespace.
Administrador do Cluster do RBAC do Serviço de Kubernetes do Azure Permite o acesso de superusuário para executar ações em qualquer recurso. Fornece controle total sobre cada recurso no cluster e em todos os namespaces.

Criar atribuições de função para acesso ao cluster

  1. Obtenha sua ID de recurso do AKS usando o comando az aks show.

    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
  2. Crie uma atribuição de função usando o comando az role assignment create. <AAD-ENTITY-ID> pode ser um nome de usuário ou a ID do cliente de uma entidade de serviço. O exemplo a seguir cria uma atribuição de função para a função de Administrador do RBAC do Serviço de Kubernetes do Azure.

    az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

    Observação

    Você pode criar as atribuições de função RBACLeitor do Serviço de Kubernetes do Azure e Gravador dedo Serviço de Kubernetes do Azure com escopo para um namespace específico dentro do cluster usando o comando az role assignment create e definindo o escopo para o namespace desejado.

    az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
    

Criar definições de função personalizadas

Veja a seguir um exemplo de definição de função personalizada que permite que um usuário leia somente implantações e nada mais. Para obter a lista completa de possíveis ações, consulte Operações do Microsoft.ContainerService.

  1. Para criar suas próprias definições de função personalizadas, copie o arquivo a seguir, substituindo <YOUR SUBSCRIPTION ID> por sua própria ID de assinatura e salve-o como deploy-view.json.

    {
        "Name": "AKS Deployment Reader",
        "Description": "Lets you view all deployments in cluster/namespace.",
        "Actions": [],
        "NotActions": [],
        "DataActions": [
            "Microsoft.ContainerService/managedClusters/apps/deployments/read"
        ],
        "NotDataActions": [],
        "assignableScopes": [
            "/subscriptions/<YOUR SUBSCRIPTION ID>"
        ]
    }
    
  2. Crie a definição de função usando o comando az role definition create, definindo --role-definition como arquivo deploy-view.json que você criou na etapa anterior.

    az role definition create --role-definition @deploy-view.json 
    
  3. Atribua a definição de função a um usuário ou outra identidade usando o comando az role assignment create.

    az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

Usar o RBAC do Azure para Autorização do Kubernetes com kubectl

  1. Verifique se você tem a função interna Usuário de Cluster do Serviço de Kubernetes do Azure e obtenha o kubeconfig do cluster do AKS usando o comando az aks get-credentials.

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. Agora você pode usar kubectl para gerenciar seu cluster. Por exemplo, você pode listar os nós no cluster usando kubectl get nodes.

    kubectl get nodes
    

    Exemplo de saída:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11
    

Usar o RBAC do Azure para Autorização do Kubernetes com kubelogin

O AKS criou o plug-in kubelogin para ajudar a desbloquear cenários adicionais, como logons não interativos, versões mais antigas do kubectl ou aproveitar o SSO em vários clusters sem a necessidade de entrar em um novo cluster.

  1. Você pode use o plugin kubelogin executando o seguinte comando:

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. Agora você pode usar kubectl para gerenciar seu cluster. Por exemplo, você pode listar os nós no cluster usando kubectl get nodes.

    kubectl get nodes
    

    Exemplo de saída:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11
    

Limpar os recursos

Excluir atribuição de função

  1. Listar atribuições de função usando o comando az role assignment list.

    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. Exclua atribuições de função usando o comando az role assignment delete.

    az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
    

Excluir definição de função

  • Exclua a definição de função personalizada usando o comando az role definition delete.

    az role definition delete --name "AKS Deployment Reader"
    

Excluir grupo de recursos e cluster do AKS

  • Exclua o grupo de recursos e o cluster do AKS usando o comando az group delete.

    az group delete --name $RESOURCE_GROUP --yes --no-wait
    

Próximas etapas

Para saber mais sobre autenticação do AKS, autorização, RBAC do Kubernetes e RBAC do Azure, confira: