O Policy Controller inclui uma biblioteca predefinida de modelos de restrições que podem ser usados com o pacote PCI-DSS v4.0 para avaliar a conformidade dos recursos do cluster com alguns aspetos da Norma de Segurança de Dados do Setor de Cartões de Pagamento (PCI-DSS) v4.0.
Esta página contém instruções para aplicar manualmente um pacote de políticas. Em alternativa, pode aplicar pacotes de políticas diretamente.
Esta página destina-se a administradores de TI e operadores que querem garantir que todos os recursos executados na plataforma de nuvem cumprem os requisitos de conformidade da organização, fornecendo e mantendo a automatização para auditar ou aplicar. Para saber mais sobre as funções comuns e as tarefas de exemplo a que fazemos referência no Google Cloud conteúdo, consulte o artigo Funções e tarefas comuns de utilizadores do GKE.
Restrições do conjunto de políticas da PCI-DSS v4.0
| Nome da restrição | Descrição da restrição | IDs de controlo | 
|---|---|---|
| pci-dss-v4.0-require-apps-annotations | Requer que todas as apps no cluster tenham uma anotação network-controls/date. | 2.2.5 | 
| pci-dss-v4.0-require-av-daemonset | Requer a presença de um antivírus DaemonSet. | 5.2.1, 5.2.2, 5.2.3, 5.3.1, 5.3.2, 5.3.5 | 
| pci-dss-v4.0-require-binauthz | Requer o webhook de admissão de validação da autorização binária. | 2.2.1, 2.2.4, 6.2.3, 6.3.1, 6.3.2 | 
| pci-dss-v4.0-require-cloudarmor-backendconfig | Aplica a configuração do Google Cloud Armor aos recursos BackendConfig. | 6.4.1, 6.4.2 | 
| pci-dss-v4.0-require-config-management | Requer que a gestão de configuração esteja em execução com a prevenção de desvio ativada e, pelo menos, um objeto RootSyncno cluster. | 1.2.8, 2.2.6, 5.3.5, 6.3.2, 6.5.1 | 
| pci-dss-v4.0-require-default-deny-network-policies | Requer que todos os espaços de nomes definidos no cluster tenham uma negação predefinida NetworkPolicypara a saída. | 1.3.2, 1.4.4 | 
| pci-dss-v4.0-require-managed-by-label | Exige que todas as apps tenham uma etiqueta app.kubernetes.io/managed-byválida. | 1.2.8, 2.2.6, 5.3.5, 6.3.2, 6.5.1 | 
| pci-dss-v4.0-require-namespace-network-policies | Requer que cada Namespacedefinido no cluster tenha umNetworkPolicy. | 1.2.5, 1.2.6, 1.4.1, 1.4.4 | 
| pci-dss-v4.0-require-peer-authentication-strict-mtls | Garante que as PeerAuthentications não podem substituir o mTLS rigoroso. | 2.2.7, 4.2.1, 8.3.2 | 
| pci-dss-v4.0-require-valid-network-ranges | Restringe os intervalos CIDR permitidos para utilização com entrada e saída. | 1.3.1, 1.3.2, 1.4.2, 1.4.4 | 
| pci-dss-v4.0-resources-have-required-labels | Exige que todas as apps contenham uma etiqueta especificada para cumprir os requisitos da firewall. | 1.2.7 | 
| pci-dss-v4.0-restrict-cluster-admin-role | Restringe a utilização da função cluster-admin. | 7.2.1, 7.2.2, 7.2.5, 8.2.4 | 
| pci-dss-v4.0-restrict-creation-with-default-serviceaccount | Restringe a criação de recursos através de uma conta de serviço predefinida. Não tem efeito durante a auditoria. | 2.2.2 | 
| pci-dss-v4.0-restrict-default-namespace | Impede que os pods usem o espaço de nomes predefinido. | 2.2.3 | 
| pci-dss-v4.0-restrict-ingress | Restringe a criação de Ingressobjetos. | 1.3.1, 1.4.2, 1.4.4 | 
| pci-dss-v4.0-restrict-node-image | Garante uma hora consistente e correta nos nós, permitindo apenas o SO otimizado para contentores ou o Ubuntu como imagem do SO. | 10.6.1, 10.6.2, 10.6.3 | 
| pci-dss-v4.0-restrict-pods-exec | Restringe a utilização do pods/execnoRolese noClusterRoles. | 8.6.1 | 
| pci-dss-v4.0-restrict-rbac-subjects | Restringe a utilização de nomes em objetos RBAC a valores permitidos. | 7.3.2, 8.2.1, 8.2.2 e 8.2.4 | 
| pci-dss-v4.0-restrict-role-wildcards | Restringe a utilização de carateres universais em RoleseClusterRoles. | 7.3.3, 8.2.4 | 
| pci-dss-v4.0-restrict-storageclass | Restringe StorageClassa uma lista deStorageClassque encriptam por predefinição. | 3.3.2, 3.3.3 | 
Antes de começar
- Instale e inicialize a CLI do Google Cloud, que fornece os comandos gcloudekubectlusados nestas instruções. Se usar a Cloud Shell, a Google Cloud CLI é pré-instalada.
- Instale o Policy Controller v1.16.0 ou superior no seu cluster com a biblioteca predefinida de modelos de restrições. Também tem de ativar o suporte para restrições referenciais, uma vez que este pacote contém restrições referenciais.
Configure o Policy Controller para restrições referenciais
- Guarde o seguinte manifesto YAML num ficheiro como - policycontroller-config.yaml. O manifesto configura o Policy Controller para monitorizar tipos específicos de objetos.- apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "networking.k8s.io" version: "v1" kind: "NetworkPolicy" - group: "admissionregistration.k8s.io" version: "v1" kind: "ValidatingWebhookConfiguration" - group: "storage.k8s.io" version: "v1" kind: "StorageClass"
- Aplique o manifesto - policycontroller-config.yaml:- kubectl apply -f policycontroller-config.yaml
Configure a carga de trabalho do cluster para a norma PCI-DSS v4.0
- Todas as apps (ReplicaSet,Deployment,StatefulSet,DaemonSet) têm de incluir uma anotaçãonetwork-controls/datecom o esquema deYYYY-MM-DD.
- É necessária uma solução antivírus. A predefinição é a presença de um daemonsetdenominadoclamavnoclamavNamespace. No entanto, o nome e o espaço de nomes dodaemonsetpodem ser personalizados para a sua implementação na restriçãopci-dss-v4.0-require-av-daemonset.
- A ativação e a configuração da autorização binária são necessárias em pci-dss-v4.0-require-binauthz.
- Todos os BackendConfigtêm de ser configurados para o CloudArmor.
- A presença e a ativação da sincronização de configuração são necessárias.
- Todos os Namespacedefinidos no cluster têm uma negação predefinidaNetworkPolicypara a saída, e as exceções permitidas podem ser específicas empci-dss-v4.0-require-namespace-network-policies.
- A utilização da sincronização de configuração para configmanagement.gke.ioé necessária por predefinição. No entanto, o valorapp.kubernetes.io/managed-bypermitido pode ser personalizado na restriçãopci-dss-v4.0-enforce-managed-by-configmanagement-label.
- Cada Namespacedefinido no cluster tem de ter umNetworkPolicy.
- Se usar o Cloud Service Mesh, a PeerAuthentication do ASM tem de usar o mTLS rigoroso spec.mtls.mode: STRICT.
- Só é possível usar intervalos de IP permitidos para Ingress e Express. Estes podem ser especificados em pci-dss-v4.0-require-valid-network-ranges.
- Todas as apps (ReplicaSet,Deployment,StatefulSeteDaemonSet) têm de incluir umpci-dss-firewall-audit labelcom o esquema depci-dss-[0-9]{4}q[1-4].
- A utilização do cluster-admin ClusterRolenão é permitida.
- Não é possível criar recursos com a conta de serviço predefinida.
- Não é possível usar o Namespacepredefinido para agrupamentos.
- Só é possível criar objetos Ingress permitidos (tipos Ingress,GatewayeServicedeNodePorteLoadBalancer), que podem ser especificados empci-dss-v4.0-restrict-ingress.
- Todos os nós têm de usar o SO otimizado para contentores ou o Ubuntu para a respetiva imagem para uma hora consistente.
- A utilização do caráter universal ou da autorização pods/execemRoleseClusterRolesnão é permitida.
- Só é possível usar assuntos permitidos em associações de RBAC. Pode especificar os nomes dos seus domínios em pci-dss-v4.0-restrict-rbac-subjects.
- A utilização da encriptação por predefinição StorageClassé obrigatória nopci-dss-v4.0-restrict-storageclass.
Audite o pacote de políticas PCI-DSS v4.0
O Policy Controller permite-lhe aplicar políticas ao seu cluster do Kubernetes. Para ajudar a testar as suas cargas de trabalho e a respetiva conformidade no que diz respeito às políticas PCI-DSS v4.0 descritas na tabela anterior, pode implementar estas restrições no modo "auditoria" para revelar violações e, mais importante, dar-se a oportunidade de as corrigir antes de as aplicar no seu cluster Kubernetes.
Pode aplicar estas políticas com spec.enforcementAction definido como dryrun através do kubectl,
kpt,
ou
Config Sync.
kubectl
- (Opcional) Pré-visualize as restrições de políticas com o kubectl: - kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v4.0 
- Aplique as restrições de políticas com o kubectl: - kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v4.0 - O resultado é o seguinte: - asmpeerauthnstrictmtls.constraints.gatekeeper.sh/pci-dss-v4.0-require-peer-authentication-strict-mtls created k8sblockallingress.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-ingress created k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-creation-with-default-serviceaccount created k8senforcecloudarmorbackendconfig.constraints.gatekeeper.sh/pci-dss-v4.0-require-cloudarmor-backendconfig created k8senforceconfigmanagement.constraints.gatekeeper.sh/pci-dss-v4.0-require-config-management created k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-role-wildcards created k8srequirebinauthz.constraints.gatekeeper.sh/pci-dss-v4.0-require-binauthz created k8srequirecosnodeimage.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-node-image created k8srequiredaemonsets.constraints.gatekeeper.sh/pci-dss-v4.0-require-av-daemonset created k8srequiredefaultdenyegresspolicy.constraints.gatekeeper.sh/pci-dss-v4.0-require-default-deny-network-policies created k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/pci-dss-v4.0-require-namespace-network-policies created k8srequirevalidrangesfornetworks.constraints.gatekeeper.sh/pci-dss-v4.0-require-valid-network-ranges created k8srequiredannotations.constraints.gatekeeper.sh/pci-dss-v4.0-require-apps-annotations created k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v4.0-require-managed-by-label created k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v4.0-resources-have-required-labels created k8srestrictnamespaces.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-default-namespace created k8srestrictrbacsubjects.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-rbac-subjects created k8srestrictrolebindings.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-cluster-admin-role created k8srestrictrolerules.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-pods-exec created k8sstorageclass.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-storageclass created 
- Confirme se as restrições de políticas foram instaladas e verifique se existem violações no cluster: - kubectl get constraints -l policycontroller.gke.io/bundleName=pci-dss-v4.0 - O resultado é semelhante ao seguinte: - NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnstrictmtls.constraints.gatekeeper.sh/pci-dss-v4.0-require-peer-authentication-strict-mtls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockallingress.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-ingress dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-creation-with-default-serviceaccount dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8senforcecloudarmorbackendconfig.constraints.gatekeeper.sh/pci-dss-v4.0-require-cloudarmor-backendconfig dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8senforceconfigmanagement.constraints.gatekeeper.sh/pci-dss-v4.0-require-config-management dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-role-wildcards dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirebinauthz.constraints.gatekeeper.sh/pci-dss-v4.0-require-binauthz dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirecosnodeimage.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-node-image dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredaemonsets.constraints.gatekeeper.sh/pci-dss-v4.0-require-av-daemonset dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredannotations.constraints.gatekeeper.sh/pci-dss-v4.0-require-apps-annotations dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredefaultdenyegresspolicy.constraints.gatekeeper.sh/pci-dss-v4.0-require-default-deny-network-policies dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v4.0-require-managed-by-label dryrun 0 k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v4.0-resources-have-required-labels dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/pci-dss-v4.0-require-namespace-network-policies dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirevalidrangesfornetworks.constraints.gatekeeper.sh/pci-dss-v4.0-require-valid-network-ranges dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictnamespaces.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-default-namespace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrbacsubjects.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-rbac-subjects dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolebindings.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-cluster-admin-role dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolerules.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-pods-exec dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sstorageclass.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-storageclass dryrun 0 
kpt
- Instale e configure o kpt. O kpt é usado nestas instruções para personalizar e implementar recursos do Kubernetes. 
- Transfira o pacote de políticas PCI-DSS v4.0 do GitHub através do kpt: - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v4.0 
- Execute a função - set-enforcement-actionkpt para definir a ação de aplicação das políticas como- dryrun:- kpt fn eval pci-dss-v4.0 -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 monitorizar as alterações: - cd pci-dss-v4.0 kpt live init 
- Aplique as restrições de políticas com o kpt: - kpt live apply 
- Confirme se as restrições de políticas foram instaladas e verifique se existem violações no cluster: - kpt live status --output table --poll-until current - O estado - 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 implementar recursos do Kubernetes.
Os operadores que usam o Config Sync para implementar políticas nos respetivos 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 acrescentar - .gitignorecom- resourcegroup.yaml:- echo resourcegroup.yaml >> .gitignore 
- Crie um diretório - policiesdedicado:- mkdir -p policies 
- Transfira o pacote de políticas PCI-DSS v4.0 do GitHub através do kpt: - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v4.0 policies/pci-dss-v4.0 
- Execute a função - set-enforcement-actionkpt para definir a ação de aplicação das políticas como- dryrun:- kpt fn eval policies/pci-dss-v4.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun 
- (Opcional) Pré-visualize as restrições de políticas a serem criadas: - kpt live init policies/pci-dss-v4.0 kpt live apply --dry-run policies/pci-dss-v4.0 
- Se o diretório de sincronização do Config Sync usar o Kustomize, adicione - policies/pci-dss-v4.0ao- kustomization.yamlraiz. Caso contrário, remova o ficheiro- policies/pci-dss-v4.0/kustomization.yaml:- rm SYNC_ROOT_DIR/policies/pci-dss-v4.0/kustomization.yaml 
- Envie alterações para o repositório do Config Sync: - git add SYNC_ROOT_DIR/policies/pci-dss-v4.0 git commit -m 'Adding PCI-DSS v4.0 policy audit enforcement' git push 
- Valide o estado da instalação: - watch gcloud beta container fleet config-management status --project PROJECT_ID - O estado - SYNCEDconfirma a instalação das políticas.
Veja as violações de políticas
Depois de instaladas no modo de auditoria, as restrições de políticas no cluster podem ser vistas na IU através do Painel de controlo do Policy Controller.
Também pode usar kubectl para ver as violações no cluster através do seguinte comando:
kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v4.0 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
Se existirem violações, pode ver uma lista das mensagens de violação por restrição com o seguinte comando:
kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v4.0 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Altere a ação de aplicação do conjunto de políticas da PCI-DSS v4.0
Depois de rever as violações de políticas no seu cluster, pode considerar alterar o modo de aplicação para que o controlador de admissão warn permita
ou até mesmo deny impeça que o recurso não conforme seja aplicado ao cluster.
kubectl
- Use o kubectl para definir a ação de aplicação das políticas como - warn:- kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v4.0 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
- Verifique se a ação de aplicação das restrições de políticas foi atualizada: - kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v4.0 
kpt
- Execute a função - set-enforcement-actionkpt 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 de políticas: - kpt live apply 
Config Sync
Os operadores que usam o Config Sync para implementar políticas nos respetivos 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-actionkpt para definir a ação de aplicação das políticas como- warn:- kpt fn eval policies/pci-dss-v4.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn 
- Envie alterações para o repositório do Config Sync: - git add SYNC_ROOT_DIR/policies/pci-dss-v4.0 git commit -m 'Adding PCI-DSS v4.0 policy bundle warn enforcement' git push 
- Valide o estado da instalação: - nomos status - O cluster deve apresentar o estado - SYNCEDcom as políticas instaladas.
Teste a aplicação de políticas
Crie um recurso não compatível no cluster com 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 deve produzir um aviso que liste as violações de políticas que este recurso viola, conforme mostrado no exemplo seguinte:
Warning: [pci-dss-v4.0-restrict-default-namespace] <default> namespace is restricted pod/wp-non-compliant created
Remova o pacote de políticas PCI-DSS v4.0
Se necessário, o pacote de políticas PCI-DSS v4.0 pode ser removido do cluster.
kubectl
- Use o kubectl para remover as políticas: - kubectl delete constraint -l policycontroller.gke.io/bundleName=pci-dss-v4.0 
kpt
- Remova as políticas: - kpt live destroy 
Config Sync
Os operadores que usam o Config Sync para implementar políticas nos respetivos clusters podem usar as seguintes instruções:
- Envie alterações para o repositório do Config Sync: - git rm -r SYNC_ROOT_DIR/policies/pci-dss-v4.0 git commit -m 'Removing PCI-DSS v4.0 policies' git push 
- Valide o estado: - nomos status - O cluster deve apresentar o estado - SYNCEDcom os recursos removidos.