cks

3.10 AppArmor

Detalhamento do uso de AppArmor em pods no Kubernetes para o CKS.

O que é

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.).

Documentação oficial

No nó (carregar perfil)

Os perfis precisam estar instalados no 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.

Label do node

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

No Pod: securityContext

Para o container usar um perfil AppArmor local (carregado no nó):

securityContext:
  appArmorProfile:
    type: Localhost
    localhostProfile: <profile-name>

Pode ser em pod ou em container; o de container sobrescreve o do pod para aquele container.

Anotação (deprecated)

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).

Resumo para o exame

  1. No nó: apparmor_parser -q ./profile e apparmor_status.
  2. Label no node: kubectl label node <name> security=apparmor.
  3. No Pod: securityContext.appArmorProfile.type: Localhost, localhostProfile: <name>.