Detalhamento do uso de AppArmor em pods no Kubernetes para o CKS.
AppArmor é um sistema de segurança Linux (MAC – Mandatory Access Control) que restringe capacidades de processos por perfil. No Kubernetes você pode carregar perfis nos nós e fazer os pods usarem um perfil via securityContext, limitando o que o container pode fazer (arquivos, rede, etc.).
Os perfis precisam estar instalados no nó onde o pod roda:
# Carregar perfil (sem output em caso de sucesso)
sudo apparmor_parser -q ./profile
# Ver perfis carregados
sudo apparmor_status
O arquivo de perfil costuma estar em /etc/apparmor.d/ ou em um path indicado no enunciado.
Para o Kubernetes agendar o pod em um nó que tenha AppArmor (e o perfil) disponível, use um nodeSelector ou label no nó:
kubectl label node <node-name> security=apparmor
No Pod spec:
spec:
nodeSelector:
security: apparmor
Para o container usar um perfil AppArmor local (carregado no nó):
securityContext:
appArmorProfile:
type: Localhost
localhostProfile: <profile-name>
k8s-<namespace>-<profile-name> ou o nome do arquivo sem path).Pode ser em pod ou em container; o de container sobrescreve o do pod para aquele container.
Em versões antigas usava-se anotação no pod:
metadata:
annotations:
container.apparmor.security.beta.kubernetes.io/<container-name>: localhost/<profile-name>
O método recomendado é securityContext.appArmorProfile (acima).
apparmor_parser -q ./profile e apparmor_status.kubectl label node <name> security=apparmor.securityContext.appArmorProfile.type: Localhost, localhostProfile: <name>.