Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Cloud Container Engine/ Guia de usuário/ Permissões/ Segurança de pod/ Configuração de uma política de segurança de pod
Atualizado em 2024-11-28 GMT+08:00

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.

  1. Execute o seguinte comando:

    kubectl edit psp psp-global

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

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

  2. Execute o seguinte comando:

    kubectl apply -f policy.yaml