Partilhar via


Utilize o controlo de acesso baseado em função do Azure para autorização no Kubernetes

Este artigo aborda como usar o RBAC do Azure para Autorização do Kubernetes, que permite o gerenciamento unificado e o controle de acesso entre recursos do Azure, AKS e recursos do Kubernetes. Para obter mais informações, consulte RBAC do Azure para Autorização do Kubernetes.

Nota

Ao usar a autenticação integrada entre o ID do Microsoft Entra e o AKS, pode utilizar utilizadores, grupos ou entidades de serviço do Microsoft Entra como sujeitos no controlo de acesso baseado em função do Kubernetes (Kubernetes RBAC). Com esse recurso, você não precisa gerenciar separadamente identidades de usuário e credenciais 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

  • Você precisa da CLI do Azure versão 2.24.0 ou posterior instalada e configurada. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).
  • Você precisa de kubectl, com uma versão mínima de 1.18.3.
  • Você precisa da integração gerenciada do Microsoft Entra habilitada em seu cluster antes de poder adicionar o RBAC do Azure para autorização do Kubernetes. Se você precisar habilitar a integração gerenciada do Microsoft Entra, consulte Usar o ID do Microsoft Entra no AKS.
  • Se tiver CRDs e está a fazer definições de funções personalizadas, a única maneira de cobrir CRDs hoje é usar Microsoft.ContainerService/managedClusters/*/read. Para os objetos restantes, você pode usar os 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.
  • A Autorização do RBAC do Azure para Kubernetes requer que o inquilino do Microsoft Entra configurado para autenticação seja o mesmo inquilino da assinatura que contém o seu cluster AKS.

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

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

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

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

    Sua saída deve ser semelhante à saída de exemplo a seguir:

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

Habilitar o RBAC do Azure em um cluster AKS existente

  • Habilitar o RBAC do Azure para Autorização do Kubernetes em um cluster AKS existente usando o comando az aks update com a flag --enable-azure-rbac.

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

Desativar Azure RBAC para Autorização do Kubernetes num cluster AKS

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

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

Funções incorporadas do AKS

O AKS fornece as seguintes funções integradas:

Função Descrição
Azure Kubernetes Service RBAC Reader Permite acesso somente leitura para ver a maioria dos objetos em um namespace. Ele não permite a visualização de funções ou associações de funções. Esta função não permite a visualização de Secrets, uma vez que a leitura dos conteúdos dos Segredos permite o acesso às credenciais do ServiceAccount no 'namespace', o que permitiria o acesso à API como qualquer ServiceAccount no 'namespace' (uma forma de escalonamento de privilégios).
Editor RBAC do Serviço Kubernetes do Azure Permite acesso de leitura/gravação à maioria dos objetos em um namespace. Esta função não permite visualizar ou modificar funções ou associações de funções. No entanto, essa função permite acessar Secrets e executar Pods como qualquer ServiceAccount no namespace, para que possa ser usada para obter os níveis de acesso à API de qualquer ServiceAccount no namespace.
Azure Kubernetes Service RBAC Admin Permite acesso de administrador, destinado a ser concedido dentro de um namespace. Permite acesso de leitura/gravação à maioria dos recursos em um namespace (ou escopo de cluster), incluindo a capacidade de criar funções e associações de função dentro do namespace. Esta função não permite acesso de escrita à quota de recursos nem ao próprio namespace.
Azure Kubernetes Service RBAC Cluster Admin Permite o acesso de superusuário para executar qualquer ação em qualquer recurso. Ele dá controle total sobre todos os recursos no cluster e em todos os namespaces.

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

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

    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 az role assignment create comando. <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 RBAC do Serviço Kubernetes do Azure.

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

    Nota

    Você pode criar as atribuições de função Leitor RBAC do Serviço Kubernetes do Azure e Gravador RBAC do Serviço Kubernetes do Azure com escopo definido 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ções personalizadas

O exemplo de seguinte definição de função personalizada permite que um usuário leia apenas desenvolvimentos e nada mais. Para obter a lista completa de ações possíveis, consulte as operações 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 az role definition create comando, definindo o --role-definition para o deploy-view.json arquivo 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 az role assignment create comando.

    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. Certifique-se de que tem a função incorporada de Utilizador do Cluster de Serviços do Kubernetes do Azure e, em seguida, obtenha o kubeconfig do seu cluster AKS utilizando o az aks get-credentials comando.

    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 em seu cluster usando kubectl get nodes.

    kubectl get nodes
    

    Saída de exemplo:

    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 kubelogin plug-in para ajudar a desbloquear cenários como logins não interativos, versões mais antigas kubectl ou aproveitar o SSO em vários clusters sem a necessidade de entrar em um novo cluster.

  1. Use o kubelogin plug-in 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 em seu cluster usando kubectl get nodes.

    kubectl get nodes
    

    Saída de exemplo:

    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 recursos

Excluir atribuição de função

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

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

    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 az role definition delete comando.

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

Excluir grupo de recursos e cluster AKS

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

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

Próximos passos

Para saber mais sobre autenticação, autorização, RBAC do Kubernetes, RBAC do Azure e o Azure Kubernetes Service (AKS), consulte: