Use o PIM (Privileged Identity Management) para controlar o acesso aos clusters e nós do AKS (Serviço de Kubernetes do Azure)

Ao configurar permissões para diferentes equipes, você pode definir permissões padrão para equipes especificadas e, em seguida, conceder acesso privilegiado a usuários específicos quando necessário. Usar o Azure Kubernetes Service (AKS) com o Microsoft Entra ID permite configurar o Privileged Identity Management (PIM) para solicitações de acesso just-in-time (JIT) ao plano de controle do cluster e acesso SSH aos nós.

Neste artigo, você aprenderá como:

  • Defina funções padrão para grupos de exemplo acessarem ou executarem operações em clusters AKS e nós de cluster com base nas associações de grupo do Microsoft Entra.
  • Configurar perfis básicos para acessar clusters do AKS e acesso SSH aos nós.
  • Ative funções automaticamente para obter acesso imediato a clusters e nós do AKS.
  • Defina aprovadores para aprovar ou negar solicitações de aprovação para acesso just-in-time.

Observação

O PIM (Privileged Identity Management) do Microsoft Entra possui funcionalidades do Microsoft Entra ID P2 ou do Microsoft Entra ID Governance, que exigem uma SKU Premium P2. Para obter mais informações, consulte os Fundamentos de licenciamento do Microsoft Entra ID Governance e o guia de preços.

Pré-requisitos

Este artigo pressupõe que você já tenha um cluster AKS com integração do Microsoft Entra ID. Se você não tiver um, consulte Criar um cluster do AKS com a integração do Microsoft Entra ID.

Para acesso SSH aos nós, este artigo pressupõe que você tenha configurado seu cluster AKS com SSH baseado no Entra ID. Caso contrário, consulte Gerenciar SSH para obter acesso seguro aos nós do AKS (Serviço de Kubernetes do Azure).

Crie grupos de demonstração no Microsoft Entra ID

Nesta seção, criamos quatro grupos na ID do Microsoft Entra:

  • Padrão: este grupo tem acesso somente leitura (Azure Kubernetes Service RBAC Reader) aos recursos no cluster do AKS.
  • Administrador: este grupo tem acesso de administrador (Azure Kubernetes Service RBAC Admin) aos recursos no cluster do AKS.
  • Acesso ao nó: esse grupo tem permissões para acessar nós do cluster via SSH usando a autenticação Entra ID (Virtual Machine User Login).
  • Aprovador: esse grupo tem permissões para aprovar ou negar solicitações de acesso just-in-time ao cluster e aos nós do AKS.

Você pode usar apenas os grupos padrão e de administrador em vez de criar um grupo de aprovadores separado. No entanto, se você incluir permissões de aprovação no grupo de administradores, o membro que obtém acesso just-in-time poderá aprovar suas próprias solicitações e as solicitações de outras pessoas. Não recomendamos o uso dessa configuração em um ambiente de produção, mas ela é útil para fins de teste.

Crie um grupo padrão

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

    AKS_ID=$(az aks show \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --query id \
        --output tsv)
    
  2. Obtenha o ID do grupo de recursos do cluster AKS usando o comando az group show.

    RG_ID=$(az group show \
        --resource-group <resource-group-name> \
        --query id \
        --output tsv)
    
  3. Crie o grupo padrão usando o comando az ad group create.

    DEFAULT_ID=$(az ad group create \
        --display-name default \
        --mail-nickname default \
        --query id \
        --output tsv)
    
  4. Crie uma atribuição de função do Azure para o grupo padrão usando o comando az role assignment create.

    três funções que você pode atribuir ao grupo padrão, dependendo de seus requisitos específicos:

    • Azure Kubernetes Service RBAC Reader: atribuído no escopo do cluster do AKS e fornece acesso básico somente leitura à maioria dos recursos no cluster.
    • Reader: atribuído no escopo do grupo de recursos e fornece acesso somente leitura aos recursos no grupo de recursos.
    • Azure Kubernetes Service Cluster User Role: atribuído no escopo do cluster do AKS e dá acesso para obter o contexto kubeconfig para o cluster do AKS.
    # Assign the Azure Kubernetes Service RBAC Reader role to the default group
    az role assignment create \
        --role "Azure Kubernetes Service RBAC Reader" \
        --assignee $DEFAULT_ID \
        --scope $AKS_ID
    
    # Assign the Reader role to the default group
    az role assignment create \
        --role "Reader" \
        --assignee $DEFAULT_ID \
        --scope $RG_ID
    
    # Assign the Azure Kubernetes Service Cluster User Role to the default group
    az role assignment create \
        --role "Azure Kubernetes Service Cluster User Role" \
        --assignee $DEFAULT_ID \
        --scope $AKS_ID
    

Crie um grupo de administradores

  1. Crie o grupo de administradores usando o comando az ad group create.

    ADMIN_ID=$(az ad group create \
        --display-name admin \
        --mail-nickname admin \
        --query id \
        --output tsv)
    
  2. Atribua a função Azure Kubernetes Service RBAC Admin ao grupo de administradores usando o comando az role assignment create.

    az role assignment create \
        --role "Azure Kubernetes Service RBAC Admin" \
        --assignee $ADMIN_ID \
        --scope $AKS_ID
    

Observação

Se você quiser permitir que os usuários no grupo de administradores alterem as configurações do pool de nós, como a escala manual, será necessário criar uma atribuição de função Contributor no pool de nós de cluster usando o seguinte comando:

az role assignment create \
   --role "Contributor" \
   --assignee $ADMIN_ID \
   --scope $AKS_ID/nodepools/<node-pool-name>

Lembre-se de que isso só dá permissão para escalar para dentro ou para fora do recurso AKS. Se você deseja permitir o aumento ou a redução da escala do recurso Conjunto de Dimensionamento de Máquinas Virtuais, precisa criar uma atribuição no nível do Conjunto de Dimensionamento de Máquinas Virtuais.

Crie um grupo aprovador

  • Crie o grupo aprovador usando o comando az ad group create.

    APPROVER_ID=$(az ad group create \
        --display-name approver \
        --mail-nickname approver \
        --query id \
        --output tsv)
    

Criar grupo de acesso a nós

  1. Crie o grupo de acesso ao nó usando o comando az ad group create.

    NODEACCESS_ID=$(az ad group create \
        --display-name node-access \
        --mail-nickname node-access \
        --query id \
        --output tsv)
    
  2. Obtenha o ID do recurso do grupo de recursos do nó (também conhecido como grupo de recursos de infraestrutura) usando o comando az aks show.

    NODE_RG_ID=$(az aks show \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --query nodeResourceGroup \
        --output tsv)
    
    NODE_RG_SCOPE=$(az group show \
        --name $NODE_RG_ID \
        --query id \
        --output tsv)
    
  3. Atribua a Virtual Machine User Login função ao grupo node-access com o comando az role assignment create.

    az role assignment create \
        --role "Virtual Machine User Login" \
        --assignee $NODEACCESS_ID \
        --scope $NODE_RG_SCOPE
    

    Observação

    Se você quiser conceder acesso de administrador a nós, use a função Virtual Machine Administrator Login.

Crie usuários de demonstração no Microsoft Entra ID

Nesta seção, criamos dois usuários no Microsoft Entra ID: um usuário normal com apenas a função padrão, e um usuário privilegiado que pode aprovar ou negar solicitações just-in-time do usuário normal.

  1. Crie o usuário normal usando o comando az ad user create. Para os comandos de variável de senha, os valores ficam ocultos para que não sejam exibidos no console.

    DOMAIN=contoso.com
    read -sp 'Enter password for NUSER_ID: ' NUSERPASSWORD
    read -sp 'Enter password for PUSER_ID: ' PUSERPASSWORD
    
    NUSER_ID=$(az ad user create \
        --display-name n01 \
        --password ${NUSERPASSWORD} \
        --user-principal-name n01@${DOMAIN} \
        --query id \
        --output tsv)
    
  2. Adicione o usuário normal ao grupo padrão usando o comando az ad group member add.

    az ad group member add \
        --group $DEFAULT_ID \
        --member-id $NUSER_ID
    
  3. Crie o usuário privilegiado usando o comando az ad user create.

    PUSER_ID=$(az ad user create \
        --display-name p01 \
        --password ${PUSERPASSWORD} \
        --user-principal-name p01@${DOMAIN} \
        --query id \
        --output tsv)
    
  4. Adicione o usuário privilegiado ao grupo aprovador usando o comando az ad group member add.

    az ad group member add \
        --group $APPROVER_ID \
        --member-id $PUSER_ID
    

Habilite o PIM (Privileged Identity Management) para o grupo de administradores

Esta seção mostra como habilitar o PIM para o grupo admin para fornecer acesso just-in-time ao plano de controle do cluster AKS.

  1. Na Página inicial do portal do Azure, selecione Microsoft Entra ID.
  2. No menu de serviço, em Gerenciar, selecione Grupos e selecione o grupo de administradores.
  3. No menu de serviço, em Atividade, selecione Privileged Identity Management e, em seguida, selecione Habilitar PIM para este grupo.

Defina um aprovador para o grupo de administradores

  1. Na Home page do portal do Azure, pesquise e selecione o Privileged Identity Management.

  2. No menu de serviço, em Gerenciar, selecione Grupos e selecione o grupo de administradores.

  3. No menu de serviço, em Gerenciar, selecione Atribuições>Adicionar atribuições.

  4. Na guia Associação da página Adicionar atribuições, selecione Membro como a função selecionada e padrão como o membro selecionado e selecione Avançar.

  5. Na guia Configurações, selecione Qualificado como o tipo de atribuição e selecione Atribuir.

  6. No menu de serviço, em Gerenciar, selecione Configurações>Membro>Editar.

  7. Na página Editar configuração de função – Membro, selecione a caixa de seleção Exigir aprovação para ativar e adicione o grupo de aprovadores como o aprovador selecionado.

    Observação

    Se você não selecionar a caixa de seleção Exigir aprovação para ativar, os usuários no grupo padrão poderão ativar automaticamente a função para obter acesso just-in-time ao cluster do AKS sem aprovação. O usuário no grupo de aprovadores precisa ser membro do grupo. Mesmo que você defina o usuário como o proprietário, ele ainda não poderá examinar solicitações just-in-time porque o proprietário do grupo só tem direitos administrativos para o grupo, não a atribuição de função. Você pode definir o usuário como o membro e o proprietário do mesmo grupo sem conflitos.

  8. Faça outras alterações necessárias e selecione Atualizar.

Para obter mais informações sobre a configuração do PIM, confira Configurar o PIM para grupos.

Habilitar o Gerenciamento de Identidades Privilegiadas (PIM) para o grupo de acesso aos nós

Esta seção mostra como habilitar o PIM para o grupo node-access para fornecer acesso SSH just-in-time aos nós de cluster.

  1. Na Página inicial do portal do Azure, selecione Microsoft Entra ID.
  2. No menu de serviço, em Gerenciar, selecione Grupos e selecione o grupo node-access.
  3. No menu de serviço, em Atividade, selecione Privileged Identity Management e, em seguida, selecione Habilitar PIM para este grupo.

Defina um aprovador para o grupo de acesso ao nó

  1. Na Home page do portal do Azure, pesquise e selecione o Privileged Identity Management.
  2. No menu de serviço, em Gerenciar, selecione Grupos e selecione o grupo node-access.
  3. No menu de serviço, em Gerenciar, selecione Atribuições>Adicionar atribuições.
  4. Na guia Associação da página Adicionar atribuições, selecione Membro como a função selecionada e padrão como o membro selecionado e selecione Avançar.
  5. Na guia Configurações, selecione Qualificado como o tipo de atribuição e selecione Atribuir.
  6. No menu de serviço, em Gerenciar, selecione Configurações>Membro>Editar.
  7. Na página Editar configuração de função – Membro, selecione a caixa de seleção Exigir aprovação para ativar e adicione o grupo de aprovadores como o aprovador selecionado.
  8. Faça outras alterações necessárias e selecione Atualizar.

Interagir com recursos de cluster usando a função padrão

Agora, podemos tentar acessar o cluster do AKS usando o usuário normal, que é membro do grupo padrão.

  1. Faça logon no portal do Azure como o usuário normal usando o comando az login.

    az login --username n01@$DOMAIN --password ${NUSERPASSWORD}
    

    A Microsoft recomenda que você use o método mais seguro disponível para entrar no Azure. Para obter mais informações, consulte os seguintes artigos:

  2. Obtenha as credenciais de usuário para acessar o cluster usando o comando az aks get-credentials.

    az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>
    
  3. Tente acessar os pods de cluster usando o comando kubectl get.

    kubectl get pods --namespace kube-system
    

    Sua saída deve ser semelhante à seguinte saída de exemplo, que mostra os pods no namespace kube-system:

    NAME                                   READY   STATUS    RESTARTS   AGE
    azure-ip-masq-agent-2rdd9              1/1     Running   0          30h
    azure-policy-767c9d9d9d-886rf          1/1     Running   0          31h
    cloud-node-manager-92t6h               1/1     Running   0          30h
    coredns-789789675-b2dhg                1/1     Running   0          31h
    coredns-autoscaler-77bbc46446-pgt92    1/1     Running   0          31h
    csi-azuredisk-node-lnzrf               3/3     Running   0          30h
    csi-azurefile-node-lhbxr               3/3     Running   0          31h
    konnectivity-agent-7645d94b-9wqct      1/1     Running   0          30h
    kube-proxy-lkx4w                       1/1     Running   0          31h
    metrics-server-5955767688-lpbjb        2/2     Running   0          30h
    
  4. Tente acessar os segredos do cluster usando o comando kubectl get.

    kubectl get secrets --namespace kube-system
    

    O resultado deve ser semelhante ao exemplo a seguir, que mostra uma mensagem de erro porque o usuário não tem permissão para acessar os segredos:

    Error from server (Forbidden): secrets is forbidden: User "[email protected]" cannot list resource "secrets" in API group "" in the namespace "kube-system": User does not have access to the resource in Azure. Update role assignment to allow access.
    

    A função Azure Kubernetes Service RBAC Reader não tem permissão para acessar segredos, portanto, esse erro é esperado.

Solicitar acesso just-in-time ao cluster do AKS

Esta seção mostra como solicitar acesso just-in-time como temporário Azure Kubernetes Service RBAC Admin para acesso ao plano de controle do cluster. Siga os passos descritos em Ativar sua associação ou propriedade de grupo em Privileged Identity Management. Para saber como aprovar ou negar solicitações como aprovador, consulte Aprovar solicitações de ativação para membros e proprietários do grupo.

Solicitar acesso SSH just-in-time a nós de cluster

Esta seção mostra como solicitar acesso SSH just-in-time a nós de cluster ativando temporariamente a associação no grupo node-access.

  1. Na Home page do portal do Azure, pesquise e selecione o Privileged Identity Management.
  2. No menu de serviço, selecione Minhas funções>Grupos.
  3. Localize o grupo node-access na lista de atribuições elegíveis e selecione Ativar.
  4. Forneça uma justificativa para a solicitação de ativação e selecione Ativar.
  5. Se a aprovação for necessária, aguarde até que o aprovador aprove sua solicitação. Você receberá uma notificação quando sua solicitação for aprovada.
  6. Depois de ativado, você pode fazer SSH nos nós do cluster usando a autenticação via Entra ID.

SSH nos nós do cluster com acesso just-in-time

Depois que o acesso just-in-time ao grupo node-access for ativado, você poderá fazer SSH nos nós do cluster usando a autenticação pelo Entra ID.

  1. Instale a extensão SSH para a CLI do Azure:

    az extension add --name ssh
    
  2. Obtenha a lista de nós em seu cluster:

    kubectl get nodes
    
  3. SSH em um nó usando autenticação com o Entra ID:

    az ssh vm --resource-group <resource-group-name> --name <node-name>
    
  4. Durante o fluxo de autenticação, entre com suas credenciais de Entra ID que agora têm acesso temporário ao grupo node-access.

  5. Após a autenticação bem-sucedida, você será conectado ao nó com as permissões que a atribuição de função concede.

Observação

Se você configurou políticas de Acesso Condicional para acesso SSH a nós, precisará atender a esses requisitos durante o fluxo de autenticação.

Interagir com recursos de cluster usando a função de administrador

Depois de adicionar temporariamente a função Azure Kubernetes Service RBAC Admin, você poderá acessar os recursos de cluster que exigem permissões de administrador.

  1. Remova tokens armazenados existentes usando o seguinte comando kubelogin:

    kubelogin remove-tokens
    

    Observação

    Se você encontrar um erro devido à falta de permissões, faça logon para atualizar as permissões usando o comando az login.

  2. Tente acessar os segredos do cluster novamente usando o comando kubectl get secrets.

    kubectl get secrets --namespace kube-system
    

    Sua saída deve ser semelhante à seguinte saída de exemplo, que mostra os segredos no namespace kube-system:

    NAME                     TYPE                            DATA   AGE
    bootstrap-token-sw3rck   bootstrap.kubernetes.io/token   4      35h
    konnectivity-certs       Opaque                          3      35h
    

    O usuário agora pode acessar os segredos porque tem a função Azure Kubernetes Service RBAC Admin.

Considerações sobre o tempo de vida do token

Devido ao design de tempo de vida do token, se você estiver concedendo funções a usuários que usam ferramentas da CLI, como kubectl ou kubelogin, tecnicamente, a duração da ativação não poderá ser inferior a 60 minutos. Mesmo que a duração seja definida para menos de 60 minutos, a duração efetiva real permanece entre 60 e 75 minutos.

Quando kubelogin tenta obter tokens da plataforma de identidade da Microsoft e access_token e refresh_token são retornados para uso adicional. O access_token faz solicitações para a API, e refresh_token é usado para obter um novo access_token quando o atual expira. O access_token não pode ser revogado uma vez que é gerado, mas o refresh_token pode ser revogado. Se o refresh_token for revogado, o usuário precisará se autenticar novamente para obter um novo refresh_token. Para revogar o refresh_token manualmente, você pode usar Revoke-AzureADUserAllRefreshToken.

Próximas etapas

Para obter mais informações, consulte os seguintes artigos: