Tutorial: Configurar funções de RBAC (controle de acesso baseado em função) no AKS (Serviço de Kubernetes do Azure) usando o Ansible

Importante

O Ansible 2.8 (ou posterior) é necessário para executar os guias estratégicos de exemplo deste artigo.

O AKS (Serviço de Kubernetes do Azure) simplifica a implantação de um cluster do Kubernetes gerenciado no Azure. O AKS reduz a complexidade e a sobrecarga operacional de gerenciar o Kubernetes passando grande parte dessa responsabilidade para o Azure. Como um serviço Kubernetes hospedado, o Azure lida com as tarefas críticas para você, como o monitoramento da integridade e a manutenção. Os mestres de Kubernetes são gerenciados pelo Azure. Você só gerencia e mantém os nós de agente. Como um serviço do Kubernetes gerenciado, o AKS é gratuito: você paga apenas pelos nós de agentes dentro dos clusters, não pelos mestres.

O AKS pode ser configurado para usar o Microsoft Entra ID para autenticação de usuário. Uma vez configurado, você usa seu token de autenticação do Microsoft Entra para entrar no cluster do AKS. O RBAC pode ser baseado na identidade de um usuário ou na associação do grupo de diretórios.

Neste artigo, você aprenderá como:

  • Criar um cluster do AKS habilitado para Microsoft Entra ID
  • Configurar uma função RBAC no cluster

Pré-requisitos

  • Assinatura do Azure: caso você não tenha uma assinatura do Azure, crie uma conta gratuita antes de começar.
  • Instalar a biblioteca do RedHat OpenShift - pip install openshift

Configurar o Microsoft Entra ID para autenticação do AKS

Ao configurar o Microsoft Entra ID para autenticação do AKS, dois aplicativos do Microsoft Entra são configurados. Essa operação deve ser concluída por um administrador de locatário do Azure. Para obter mais informações, consulte Integrar o Microsoft Entra ID com o AKS.

Do administrador do locatário do Azure, obtenha os seguintes valores:

  • Segredo do aplicativo do servidor
  • ID do aplicativo do servidor
  • ID do aplicativo cliente
  • ID do locatário

Esses valores são necessários para executar o guia estratégico de exemplo.

Criar um cluster AKS

Nesta seção, você criará um AKS com o aplicativo Microsoft Entra.

Há algumas observações importantes a serem consideradas ao trabalhar com o guia estratégico de exemplo:

  • O guia estratégico carrega ssh_key a partir de ~/.ssh/id_rsa.pub. Se for modificá-lo, use o formato de linha única, começando com "ssh-rsa" (sem as aspas).

  • Os valores client_id e client_secret são carregados de ~/.azure/credentials, que é o arquivo de credencial padrão. Você pode definir esses valores para sua entidade de serviço ou carregar esses valores a partir de variáveis de ambiente:

    client_id: "{{ lookup('env', 'AZURE_CLIENT_ID') }}"
    client_secret: "{{ lookup('env', 'AZURE_SECRET') }}"
    

Salve o guia estratégico a seguir como aks-create.yml:

- name: Create resource group
  azure_rm_resourcegroup:
      name: "{{ resource_group }}"
      location: "{{ location }}"

- name: List supported kubernetes version from Azure
  azure_rm_aksversion_facts:
      location: "{{ location }}"
  register: versions

- name: Create AKS cluster with RBAC enabled
  azure_rm_aks:
      resource_group: "{{ resource_group }}"
      name: "{{ name }}"
      dns_prefix: "{{ name }}"
      enable_rbac: yes
      kubernetes_version: "{{ versions.azure_aks_versions[-1] }}"
      agent_pool_profiles:
        - count: 3
          name: nodepool1
          vm_size: Standard_D2_v2
      linux_profile:
          admin_username: azureuser
          ssh_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
      service_principal:
          client_id: "{{ lookup('ini', 'client_id section=default file=~/.azure/credentials') }}"
          client_secret: "{{ lookup('ini', 'secret section=default file=~/.azure/credentials') }}"
      aad_profile:
          client_app_id: "{{ client_app_id }}"
          server_app_id: "{{ server_app_id }}"
          server_app_secret: "{{ server_app_secret }}"
          tenant_id: "{{ app_tenant_id }}"
  register: aks

- name: Save cluster user config
  copy:
      content: "{{ aks.kube_config }}"
      dest: "aks-{{ name }}-kubeconfig-user"

- name: Get admin config of AKS
  azure_rm_aks_facts:
      resource_group: "{{ resource_group }}"
      name: "{{ name }}"
      show_kubeconfig: admin
  register: aks

- name: Save the kubeconfig
  copy:
      content: "{{ aks.aks[0].kube_config }}"
      dest: "aks-{{ name }}-kubeconfig"

Obter o ID do objeto Microsoft Entra

Para criar uma associação RBAC, primeiro você precisa obter o ID do objeto Microsoft Entra.

  1. Entre no portal do Azure.

  2. No campo de pesquisa, na parte superior da página, insira Microsoft Entra ID.

  3. Clique no Enter.

  4. No menu Gerenciar, selecione Usuários.

  5. No campo do nome, pesquise sua conta.

  6. Na coluna Nome, selecione o link para sua conta.

  7. Na seção Identidade, copie a ID do Objeto.

Criar associação do RBAC

Nesta seção, você cria uma associação de função ou uma associação de função de cluster no AKS.

Salve o guia estratégico a seguir como kube-role.yml:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cluster-admins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: <your-aad-account>

Substitua o espaço reservado <your-aad-account> por seu locatário do Microsoft Entra Object ID.

Salve o guia estratégico a seguir, que implanta sua nova função no AKS, como aks-kube-deploy.yml:

- name: Apply role to AKS
  k8s:
      src: kube-role.yml
      kubeconfig: "aks-{{ name }}-kubeconfig"

Executar o guia estratégico de exemplo

Esta seção lista o guia estratégico de exemplo completo que chama as tarefas criadas neste artigo.

Salve o guia estratégico a seguir como aks-rbac.yml:

---
- hosts: localhost
  vars:
      resource_group: aksansibletest
      name: aksansibletest
      location: eastus
  tasks:
     - name: Ensure resource group exist
       azure_rm_resourcegroup:
           name: "{{ resource_group }}"
           location: "{{ location }}"

     - name: Create AKS
       vars:
           client_app_id: <client id>
           server_app_id: <server id>
           server_app_secret: <server secret>
           app_tenant_id: <tenant id>
       include_tasks: aks-create.yml

     - name: Enable RBAC
       include_tasks: aks-kube-deploy.yml

Na seção vars, substitua os seguintes espaços reservados pelas suas informações do Microsoft Entra:

  • <client id>
  • <server id>
  • <server secret>
  • <tenant id>

Execute o guia estratégico completo usando o comando ansible-playbook:

ansible-playbook aks-rbac.yml

Verifique os resultados

Nesta seção, você usa o kubectl para listar os nós criados neste artigo.

Insira o comando a seguir em um prompt do terminal:

kubectl --kubeconfig aks-aksansibletest-kubeconfig-user get nodes

O comando irá direcionar você para uma página de autenticação. Faça logon usando sua conta do Azure.

Uma vez autenticado, o kubectl lista os nós de maneira similar aos seguintes resultados:

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code XXXXXXXX to authenticate.
NAME                       STATUS   ROLES   AGE   VERSION
aks-nodepool1-33413200-0   Ready    agent   49m   v1.12.6
aks-nodepool1-33413200-1   Ready    agent   49m   v1.12.6
aks-nodepool1-33413200-2   Ready    agent   49m   v1.12.6

Limpar os recursos

Quando não forem mais necessários, exclua os recursos criados neste artigo.

Salve o seguinte código como cleanup.yml:

---
- hosts: localhost
  vars:
      name: aksansibletest
      resource_group: aksansibletest
  tasks:
      - name: Clean up resource group
        azure_rm_resourcegroup:
            name: "{{ resource_group }}"
            state: absent
            force: yes
      - name: Remove kubeconfig
        file:
            state: absent
            path: "aks-{{ name }}-kubeconfig"

Executar o guia estratégico usando ansible-playbook

ansible-playbook cleanup.yml

Próximas etapas