O Policy Controller vem com uma biblioteca padrão de modelos de restrição que pode ser usada com o PCI-DSS v4.0 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) v4.0.
Esta página contém instruções para aplicar manualmente um pacote de políticas. Como alternativa, você pode aplicar pacotes de políticas diretamente.
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 v4.0
| Nome da restrição | Descrição da restrição | IDs de controle | 
|---|---|---|
| pci-dss-v4.0-require-apps-annotations | Requer que todos os 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 daemonset 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 a autorização binária que valida o webhook de admissão. | 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 a recursos BackendConfig. | 6.4.1, 6.4.2 | 
| pci-dss-v4.0-require-config-management | Exige que o Config Management esteja em execução com o Drift Prevention ativado 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 cada namespace definido no cluster tenha um NetworkPolicyde negação padrão para saída. | 1.3.2, 1.4.4 | 
| pci-dss-v4.0-require-managed-by-label | Requer que todos os apps tenham um rótulo app.kubernetes.io/managed-byválido. | 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 o PeerAuthentications não pode substituir o mTLS restrito. | 2.2.7, 4.2.1, 8.3.2 | 
| pci-dss-v4.0-require-valid-network-ranges | Restringe intervalos CIDR permitidos para uso com a entrada e a saída. | 1.3.1, 1.3.2, 1.4.2, 1.4.4 | 
| pci-dss-v4.0-resources-have-required-labels | Requer que todos os apps tenham um rótulo especificado para atender aos requisitos de firewall. | 1.2.7 | 
| pci-dss-v4.0-restrict-cluster-admin-role | Restringe o uso do papel 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 usando uma conta de serviço padrão. Não tem efeito durante a auditoria. | 2.2.2 | 
| pci-dss-v4.0-restrict-default-namespace | Restringe os pods a usarem o namespace padrão. | 2.2.3 | 
| pci-dss-v4.0-restrict-ingress | Restringe a criação de objetos Ingress. | 1.3.1, 1.4.2, 1.4.4 | 
| pci-dss-v4.0-restrict-node-image | Garante tempo consistente e correto nos nós permitindo apenas o Container-Optimized OS ou o Ubuntu como a imagem do SO. | 10.6.1, 10.6.2, 10.6.3 | 
| pci-dss-v4.0-restrict-pods-exec | Restringe o uso de pods/execemRolese deClusterRoles. | 8.6.1 | 
| pci-dss-v4.0-restrict-rbac-subjects | Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. | 7.3.2, 8.2.1, 8.2.2, 8.2.4 | 
| pci-dss-v4.0-restrict-role-wildcards | Restringe o uso de caracteres curinga em RoleseClusterRoles. | 7.3.3, 8.2.4 | 
| pci-dss-v4.0-restrict-storageclass | Restringe StorageClassa uma lista deStorageClassque são criptografadas por padrão. | 3.3.2, 3.3.3 | 
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.16.0 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: "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
Configurar a carga de trabalho do cluster para PCI-DSS v4.0
- Todos os apps (ReplicaSet,Deployment,StatefulSet,DaemonSet) precisam incluir uma anotaçãonetwork-controls/datecom o esquema deYYYY-MM-DD.
- Uma solução antivírus é necessária. O padrão é a presença de um
daemonsetchamadoclamavnoclamavNamespace, mas o nome e o namespace dodaemonsetpodem ser personalizados para 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 BackendConfigprecisam ser configurados para CloudArmor.
- A presença e a ativação do Config Sync são obrigatórias.
- Cada Namespacedefinido no cluster tem umaNetworkPolicyde negação padrão para saída. As exceções permitidas podem ser específicas empci-dss-v4.0-require-namespace-network-policies.
- O uso do Config Sync para configmanagement.gke.ioé obrigatório por padrão, mas o valor permitido doapp.kubernetes.io/managed-bypode ser personalizado na restriçãopci-dss-v4.0-enforce-managed-by-configmanagement-label.
- Cada Namespacedefinido no cluster precisa ter umNetworkPolicy.
- Se estiver usando o Cloud Service Mesh, o PeerAuthentication de ASM precisará usar mTLS restrito spec.mtls.mode: STRICT.
- Somente intervalos de IP permitidos podem ser usados para Entrada e Express. Eles podem ser especificados em pci-dss-v4.0-require-valid-network-ranges.
- Todos os apps (ReplicaSet,Deployment,StatefulSeteDaemonSet) precisam incluir umpci-dss-firewall-audit labelcom o esquema depci-dss-[0-9]{4}q[1-4].
- Não é permitido usar o administrador do cluster ClusterRole.
- Não é possível criar recursos usando a conta de serviço padrão.
- O Namespacepadrão não pode ser usado para pods.
- Somente os objetos de entrada permitidos (tipos de Ingress,GatewayeServicedeNodePorteLoadBalancer) podem ser criados, que podem ser especificados empci-dss-v4.0-restrict-ingress.
- Todos os nós precisam usar o Container-Optimized OS ou o Ubuntu para a imagem a fim de garantir um tempo consistente.
- Não é permitido usar o caractere curinga ou a permissão pods/execemRoleseClusterRoles.
- Somente assuntos permitidos podem ser usados em vinculações do RBAC. Seus nomes de domínio podem ser especificados em pci-dss-v4.0-restrict-rbac-subjects.
- O uso da criptografia por padrão StorageClassé obrigatório empci-dss-v4.0-restrict-storageclass.
Auditar o pacote de políticas do PCI-DSS v4.0
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 v4.0 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-v4.0 
- 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-v4.0 - A saída é esta: - 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 
- Verifique se as restrições da política foram instaladas e se existem violações no cluster: - kubectl get constraints -l policycontroller.gke.io/bundleName=pci-dss-v4.0 - O resultado será assim: - 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 implantar recursos do Kubernetes. 
- Faça o download do pacote de políticas do PCI-DSS v4.0 no GitHub usando o kpt: - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v4.0 
- 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-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 acompanhar as alterações: - cd pci-dss-v4.0 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 v4.0 no GitHub usando o 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-actiondo kpt 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) Visualize as restrições de política 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 Kustomize, adicione - policies/pci-dss-v4.0à raiz- kustomization.yaml. Caso contrário, remova o arquivo- policies/pci-dss-v4.0/kustomization.yaml:- rm SYNC_ROOT_DIR/policies/pci-dss-v4.0/kustomization.yaml 
- Envie as 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 
- 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-v4.0 -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-v4.0 -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 v4.0
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-v4.0 -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-v4.0 
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-v4.0 -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-v4.0 git commit -m 'Adding PCI-DSS v4.0 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-v4.0-restrict-default-namespace] <default> namespace is restricted pod/wp-non-compliant created
Remoção do pacote de políticas do PCI-DSS v4.0
Se necessário, remova o pacote de políticas do PCI-DSS v4.0 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 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-v4.0 git commit -m 'Removing PCI-DSS v4.0 policies' git push 
- Verifique o status: - nomos status - O cluster vai mostrar o status - SYNCEDcom os recursos removidos.