O Policy Controller vem com uma biblioteca padrão de modelos de restrição que pode ser usada com o PCI-DSS v3.2.1 bundle para avaliar a conformidade. dos recursos do cluster em relação a alguns aspectos do padrão de segurança de dados do setor de cartões de pagamento (PCI DSS) v3.2.1.
Esta página é destinada a administradores e operadores de TI que querem usar e manter uma automação para garantir que todos os recursos em execução na plataforma de nuvem cumpram os requisitos de compliance organizacionais. Para saber mais sobre papéis comuns e tarefas de exemplo que mencionamos no conteúdo do Google Cloud , consulte Tarefas e funções de usuário comuns do GKE.
Restrições do pacote de políticas do PCI-DSS v3.2.1
| Nome da restrição | Descrição da restrição | ID do controle | Perfil | 
|---|---|---|---|
| pci-dss-v3.2.1-resources-have-required-labels | Garante que todos os apps tenham um rótulo específico para um firewall. | 1.1.4 | Padrão | 
| pci-dss-v3.2.1-apps-must-have-certain-set-of-annotations | Garante todos os requisitos para controles de rede exigindo que todos os apps contenham uma anotação especificada. | 1.1.5, 2.4 | Padrão | 
| pci-dss-v3.2.1-require-default-deny-network-policies | Requer que cada namespace definido no cluster tenha um NetworkPolicyde negação padrão para saída. | 1.2, 1.3, 2.2.2 | Estendido | 
| pci-dss-v3.2.1-block-all-ingress | Restringe a criação de objetos de entrada. | 1.2, 1.3 | Estendido | 
| pci-dss-v3.2.1-require-valid-network-ranges | Restringe intervalos CIDR permitidos para uso com a entrada e a saída. | 1.2, 1.3.2 | Estendido | 
| pci-dss-v3.2.1-require-namespace-network-policies | Requer que cada namespace definido no cluster tenha uma NetworkPolicy. | 1.2 | Padrão | 
| pci-dss-v3.2.1-enforce-managed-by-configmanagement-label | Exige um rótulo app.kubernetes.io/managed-by=válido nos recursosRoleBinding. | 1.2.2, 8.1.2 | Padrão | 
| pci-dss-v3.2.1-block-creation-with-default-serviceaccount | Restringe a criação de recursos usando uma conta de serviço padrão. | 2.1 | Padrão | 
| pci-dss-v3.2.1-restrict-default-namespace | Restringe os pods a usarem o namespace padrão. | 2.1 | Padrão | 
| pci-dss-v3.2.1-asm-peer-authn-strict-mtls | A aplicação de todos os PeerAuthentications não pode substituir mMTLS rígidos | 4.1 | Padrão | 
| pci-dss-v3.2.1-require-av-daemonset | Requer a presença de um daemonset antivírus. | 5.1.1, 5.3 | Padrão | 
| pci-dss-v3.2.1-enforce-config-management | Aplique a presença e a ativação do Config Sync. | 5.3, 6.1, 6.4 | Padrão | 
| pci-dss-v3.2.1-enforce-cloudarmor-backendconfig | Aplique a configuração do Cloud Armor em recursos de BackendConfig. | 6.5, 6.6 | Padrão | 
| pci-dss-v3.2.1-restrict-rbac-subjects | Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. | 8.1, 8.1.5 | Estendido | 
| pci-dss-v3.2.1-block-secrets-of-type-basic-auth | Restringe o uso de secrets do tipo de autenticação básica. | 8.1.5, 8.2.3, 8.5 | Padrão | 
| pci-dss-v3.2.1-nodes-have-consistent-time | Garante o tempo consistente e correto nos nós, garantindo o uso do COS como a imagem do SO. | 10.4.1, 10.4.3 | Padrão | 
Restrições de pacote padrão x estendido
O pacote PCI-DSS v3.2.1 implementa um conjunto opinativo de requisitos de políticas para atender a alguns aspectos dos controles do PCI-DSS v3.2.1. Além da modificação na sua carga de trabalho para atender aos requisitos do pacote Padrão, também está disponível um conjunto opcional de restrições estendidas que exigem personalização para seu ambiente.
Antes de começar
- Instale e inicialize a Google Cloud CLI,
que fornece os
comandos gcloudekubectlusados nestas instruções. Se você usa o Cloud Shell, a Google Cloud CLI já vem pré-instalada.
- Instale o Policy Controller v1.14.3 ou mais recente no cluster com a biblioteca padrão de modelos de restrição. Você também precisa ativar a compatibilidade com restrições referenciais, já que este pacote contém restrições referenciais.
Configurar o Controlador de Políticas com restrições referenciais
- Salve o seguinte manifesto YAML em um arquivo como - policycontroller-config.yaml. O manifesto configura o Policy Controller para observar tipos específicos de objetos.- apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "apps" version: "v1" kind: "DaemonSet" - group: "networking.k8s.io" version: "v1" kind: "NetworkPolicy"
- Aplique o manifesto - policycontroller-config.yaml:- kubectl apply -f policycontroller-config.yaml
Configurar a carga de trabalho do cluster para PCI-DSS v3.2.1.
Pacote padrão
- Todos os apps (ReplicaSet,Deployment,StatefulSeteDaemonSet) precisam incluir umpci-dss-firewall-audit labelcom o esquema depci-dss-[0-9]{4}q[1-4].
- Todos os apps (ReplicaSet,Deployment,StatefulSet,DaemonSet) precisam incluir uma anotaçãonetwork-controls/datecom o esquema deYYYY-MM-DD.
- Cada namespacedefinido no cluster precisa ter umNetworkPolicy.
- O uso do Config Sync para
configmanagement.gke.ioé obrigatório por padrão, mas os valores deapp.kubernetes.io/managed-bypermitidos podem ser personalizados na restriçãopci-dss-v3.2.1-enforce-managed-by-configmanagement-label.
- Não é possível criar recursos usando a conta de serviço padrão.
- O namespacepadrão não pode ser usado para pods.
- Se estiver usando o Cloud Service Mesh, o PeerAuthentication de ASM precisará usar mTLS restrito spec.mtls.mode: STRICT.
- Uma solução antivírus é necessária. O padrão é a presença de um daemonsetchamadoclamavnopci-dss-avnamespace, mas o nome e o namespace dodaemonsetpodem ser personalizados para sua implementação na restriçãopci-dss-v3.2.1-require-av-daemonset.
- A presença e a ativação do Config Sync são obrigatórias.
- Todos os BackendConfigprecisam ser configurados para CloudArmor.
- O uso de secrets do tipo basic-authnão é permitido.
- Todos os nós precisam usar o Container-Optimized OS do Google na imagem por um tempo consistente.
Pacote estendido (opcional com personalização necessária)
- Cada namespacedefinido no cluster tem umaNetworkPolicyde negação padrão para saída. As exceções permitidas podem ser específicas empci-dss-v3.2.1-require-namespace-network-policies.
- Somente os objetos de entrada permitidos (tipos de Ingress,GatewayeServicedeNodePorteLoadBalancer) podem ser criados, que podem ser especificados empci-dss-v3.2.1-block-all-ingress.
- Somente intervalos de IP permitidos podem ser usados para Entrada e Express. Eles podem ser especificados em pci-dss-v3.2.1-require-valid-network-ranges.
- Somente assuntos permitidos podem ser usados em vinculações do RBAC. Seus nomes de domínio podem ser especificados em pci-dss-v3.2.1-restrict-rbac-subjects.
Auditar o pacote de políticas do PCI-DSS v3.2.1
O Policy Controller permite aplicar políticas ao cluster do Kubernetes. Para ajudar a testar suas cargas de trabalho e a conformidade delas com relação às políticas de PCI-DSS v3.2.1 descritas na tabela anterior, implante essas restrições no modo de "auditoria" para revelar violações e, mais importante, se permitir corrigir antes de aplicar no cluster do Kubernetes.
É possível aplicar essas políticas com spec.enforcementAction definido como dryrun usando kubectl,
kpt
ou
Config Sync.
kubectl
- (Opcional) Visualize as restrições de política com o kubectl: - kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1 
- Aplique as restrições da política com o kubectl: - kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1 - A saída é esta: - asmpeerauthnstrictmtls.constraints.gatekeeper.sh/pci-dss-v3.2.1-asm-peer-authn-strict-mtls created k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/pci-dss-v3.2.1-block-creation-with-default-serviceaccount created k8sblockobjectsoftype.constraints.gatekeeper.sh/pci-dss-v3.2.1-block-secrets-of-type-basic-auth created k8senforcecloudarmorbackendconfig.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-cloudarmor-backendconfig created k8senforceconfigmanagement.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-config-management created k8srequirecosnodeimage.constraints.gatekeeper.sh/pci-dss-v3.2.1-nodes-have-consistent-time created k8srequiredaemonsets.constraints.gatekeeper.sh/pci-dss-v3.2.1-require-av-daemonset created k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/pci-dss-v3.2.1-require-namespace-network-policies created k8srequiredannotations.constraints.gatekeeper.sh/pci-dss-v3.2.1-apps-must-have-certain-set-of-annotations created k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-managed-by-configmanagement-label created k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v3.2.1-resources-have-required-labels created k8srestrictnamespaces.constraints.gatekeeper.sh/pci-dss-v3.2.1-restrict-default-namespace created 
- Verifique se as restrições da política foram instaladas e se existem violações no cluster: - kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1 - O resultado será assim: - NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnstrictmtls.constraints.gatekeeper.sh/pci-dss-v3.2.1-asm-peer-authn-strict-mtls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/pci-dss-v3.2.1-block-creation-with-default-serviceaccount dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockobjectsoftype.constraints.gatekeeper.sh/pci-dss-v3.2.1-block-secrets-of-type-basic-auth dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8senforcecloudarmorbackendconfig.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-cloudarmor-backendconfig dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8senforceconfigmanagement.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-config-management dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirecosnodeimage.constraints.gatekeeper.sh/pci-dss-v3.2.1-nodes-have-consistent-time dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredaemonsets.constraints.gatekeeper.sh/pci-dss-v3.2.1-require-av-daemonset dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/pci-dss-v3.2.1-require-namespace-network-policies dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredannotations.constraints.gatekeeper.sh/pci-dss-v3.2.1-apps-must-have-certain-set-of-annotations dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-managed-by-configmanagement-label dryrun 0 k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v3.2.1-resources-have-required-labels dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictnamespaces.constraints.gatekeeper.sh/pci-dss-v3.2.1-restrict-default-namespace dryrun 0 
kpt
- Instale e configure o kpt. O kpt é usado nestas instruções para personalizar e implantar recursos do Kubernetes. 
- Faça o download do pacote de políticas do PCI-DSS v3.2.1 no GitHub usando o kpt: - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1 
- Execute a função - set-enforcement-actiondo kpt para definir a ação de aplicação das políticas como- dryrun:- kpt fn eval pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun 
- Inicialize o diretório de trabalho com o kpt, que cria um recurso para acompanhar as alterações: - cd pci-dss-v3.2.1 kpt live init 
- Aplique as restrições da política com kpt: - kpt live apply 
- Verifique se as restrições da política foram instaladas e se existem violações no cluster: - kpt live status --output table --poll-until current - O status - CURRENTconfirma a instalação bem-sucedida das restrições.
Config Sync
- Instale e configure o kpt. O kpt é usado nestas instruções para personalizar e implantar recursos do Kubernetes.
Os operadores que usam o Config Sync para implantar políticas nos clusters podem usar as seguintes instruções:
- Altere para o diretório de sincronização do Config Sync: - cd SYNC_ROOT_DIR - Para criar ou anexar - .gitignorecom- resourcegroup.yaml:- echo resourcegroup.yaml >> .gitignore 
- Crie um diretório - policiesdedicado:- mkdir -p policies 
- Faça o download do pacote de políticas do PCI-DSS v3.2.1 no GitHub usando o kpt: - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1 policies/pci-dss-v3.2.1 
- Execute a função - set-enforcement-actiondo kpt para definir a ação de aplicação das políticas como- dryrun:- kpt fn eval policies/pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun 
- (Opcional) Visualize as restrições de política a serem criadas: - kpt live init policies/pci-dss-v3.2.1 kpt live apply --dry-run policies/pci-dss-v3.2.1 
- Se o diretório de sincronização do Config Sync usar Kustomize, adicione - policies/pci-dss-v3.2.1à raiz- kustomization.yaml. Caso contrário, remova o arquivo- policies/pci-dss-v3.2.1/kustomization.yaml:- rm SYNC_ROOT_DIR/policies/pci-dss-v3.2.1/kustomization.yaml 
- Envie as alterações para o repositório do Config Sync: - git add SYNC_ROOT_DIR/policies/pci-dss-v3.2.1 git commit -m 'Adding PCI-DSS v3.2.1 policy audit enforcement' git push 
- Verifique o status da instalação: - watch gcloud beta container fleet config-management status --project PROJECT_ID - O status - SYNCEDconfirma a instalação das políticas.
Visualizar violações de políticas
Depois que as restrições de política são instaladas no modo de auditoria, as violações no cluster podem ser visualizadas na IU usando o Painel do Controlador de políticas.
Também é possível usar kubectl para visualizar violações no cluster usando o seguinte comando:
kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
Se houver violações, uma lista das mensagens de violação por restrição poderá ser visualizada com:
kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Alterar a ação de aplicação do pacote de políticas do PCI-DSS v3.2.1
Depois de analisar as violações de políticas no cluster, considere
alterar o modo de aplicação para que o controlador de admissão warn
ou deny bloqueie a aplicação de recursos sem compliance no cluster.
kubectl
- Use o kubectl para definir a ação de cumprimento das políticas como - warn:- kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
- Verifique se a ação de cumprimento das restrições da política foi atualizada: - kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 
kpt
- Execute a função - set-enforcement-actiondo kpt para definir a ação de aplicação das políticas como- warn:- kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn 
- Aplique as restrições da política: - kpt live apply 
Config Sync
Os operadores que usam o Config Sync para implantar políticas nos clusters podem usar as seguintes instruções:
- Altere para o diretório de sincronização do Config Sync: - cd SYNC_ROOT_DIR 
- Execute a função - set-enforcement-actiondo kpt para definir a ação de aplicação das políticas como- warn:- kpt fn eval policies/pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn 
- Envie as alterações para o repositório do Config Sync: - git add SYNC_ROOT_DIR/policies/pci-dss-v3.2.1 git commit -m 'Adding PCI-DSS v3.2.1 policy bundle warn enforcement' git push 
- Verifique o status da instalação: - nomos status - O cluster vai mostrar um status de - SYNCEDcom as políticas instaladas.
Aplicação da política de testes
Crie um recurso não compatível no cluster usando o seguinte comando:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: wp-non-compliant
  labels:
    app: wordpress
spec:
  containers:
    - image: wordpress
      name: wordpress
      ports:
      - containerPort: 80
        name: wordpress
EOF
O controlador de admissão produzirá um alerta listando as violações da política que esse recurso viola, conforme mostrado no exemplo a seguir:
Warning: [pci-dss-v3.2.1-restrict-default-namespace] <default> namespace is restricted pod/wp-non-compliant created
Remoção do pacote de políticas do PCI-DSS v3.2.1
Se necessário, remova o pacote de políticas do PCI-DSS v3.2.1 do cluster.
kubectl
- Use o kubectl para remover as políticas: - kubectl delete constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 
kpt
- Remova as políticas: - kpt live destroy 
Config Sync
Os operadores que usam o Config Sync para implantar políticas nos clusters podem usar as seguintes instruções:
- Envie as alterações para o repositório do Config Sync: - git rm -r SYNC_ROOT_DIR/policies/pci-dss-v3.2.1 git commit -m 'Removing PCI-DSS v3.2.1 policies' git push 
- Verifique o status: - nomos status - O cluster vai mostrar o status - SYNCEDcom os recursos removidos.