Integração do Azure Active Directory gerido pelo AKS

A integração do Azure Active Directory (Azure AD) gerido pelo AKS simplifica o processo de integração Azure AD. Anteriormente, era necessário criar uma aplicação de cliente e servidor e o inquilino Azure AD tinha de conceder permissões de Leitura do Diretório. Agora, o fornecedor de recursos do AKS gere as aplicações de cliente e servidor por si.

descrição geral da autenticação Azure AD

Os administradores de clusters podem configurar o controlo de acesso baseado em funções do Kubernetes (RBAC do Kubernetes) com base na identidade de um utilizador ou na associação a um grupo de diretórios. Azure AD autenticação é fornecida aos clusters do AKS com o OpenID Connect. O OpenID Connect é uma camada de identidade criada sobre o protocolo OAuth 2.0. Para obter mais informações sobre o OpenID Connect, consulte a documentação Abrir ligação do ID.

Saiba mais sobre o fluxo de integração Azure AD na documentação do Azure AD.

Limitações

  • A integração de Azure AD gerida pelo AKS não pode ser desativada.
  • A alteração de um cluster integrado Azure AD gerido pelo AKS para Azure AD legada não é suportada.
  • Os clusters sem o RBAC do Kubernetes ativado não são suportados com a integração de Azure AD gerida pelo AKS.

Pré-requisitos

Antes de começar, certifique-se de que tem os seguintes pré-requisitos:

  • Versão 2.29.0 ou posterior da CLI do Azure.
  • kubectl, com uma versão mínima de 1.18.1 ou kubelogin.
  • Se estiver a utilizar o helm, precisa de uma versão mínima do helm 3.3.

Importante

Tem de utilizar kubectl com uma versão mínima de 1.18.1 ou kubelogin. A diferença entre as versões secundárias do Kubernetes e kubectl não deve ser superior a 1 versão. Irá deparar-se com problemas de autenticação se não utilizar a versão correta.

Utilize os seguintes comandos para instalar o kubectl e o kubelogin:

sudo az aks install-cli
kubectl version --client
kubelogin --version

Utilize estas instruções para outros sistemas operativos.

Antes de começar

Precisa de um grupo de Azure AD para o cluster. Este grupo será registado como um grupo de administradores no cluster para conceder permissões de administrador do cluster. Pode utilizar um grupo de Azure AD existente ou criar um novo. Certifique-se de que regista o ID do objeto do seu grupo de Azure AD.

# List existing groups in the directory
az ad group list --filter "displayname eq '<group-name>'" -o table

Utilize o seguinte comando para criar um novo grupo de Azure AD para os administradores do cluster:

# Create an Azure AD group
az ad group create --display-name myAKSAdminGroup --mail-nickname myAKSAdminGroup

Criar um cluster do AKS com Azure AD ativado

  1. Criar um grupo de recursos do Azure.
# Create an Azure resource group
az group create --name myResourceGroup --location centralus
  1. Crie um cluster do AKS e ative o acesso de administração para o seu grupo de Azure AD.
# Create an AKS-managed Azure AD cluster
az aks create -g myResourceGroup -n myManagedCluster --enable-aad --aad-admin-group-object-ids <id> [--aad-tenant-id <id>]

Uma criação bem-sucedida de um cluster de Azure AD gerido pelo AKS tem a seguinte secção no corpo de resposta:

"AADProfile": {
    "adminGroupObjectIds": [
      "5d24****-****-****-****-****afa27aed"
    ],
    "clientAppId": null,
    "managed": true,
    "serverAppId": null,
    "serverAppSecret": null,
    "tenantId": "72f9****-****-****-****-****d011db47"
  }

Aceder a um cluster Azure AD ativado

Antes de aceder ao cluster com um grupo Azure AD definido, precisará da função incorporada Azure Kubernetes Service Utilizador do Cluster.

  1. Obtenha as credenciais de utilizador para aceder ao cluster.
 az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
  1. Siga as instruções para iniciar sessão.

  2. Utilize o comando kubectl get nodes para ver nós no cluster.

kubectl get nodes

NAME                       STATUS   ROLES   AGE    VERSION
aks-nodepool1-15306047-0   Ready    agent   102m   v1.15.10
aks-nodepool1-15306047-1   Ready    agent   102m   v1.15.10
aks-nodepool1-15306047-2   Ready    agent   102m   v1.15.10
  1. Configure o controlo de acesso baseado em funções do Azure (RBAC do Azure) para configurar outros grupos de segurança para os clusters.

Resolver problemas de acesso com Azure AD

Importante

Os passos descritos nesta secção ignoram a autenticação normal do grupo de Azure AD. Utilize-os apenas numa emergência.

Se estiver permanentemente bloqueado por não ter acesso a um grupo de Azure AD válido com acesso ao cluster, ainda pode obter as credenciais de administrador para aceder diretamente ao cluster.

Para efetuar estes passos, tem de ter acesso à função incorporada Administração cluster do Azure Kubernetes Service.

az aks get-credentials --resource-group myResourceGroup --name myManagedCluster --admin

Ativar a integração de Azure AD gerida pelo AKS no cluster existente

Pode ativar a integração de Azure AD gerida pelo AKS no cluster rbac do Kubernetes existente. Certifique-se de que define o grupo de administradores para manter o acesso no cluster.

az aks update -g MyResourceGroup -n MyManagedCluster --enable-aad --aad-admin-group-object-ids <id-1> [--aad-tenant-id <id>]

Uma ativação bem-sucedida de um cluster de Azure AD gerido pelo AKS tem a seguinte secção no corpo da resposta:

"AADProfile": {
    "adminGroupObjectIds": [
      "5d24****-****-****-****-****afa27aed"
    ],
    "clientAppId": null,
    "managed": true,
    "serverAppId": null,
    "serverAppSecret": null,
    "tenantId": "72f9****-****-****-****-****d011db47"
  }

Transfira as credenciais de utilizador novamente para aceder ao cluster ao seguir os passos aqui.

Atualizar para a integração de Azure AD gerida pelo AKS

Se o cluster utilizar a integração de Azure AD legada, pode atualizar para a integração de Azure AD gerida pelo AKS ao executar o seguinte comando:

az aks update -g myResourceGroup -n myManagedCluster --enable-aad --aad-admin-group-object-ids <id> [--aad-tenant-id <id>]

Uma migração bem-sucedida de um cluster de Azure AD gerido pelo AKS tem a seguinte secção no corpo de resposta:

"AADProfile": {
    "adminGroupObjectIds": [
      "5d24****-****-****-****-****afa27aed"
    ],
    "clientAppId": null,
    "managed": true,
    "serverAppId": null,
    "serverAppSecret": null,
    "tenantId": "72f9****-****-****-****-****d011db47"
  }

Para aceder ao cluster, siga os passos aqui para atualizar o kubeconfig.

Início de sessão não interativo com o kubelogin

Existem alguns cenários não interativos, como pipelines de integração contínua, que não estão atualmente disponíveis com kubectl. Pode utilizar kubelogin para ligar ao cluster com uma credencial de principal de serviço não interativa.

Desativar contas locais

Quando implementa um cluster do AKS, as contas locais são ativadas por predefinição. Mesmo ao ativar a integração RBAC ou Azure AD, --admin o acesso continua a existir como uma opção de backdoor não auditável. Pode desativar as contas locais com o parâmetro disable-local-accounts. O properties.disableLocalAccounts campo foi adicionado à API de cluster gerido para indicar se a funcionalidade está ativada ou não no cluster.

Nota

  • Em clusters com Azure AD integração ativada, os utilizadores atribuídos a um grupo de administradores Azure AD especificado pelo aad-admin-group-object-ids ainda podem obter acesso através de credenciais de não administrador. Em clusters sem Azure AD integração ativada e properties.disableLocalAccounts definida como true, qualquer tentativa de autenticação com credenciais de utilizador ou administrador falhará.

  • Depois de desativar contas de utilizador locais num cluster do AKS existente onde os utilizadores possam ter sido autenticados com contas locais, o administrador tem de rodar os certificados do cluster para revogar os certificados aos quais possam ter tido acesso. Se este for um novo cluster, não é necessária nenhuma ação.

Criar um novo cluster sem contas locais

Para criar um novo cluster do AKS sem contas locais, utilize o az aks create comando com o disable-local-accounts sinalizador.

az aks create -g <resource-group> -n <cluster-name> --enable-aad --aad-admin-group-object-ids <aad-group-id> --disable-local-accounts

No resultado, confirme que as contas locais foram desativadas ao verificar se o campo properties.disableLocalAccounts está definido como true.

"properties": {
    ...
    "disableLocalAccounts": true,
    ...
}

Tentar obter credenciais de administrador falhará com uma mensagem de erro a indicar que a funcionalidade está a impedir o acesso:

az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin

Operation failed with status: 'Bad Request'. Details: Getting static credential isn't allowed because this cluster is set to disable local accounts.

Desativar contas locais num cluster existente

Para desativar contas locais num cluster do AKS existente, utilize o az aks update comando com o disable-local-accounts parâmetro .

az aks update -g <resource-group> -n <cluster-name> --enable-aad --aad-admin-group-object-ids <aad-group-id> --disable-local-accounts

No resultado, confirme que as contas locais foram desativadas ao verificar se o campo properties.disableLocalAccounts está definido como true.

"properties": {
    ...
    "disableLocalAccounts": true,
    ...
}

Tentar obter credenciais de administrador falhará com uma mensagem de erro a indicar que a funcionalidade está a impedir o acesso:

az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin

Operation failed with status: 'Bad Request'. Details: Getting static credential isn't allowed because this cluster is set to disable local accounts.

Reativar contas locais num cluster existente

O AKS suporta a ativação de uma conta local desativada num cluster existente com o enable-local parâmetro .

az aks update -g <resource-group> -n <cluster-name> --enable-aad --aad-admin-group-object-ids <aad-group-id> --enable-local

No resultado, confirme que as contas locais foram reativadas ao verificar se o campo properties.disableLocalAccounts está definido como false.

"properties": {
    ...
    "disableLocalAccounts": false,
    ...
}

Tentar obter credenciais de administrador será bem-sucedida:

az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin

Merged "<cluster-name>-admin" as current context in C:\Users\<username>\.kube\config

Utilizar o Acesso Condicional com o Azure AD e o AKS

Ao integrar Azure AD com o cluster do AKS, também pode utilizar o Acesso Condicional para controlar o acesso ao cluster.

Nota

Azure AD Acesso Condicional é uma capacidade Azure AD Premium.

Conclua os seguintes passos para criar um exemplo de política de Acesso Condicional a utilizar com o AKS:

  1. Na portal do Azure, navegue para a página do Azure Active Directory.
  2. No painel esquerdo, selecione Aplicações empresariais.
  3. Na página Aplicações empresariais , no painel esquerdo, selecione Acesso Condicional.
  4. Na página Acesso Condicional , no painel esquerdo, selecione Políticas e, em seguida, selecione Nova política. Adicionar uma política de Acesso Condicional
  5. Introduza um nome para a política, por exemplo aks-policy.
  6. Em Atribuições , selecione Utilizadores e grupos. Escolha os seus utilizadores e grupos aos quais pretende aplicar a política. Neste exemplo, escolha o mesmo grupo de Azure AD que tem acesso de administrador ao cluster. Selecionar utilizadores ou grupos para aplicar a política de Acesso Condicional
  7. Em Aplicações ou ações na > cloud Incluir, selecione Selecionar aplicações. Procure Azure Kubernetes Service e, em seguida, selecione Azure Kubernetes Service Servidor do AAD. Selecionar Azure Kubernetes Service Servidor do AD para aplicar a política de Acesso Condicional
  8. Em Controlos de acesso > Conceder, selecione Conceder acesso, Exigir que o dispositivo seja marcado como conforme e selecione Selecionar. Selecionar para permitir apenas dispositivos conformes para a política de Acesso Condicional
  9. Confirme as suas definições e defina Ativar política como Ativado. Ativar a política de Acesso Condicional
  10. Selecione Criar para criar e ativar a política.

Depois de criar a política de Acesso Condicional, execute os seguintes passos para verificar se foi listada com êxito.

  1. Para obter as credenciais de utilizador para aceder ao cluster, execute o seguinte comando:

     az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
    
  2. Siga as instruções para iniciar sessão.

  3. Veja os nós no cluster com o kubectl get nodes comando :

    kubectl get nodes
    
  4. No portal do Azure, navegue para o Azure Active Directory. No painel esquerdo, selecione Aplicações empresariais e, em Atividade , selecioneInícios de sessão.

  5. Repare na parte superior dos resultados de um evento com o estado Falha e, na coluna Acesso Condicional , um estado de Êxito. Selecione o evento e, em seguida, selecione o separador Acesso Condicional . Repare que a política de Acesso Condicional está listada. Captura de ecrã que mostra a entrada de início de sessão falhada devido à política de Acesso Condicional.

Configurar o acesso just-in-time ao cluster com o Azure AD e o AKS

Outra opção para o controlo de acesso a clusters é utilizar Privileged Identity Management (PIM) para pedidos just-in-time.

Nota

O PIM é uma capacidade Azure AD Premium que requer um SKU Premium P2. Para obter mais informações sobre Azure AD SKUs, veja o guia de preços.

Para integrar pedidos de acesso just-in-time num cluster do AKS com a integração de Azure AD gerida pelo AKS, conclua os seguintes passos:

  1. No portal do Azure, navegue para o Azure Active Directory.
  2. Selecione Propriedades. Desloque-se para baixo até ao campo ID do Inquilino . O seu ID de inquilino estará na caixa. Tenha em atenção este valor, uma vez que é referenciado mais tarde num passo como <tenant-id>. Num browser, o ecrã portal do Azure do Azure Active Directory é apresentado com o ID do inquilino realçado.
  3. No painel esquerdo, em Gerir, selecione Grupos e, em seguida, selecione Novo grupo. Mostra o ecrã portal do Azure grupos do Active Directory com a opção
  4. Verifique se o tipo de grupo Segurança está selecionado e especifique um nome de grupo, como myJITGroup. Na opção Azure AD funções podem ser atribuídas a este grupo (Pré-visualização), selecione Sim e, em seguida, selecione Criar. Mostra o novo ecrã de criação de grupos do portal do Azure.
  5. Na página Grupos , selecione o grupo que acabou de criar e anote o ID do Objeto. Isto será referenciado num passo posterior como <object-id>. Mostra o ecrã portal do Azure do grupo acabado de criar, realçando o ID do Objeto
  6. Crie o cluster do AKS com a integração de Azure AD gerida pelo AKS com --aad-admin-group-objects-ids o az aks create comando e --aad-tenant-id parameters inclua os valores indicados nos passos anteriores.
    az aks create -g myResourceGroup -n myManagedCluster --enable-aad --aad-admin-group-object-ids <object-id> --aad-tenant-id <tenant-id>
    
  7. Na portal do Azure, selecione Atividade no painel esquerdo. Selecione Acesso Privilegiado (Pré-visualização) e, em seguida, selecione Ativar Acesso Privilegiado. É apresentada a página Acesso privilegiado (Pré-visualização) do portal do Azure, com
  8. Para conceder acesso, selecione Adicionar atribuições. É apresentado o ecrã Acesso privilegiado (Pré-visualização) do portal do Azure após a ativação. A opção
  9. Na lista pendente Selecionar função , selecione os utilizadores e grupos aos quais pretende conceder acesso ao cluster. Estas atribuições podem ser modificadas em qualquer altura por um administrador de grupo. Em seguida, selecione Seguinte. É apresentado o ecrã Adicionar atribuições da portal do Azure Associação, com um utilizador de exemplo selecionado para ser adicionado como membro. A opção
  10. Em Tipo de atribuição, selecione Ativo e, em seguida, especifique a duração pretendida. Forneça uma justificação e, em seguida, selecione Atribuir. Para obter mais informações sobre tipos de atribuição, veja Atribuir elegibilidade para um grupo de acesso privilegiado (pré-visualização) no Privileged Identity Management. O ecrã Definição Adicionar atribuições do portal do Azure é apresentado. É selecionado um tipo de atribuição

Assim que as atribuições tiverem sido efetuadas, verifique se o acesso just-in-time está a funcionar ao aceder ao cluster. Por exemplo:

 az aks get-credentials --resource-group myResourceGroup --name myManagedCluster

Siga os passos para iniciar sessão.

Utilize o kubectl get nodes comando para ver nós no cluster:

kubectl get nodes

Tenha em atenção o requisito de autenticação e siga os passos para autenticar. Se for bem-sucedido, deverá ver um resultado semelhante ao seguinte resultado:

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-61156405-vmss000000   Ready    agent   6m36s   v1.18.14
aks-nodepool1-61156405-vmss000001   Ready    agent   6m42s   v1.18.14
aks-nodepool1-61156405-vmss000002   Ready    agent   6m33s   v1.18.14

Aplicar acesso Just-in-Time ao nível do espaço de nomes

  1. Integre o cluster do AKS no RBAC do Azure.
  2. Associe o grupo que pretende integrar ao acesso Just-in-Time a um espaço de nomes no cluster através da atribuição de funções.
az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
  1. Associe o grupo que configurou ao nível do espaço de nomes ao PIM para concluir a configuração.

Resolução de problemas

Se kubectl get nodes devolver um erro semelhante ao seguinte erro:

Error from server (Forbidden): nodes is forbidden: User "aaaa11111-11aa-aa11-a1a1-111111aaaaa" cannot list resource "nodes" in API group "" at the cluster scope

Certifique-se de que o administrador do grupo de segurança atribuiu uma atribuição Ativa à sua conta.

Passos seguintes