Tutorial: Configurar funções de controle de acesso baseado em função (RBAC) no Serviço Kubernetes do Azure (AKS) usando 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. Enquanto serviço alojado do Kubernetes, o Azure lida com tarefas críticas para si, como a monitorização do estado de funcionamento e a manutenção. Os mestres do Kubernetes são geridos pelo Azure. Pode apenas gerir e manter os nós dos agentes. Como um serviço Kubernetes gerenciado, o AKS é gratuito - você paga apenas pelos nós do agente dentro de seus clusters; não para os mestres.
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, vai aprender a:
- Criar um cluster AKS habilitado para ID do Microsoft Entra
- Configurar uma função RBAC no cluster
Pré-requisitos
- Subscrição do Azure: se não tem uma subscrição do Azure, crie uma conta gratuita antes de começar.
- Entidade de serviço do Azure: crie uma entidade de serviço, anotando os seguintes valores: appId, displayName, senha e locatário.
Instale o Ansible: execute uma das seguintes opções:
- Instalar e configurar o Ansible em uma máquina virtual Linux
- Configure o Azure Cloud Shell e, se você não tiver acesso a uma máquina virtual Linux, crie uma máquina virtual com o Ansible.
- 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 do aplicativo do servidor
- ID do aplicativo do servidor
- ID do aplicativo cliente
- ID de Inquilino do
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 manual é 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
client_id
valores eclient_secret
são carregados de , que é o arquivo de~/.azure/credentials
credenciais padrão. Você pode definir esses valores para sua entidade de serviço ou carregar esses valores de variáveis de ambiente:client_id: "{{ lookup('env', 'AZURE_CLIENT_ID') }}" client_secret: "{{ lookup('env', 'AZURE_SECRET') }}"
Guarde o manual de procedimentos seguinte 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.
Inicie sessão no portal do Azure.
No campo de pesquisa na parte superior da página, digite Microsoft Entra ID.
Clique em
Enter
.No menu Gerenciar, selecione Usuários.
No campo nome, procure a sua conta.
Na coluna Nome, selecione o link para sua conta.
Na seção Identidade, copie a ID do objeto.
Criar vinculação RBAC
Nesta seção, você cria uma vinculação de função ou uma vinculação de função de cluster no AKS.
Guarde o manual de procedimentos seguinte 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 pela ID do <your-aad-account>
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.
Guarde o manual de procedimentos seguinte 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 , substitua os seguintes espaços reservados pelas informações do vars
Microsoft Entra:
<client id>
<server id>
<server secret>
<tenant id>
Execute o playbook completo usando o ansible-playbook
comando:
ansible-playbook aks-rbac.yml
Verificar os resultados
Nesta seção, você usa a lista kubectl dos 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
Clean up resources (Limpar 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 playbook usando o ansible-playbook
ansible-playbook cleanup.yml