Configuração de uma política de segurança de pod
Uma política de segurança de pods (PSP) é um recurso no nível de cluster que controla aspectos de segurança confidenciais da especificação do pod. O objeto da PodSecurityPolicy no Kubernetes define um grupo de condições que um pod deve cumprir para ser aceito pelo sistema, bem como os valores padrão dos campos relacionados.
Por padrão, o componente de controle de acesso da PSP é habilitado para clusters de v1.17.17 e uma PSP padrão global chamado psp-global é criado. Você pode modificar a política padrão (mas não excluí-la). Você também pode criar uma PSP e vinculá-la à configuração RBAC.
- Além da PSP padrão global, o sistema configura PSPs independentes para componentes do sistema no namespace kube-system. Modificar a configuração psp-global não afeta a criação de pods no namespace kube-system.
- A PodSecurityPolicy foi preterido no Kubernetes v1.21 e removido do Kubernetes na v1.25. Você pode usar a admissão de segurança do pod como um substituto para a PodSecurityPolicy. Para mais detalhes, consulte Configuração de admissão de segurança do pod.
Modificar a PSP padrão global
Antes de modificar a PSP padrão global, certifique-se de que um cluster do CCE foi criado e conectado usando kubectl.
- Execute o seguinte comando:
kubectl edit psp psp-global
- Modifique os parâmetros necessários, conforme mostrado na Tabela 1.
Tabela 1 Configuração de PSP Item
Descrição
privileged
Inicia o contêiner privilegiado.
hostPID
hostIPC
Usa o namespace do host.
hostNetwork
hostPorts
Utiliza a rede e a porta do host.
volumes
Especifica o tipo de volume montado que pode ser usado.
allowedHostPaths
Especifica o caminho do host no qual um volume hostPath pode ser montado. O campo pathPrefix especifica o grupo de prefixos de caminho de host no qual um volume hostPath pode ser montado.
allowedFlexVolumes
Especifica o driver FlexVolume que pode ser usado.
fsGroup
Configura o ID de grupo suplementar usado pelo volume montado no pod.
readOnlyRootFilesystem
Os pods só podem ser iniciados usando um sistema de arquivos raiz somente leitura.
runAsUser
runAsGroup
supplementalGroups
Especifica o ID do usuário, o ID do grupo primário e o ID do grupo suplementar para os contêineres iniciais em um pod.
allowPrivilegeEscalation
defaultAllowPrivilegeEscalation
Especifica se allowPrivilegeEscalation pode ser definido como true em um pod. Essa configuração controla o uso do Setuid e se os programas podem usar chamadas de sistema privilegiadas adicionais.
defaultAddCapabilities
requiredDropCapabilities
allowedCapabilities
Controla os recursos do Linux usados em pods.
seLinux
Controla a configuração do seLinux usado em pods.
allowedProcMountTypes
Controla os ProcMountTypes que podem ser usados por pods.
annotations
Configura AppArmor e Seccomp usados por contêineres em um pod.
forbiddenSysctls
allowedUnsafeSysctls
Controla a configuração do Sysctl usado por contêineres em um pod.
Exemplo de ativação de Sysctls inseguros na política de segurança do pod
Você pode configurar permitido-unsafe-sysctls para um pool de nós. Para os clusters do CCE de v1.17.17 e versões posteriores, adicione configurações em allowedUnsafeSysctls da política de segurança do pod para fazer a configuração entrar em vigor. Para mais detalhes, consulte Tabela 1.
Além de modificar a política de segurança global do pod, você pode adicionar novas políticas de segurança do pod. Por exemplo, habilite os sysctls inseguros net.core.somaxconn. Veja a seguir um exemplo de adição de uma política de segurança de pods:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
annotations:
seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
name: sysctl-psp
spec:
allowedUnsafeSysctls:
- net.core.somaxconn
allowPrivilegeEscalation: true
allowedCapabilities:
- '*'
fsGroup:
rule: RunAsAny
hostIPC: true
hostNetwork: true
hostPID: true
hostPorts:
- max: 65535
min: 0
privileged: true
runAsGroup:
rule: RunAsAny
runAsUser:
rule: RunAsAny
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
volumes:
- '*'
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: sysctl-psp
rules:
- apiGroups:
- "*"
resources:
- podsecuritypolicies
resourceNames:
- sysctl-psp
verbs:
- use
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: sysctl-psp
roleRef:
kind: ClusterRole
name: sysctl-psp
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: Group
name: system:authenticated
apiGroup: rbac.authorization.k8s.io
Restaurar a PSP original
Se você modificou a política de segurança do pod padrão e deseja restaurar a política de segurança do pod original, execute as seguintes operações.
- Crie um arquivo de descrição de política chamado policy.yaml. policy.yaml é um nome de arquivo de exemplo. Você pode renomeá-lo conforme necessário.
vi policy.yaml
O conteúdo do arquivo de descrição é o seguinte:
apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: psp-global annotations: seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*' spec: privileged: true allowPrivilegeEscalation: true allowedCapabilities: - '*' volumes: - '*' hostNetwork: true hostPorts: - min: 0 max: 65535 hostIPC: true hostPID: true runAsUser: rule: 'RunAsAny' seLinux: rule: 'RunAsAny' supplementalGroups: rule: 'RunAsAny' fsGroup: rule: 'RunAsAny' --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: psp-global rules: - apiGroups: - "*" resources: - podsecuritypolicies resourceNames: - psp-global verbs: - use --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: psp-global roleRef: kind: ClusterRole name: psp-global apiGroup: rbac.authorization.k8s.io subjects: - kind: Group name: system:authenticated apiGroup: rbac.authorization.k8s.io - Execute o seguinte comando:
kubectl apply -f policy.yaml