Segurança do Cluster
8 minute read
Em linhas gerais o que veremos a seguir é a aplicação do modelo 4C's da segurança nativa da nuvem
, não necessariamente na ordem apresentada.

A Segurança no Kubernetes
O Kubernetes é formado por Nodes , portanto o primeiro passo é garantir a segurança dos mesmos, desabilitando a autenticação por senha e habilitando a autenticação por chave SSH;
Como a comunicação dentro de um cluster Kubernetes, os comandos, o gerenciamento, etc. passa pelo API Server, não podemos esquecer:
API Server Seguro == Kubernetes Seguro
Para manter a segurança no acesso ao API Server, precisamos pensar em:
- Quem pode acessar (Autenticação) e;
- O que pode fazer (Autorização);
Para garantir a segurança nas comunicações entre os componentes do cluster é fundamental o uso do TLS.
E como a premissa do Kubernetes é que todos os Pods podem se comunicar entre si, temos as Network Policies para implementar um controle nestas comunicações.
Link’s úteis:
Autenticação
Link’s úteis:
Conceitos básicos sobre TLS
O TLS (Transport Layer Security) é um protocolo de criptografia projetado para garantir a privacidade (confidencialidade), integridade e autenticidade na comunicação em uma rede de computadores através do uso de certificados digitais , ele é a base do HTTPS (Hypertext Transfer Protocol Secure) .
Link’s úteis:
TLS no Kubernetes
No Kubernetes para garantir a comunicação segura e confiável entre os componentes nos Worker Nodes, o kubelet e o kube-proxy , e os componentes no Control Plane , principalmente o kube-apiserver é altamente recomendável usar certificados TLS.

Link’s úteis:
- Doc K8S - Referência - Controle de acesso à API - Inicialização de TLS
- Doc K8S - Começando - Melhores Práticas - Certificados e requisitos de PKI
- Doc K8S - Tarefas - TLS - Gerenciar certificados TLS em um cluster
- Doc K8S - Tarefas - Administrar um cluster - Administração com kubeadm - Gerenciamento de certificados com kubeadm
- Curso - Certified Kubernetes Administrator (CKA) with Practice Tests - TLS in kubernetes - Certificate Creation
Certificates API / API de Certificados
A API de certificados permite a automação do provisionamento de credenciais X.509 fornecendo uma interface programática para clientes da API Kubernetes solicitarem e obterem certificados X.509 de uma Autoridade de Certificação (CA).
Um recurso CertificateSigningRequest
(CSR) é usado para solicitar que um certificado seja assinado por um assinante indicado, após o qual a solicitação pode ser aprovada ou negada antes de ser finalmente assinada.
Link’s úteis:
KubeConfig
Utilize arquivos kubeconfig
para organizar informações sobre clusters, usuários, namespaces e mecanismos de autenticação. A ferramenta de linha de comando kubectl
faz uso dos arquivos kubeconfig
para encontrar as informações necessárias para escolher e se comunicar com o serviço de API de um cluster.
Por padrão, o kubectl
procura por um arquivo de nome config
no diretório $HOME/.kube
. Você pode especificar outros arquivos kubeconfig através da variável de ambiente KUBECONFIG
ou adicionando a opção --kubeconfig
.
Link’s úteis:
API Groups / Grupos de API
Os grupos de API facilitam a extensão da API do Kubernetes. O grupo de APIs é especificado em um caminho REST
e no campo apiVersion
de um objeto serializado.
Existem vários grupos de API no Kubernetes:
- O grupo principal ou
core
(também chamado de legado) é encontrado no caminho REST/api/v1
. O grupo principal não é especificado como parte do campoapiVersion
, por exemplo,apiVersion: v1
.

- Os grupos nomeados estão no caminho REST
/apis/$GROUP_NAME/$VERSION
e usamapiVersion: $GROUP_NAME/$VERSION
(por exemplo,apiVersion: batch/v1
). Podemos encontrar a lista completa de grupos de API compatíveis na referência da API do Kubernetes .

Link’s úteis:
Autorização
O Kubernetes autoriza solicitações de API usando o API Server. Ele avalia todos os atributos de solicitação em relação a todas as políticas e permite ou nega a solicitação. Todas as partes de uma solicitação de API devem ser permitidas por alguma política para prosseguir. Isso significa que as permissões são negadas por padrão.
Quando vários módulos de autorização são configurados, cada um é verificado em sequência. Se algum autorizador aprovar ou negar um pedido, essa decisão é imediatamente devolvida e nenhum outro autorizador é consultado. Se todos os módulos não tiverem opinião sobre a solicitação, a solicitação será negada. Uma negação retorna um código de status HTTP 403.
Link’s úteis:
RBAC (Role-Based Access Control)
O RBAC (Role-Based Access Control ou Controle de Acesso Baseado em Função) é um método de regular o acesso a recursos de computador ou rede com base nas funções de usuários individuais em sua organização.
A autorização RBAC usa o rbac.authorization.k8s.io
Grupo de API
para orientar as decisões de autorização, permitindo configurar políticas dinamicamente por meio da API do Kubernetes.
Para habilitar o RBAC, inicie o API Server com o sinalizador --authorization-modes
definido para uma lista separada por vírgulas que inclua RBAC
, por exemplo:
kube-apiserver --authorization-mode=Example,RBAC --other-options --more-options
Link’s úteis:
Cluster Roles e Role Bindings
Uma Role
ou ClusterRole
RBAC
contém regras que representam um conjunto de permissões. As permissões são puramente aditivas (não há regras de “negação”).
- Uma
Role
sempre define permissões em um determinadonamespace
; ao criar umaRole
, precisa ser especificado onamespace
ao qual ela pertence. ClusterRole
, por outro lado, é um recurso sem namespace, se aplica ao cluster inteiro.
Os recursos têm nomes diferentes (Role
e ClusterRole
) porque um objeto Kubernetes sempre precisa ter namespace ou não; não pode ser os dois.
Link’s úteis:
Services Accounts / Contas de Serviços
Segue abaixo algumas caracteristicas das Services Accounts ou Contas de Serviço:
- São para processos, que são executados em pods.
- São vinculadas a um namespace.
- Processo de criação mais leve, permitindo que os usuários do cluster criem contas de serviço para tarefas específicas seguindo o princípio de privilégio mínimo.
Link’s úteis:
Segurança de Imagens
Uma imagem de container representa dados binários que encapsulam um aplicativo e todas as suas dependências de software, são pacotes de software executáveis que podem ser executados de forma independente e que fazem suposições muito bem definidas sobre seu ambiente de tempo de execução.
Normalmente se cria uma imagem de contêiner de seu aplicativo e a envia para um registro antes de se referir a ela em um Pod.
Link’s úteis:
Security Context ou Contexto de Segurança
Os Security Contexts configuram Pods e Containers em tempo de execução.
Os Security Contexts são definidos como parte das especificações do Pod e do Container no manifesto do Pod e representam parâmetros para o tempo de execução do container.
Link’s úteis:
Network Policy
Por padrão todas as conexões de entrada e saída em um Pod são permitidas, as Network Policies implementam um controle no fluxo do tráfego tanto de entrada Ingress
, quanto de saída Egress
.
As Network Policies não entram em conflito, elas são aditivas. Se alguma política ou políticas se aplicarem a um determinado Pod para uma determinada direção, as conexões permitidas nessa direção desse Pod serão a união do que as políticas aplicáveis permitem. Assim, a ordem de avaliação não afeta o resultado da política.
Para que uma conexão de um Pod de origem a um Pod de destino seja permitida, a política de saída no Pod de origem e a política de entrada no Pod de destino precisam permitir a conexão, se um dos lados não permitir a conexão, ela não acontecerá.
Link’s úteis:
Feedback
Gostou desta página?
Que bom, que gostou! Por favor, tem algo que podemos melhorar?
Que pena! Por favor, me diga o que podemos fazer pra melhorar. Obrigado!