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