top of page
Foto do escritorRafael Natali

Protegendo seu Azure Kubernetes Services Cluster

Neste artigo, vou apresentar minha perspectiva sobre como proteger um cluster de Azure Kubernetes com o princípio de privilégio mínimo como prioridade. Explicarei as funções internas disponíveis no Azure Kubernetes, o papel dos grupos do Microsoft Entra (anteriormente conhecido como Azure Active Directory) e como utilizar o Kubernetes RBAC para gerenciar o acesso às workloads.




Autenticação e Autorização


Configure o cluster para integrá-lo ao Microsoft Entra e aproveite para gerenciar usuários e grupos a partir de um gerenciamento central de identidades.


Grupos do Microsoft Entra e Funções do Azure Kubernetes


Crie um ou mais Grupos do Entra para separar os administradores dos não administradores. O número e a estrutura dos grupos dependerão da sua organização. Vamos supor que criamos dois grupos:


  • admin

  • desenvolvedores


Agora, precisamos atribuir funções a esses grupos. Existem duas Roles do Azure Kubernetes que utilizo:

Função

Descrição

Azure Kubernetes Service Cluster User Role

Essa role permite que o usuário faça login no cluster; no entanto, se não existirem (Cluster)RoleBindings, o usuário não poderá executar nenhum comando kubectl.

Azure Kubernetes Service RBAC Cluster Admin

Permite ao usuário controle total sobre todos os recursos do cluster.

O grupo "admin" terá a função de "RBAC Cluster Admin" e o grupo "desenvolvedores" terá a função de "User Role". Com essa atribuição de funções, alcançamos o princípio de privilégio mínimo, pois negamos todos os comandos do kubectl para o grupo "desenvolvedores". A partir de agora, eu, como administrador, utilizarei o Kubernetes RBAC para controlar o que os desenvolvedores podem fazer. O RBAC que você implementará variará de acordo com seus casos de uso.


Kubernetes RBAC


Agora, por exemplo, vou conceder permissões para que o grupo "desenvolvedores" possa ler Pods no namespace de desenvolvimento (dev) utilizando a seguinte Role:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: dev
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

Obtenha o ID do recurso para o grupo "developers" usando o comando az ad group show. Esse grupo será definido como o sujeito de um RoleBinding no próximo passo.

az ad group show --group developers --query id -o tsv

Crie uma RoleBinding para o grupo "desenvolvedores" utilizar a Role criada anteriormente para ler Pods.

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: dev-user-access
  namespace: dev
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: pod-reader
subjects:
- kind: Group
  namespace: dev
  name: <groupObjectId> # output of the az ad group show

Agora, os membros do grupo "desenvolvedores" poderão ler Pods no namespace dev.


Resumo


Podemos configurar grupos de não administradores com a função "Azure Kubernetes Service Cluster User Role" para impor efetivamente uma política de "negação total". Isso significa que os membros desses grupos não terão permissão para executar nenhuma ação no cluster Kubernetes. O administrador pode, então, conceder seletivamente apenas as permissões necessárias para esses grupos.

Essa abordagem permite que o administrador proteja segredos do Kubernetes contra acesso não autorizado, impeça a exclusão de Pods do sistema e controle o acesso a namespaces específicos, o que é particularmente útil em ambientes multi-inquilino.

Na minha visão, é melhor começar com um ambiente fechado e, em seguida, gradualmente abrir o acesso conforme necessário, em vez de começar com acesso aberto e depois tentar restringi-lo.


Referência





1 visualização0 comentário

Comments


bottom of page