Partilhar via


Tutorial: Configurar funções de controlo de acesso baseado em funções (RBAC) no Azure Kubernetes Service (AKS) com o Ansible

Importante

O Ansible 2.8 (ou posterior) é necessário para executar os playbooks de exemplo neste artigo.

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

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

Neste artigo, você aprenderá a:

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

Pré-requisitos

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

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

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

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

  • Segredo da aplicação de servidor
  • ID do aplicativo do servidor
  • ID do aplicativo cliente
  • ID do inquilino

Esses valores são necessários para executar o playbook de exemplo.

Criar um cluster do AKS

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

Aqui estão algumas notas-chave a considerar ao trabalhar com o manual de exemplo:

  • O guia é carregado ssh_key a partir de ~/.ssh/id_rsa.pub. Se você 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 credenciais padrão. Você pode definir estes valores para o seu principal de serviço ou pode carregar estes valores a partir de variáveis de ambiente.

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

Salve o seguinte playbook 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 a ID do objeto Microsoft Entra

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

  1. Inicie sessão no portal Azure.

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

  3. Clique em Enter.

  4. No menu Gerenciar , selecione Usuários.

  5. No campo "Nome", pesquise a sua conta.

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

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

Criar vinculação RBAC

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

Salve o seguinte playbook 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 marcador "<your-aad-account>" pelo ID do objeto do locatário do Microsoft Entra.

Salve o seguinte manual - 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"

Execute o playbook de exemplo

Esta seção lista o exemplo completo de manual que chama as tarefas criadas neste artigo.

Salve o seguinte playbook 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 secção vars, substitua os seguintes marcadores de posição pelas informações do Microsoft Entra:

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

Execute o playbook completo usando o comando ansible-playbook.

ansible-playbook aks-rbac.yml

Verificar os resultados

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

Digite o seguinte comando em um prompt de terminal:

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

O comando irá direcioná-lo para uma página de autenticação. Inicie sessão com a sua conta do Azure.

Uma vez autenticado, kubectl lista os nós de forma semelhante 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

Limpeza de recursos

Quando não for mais necessário, 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"

Execute o livro de estratégias usando ansible-playbook

ansible-playbook cleanup.yml

Próximos passos