Kubernetes 101: Security Contexts
Fala galera! Seis tão baum?
No Kubernetes, a segurança das aplicações não se limita apenas ao controle de acesso via RBAC (Role-Based Access Control) ou ao uso de Service Accounts. Um aspecto crucial para garantir que os Pods e Containers operem com o mínimo de privilégios necessários é o uso dos Security Contexts.
O Security Context permite definir configurações de segurança em diferentes níveis:
- Pods: Configurações que afetam todos os containers dentro de um Pod.
- Containers: Configurações específicas para cada container individual.
Isso inclui definir permissões de usuário, grupos, privilégios de root, controles de acesso ao sistema de arquivos e mais.
Configurações de Security Context
Principais atributos
Aqui estão algumas das configurações mais comuns que podem ser usadas nos Security Contexts:
Atributo | Nível | Descrição |
---|---|---|
runAsUser | Pod/Container | Define o UID com o qual o processo será executado. |
runAsGroup | Pod/Container | Define o GID para o processo. |
fsGroup | Pod | Especifica o GID que será usado para volumes montados. |
allowPrivilegeEscalation | Container | Permite ou nega a elevação de privilégios. |
privileged | Container | Define se o container será executado como privilegiado. |
readOnlyRootFilesystem | Container | Monta o sistema de arquivos root como somente leitura. |
Exemplos práticos
Definindo Security Context em um Pod
Neste exemplo, o Pod cria um container que roda com um usuário específico (UID 1000
) e monta o sistema de arquivos root como somente leitura:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
securityContext:
runAsUser: 1000
fsGroup: 2000
containers:
- name: secure-container
image: busybox
securityContext:
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
command: ["sleep", "3600"]
Explicação:
- O Pod roda todos os processos com o UID
1000
. - Volumes montados herdarão o grupo
2000
. - O container:
- Usa um sistema de arquivos root somente leitura.
- Proíbe a elevação de privilégios.
Definindo Security Context em Containers específicos
Se precisar de configurações diferentes para cada container dentro de um Pod multi-container, você pode definir Security Contexts individualmente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apiVersion: v1
kind: Pod
metadata:
name: multi-container-pod
spec:
containers:
- name: container-1
image: nginx
securityContext:
runAsUser: 1001
privileged: false
- name: container-2
image: busybox
securityContext:
runAsUser: 1002
allowPrivilegeEscalation: true
Explicação:
- O
container-1
roda com o UID1001
e sem privilégios. - O
container-2
roda com o UID1002
e permite elevação de privilégios.
Ligação com RBAC e Service Accounts
Os Security Contexts se integram perfeitamente com o controle de acesso RBAC e Service Accounts (abordados nos artigos anteriores da série):
- O Security Context controla como um processo roda dentro de um container.
- O RBAC e Service Accounts controlam o que esse processo pode acessar dentro do cluster.
Por exemplo, mesmo que um Pod tenha permissões administrativas via RBAC, o Security Context pode impedir que os containers rodem como root ou que alterem o sistema de arquivos.
Testando e validando Security Contexts
Você pode validar as configurações de segurança com o comando:
1
kubectl exec -it <pod-name> -- id
Isso mostrará o UID e GID atuais com os quais o container está rodando.
Para testar se um container consegue alterar o sistema de arquivos root (verificando o readOnlyRootFilesystem
):
1
kubectl exec -it <pod-name> -- touch /test-file
Se configurado corretamente, isso resultará em um erro:
1
touch: cannot touch '/test-file': Read-only file system
Conclusão
Os Security Contexts são uma parte vital da segurança no Kubernetes, permitindo que você reforce as políticas de segurança ao nível dos containers e Pods. Ao combiná-los com RBAC e Service Accounts, você obtém uma abordagem robusta para proteger suas aplicações.
Você pode acessar a documentação oficial aqui: Configure a Security Context for a Pod or Container
É isso, galera! Se você gostou do artigo, comenta ou mande pra galera que também quer aprender Kubernetes!
Se você tiver alguma dúvida ou comentário, sinta-se à vontade para compartilhá-los conosco na seção de comentários abaixo!
Forte Abraço!