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 garantir que todos os recursos executados na plataforma de nuvem atendam a requisitos de conformidade fornecendo e mantendo automação para auditar ou aplicar. Para saber mais sobre papéis comuns e tarefas de exemplo referenciados no conteúdo do Google Cloud, consulte Tarefas e funções de usuário comuns do GKE Enterprise.
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 NetworkPolicy de 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 recursos RoleBinding . |
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
gcloud
ekubectl
usados 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 Policy Controller 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
,StatefulSet
eDaemonSet
) precisam incluir umpci-dss-firewall-audit label
com o esquema depci-dss-[0-9]{4}q[1-4]
. - Todos os apps (
ReplicaSet
,Deployment
,StatefulSet
,DaemonSet
) precisam incluir uma anotaçãonetwork-controls/date
com o esquema deYYYY-MM-DD
. - Cada
namespace
definido 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-by
permitidos 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
namespace
padrã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
daemonset
chamadoclamav
nopci-dss-av
namespace
, mas o nome e o namespace dodaemonset
podem 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
BackendConfig
precisam ser configurados para CloudArmor. - O uso de secrets do tipo
basic-auth
nã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
namespace
definido no cluster tem umaNetworkPolicy
de 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
,Gateway
eService
deNodePort
eLoadBalancer
) 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-action
do kpt para definir a ação de aplicação das políticas comodryrun
: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 ao 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
CURRENT
confirma 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
.gitignore
comresourcegroup.yaml
:echo resourcegroup.yaml >> .gitignore
Crie um diretório
policies
dedicado: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-action
do kpt para definir a ação de aplicação das políticas comodryrun
: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
à raizkustomization.yaml
. Caso contrário, remova o arquivopolicies/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
SYNCED
confirma 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-action
do kpt para definir a ação de aplicação das políticas comowarn
: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-action
do kpt para definir a ação de aplicação das políticas comowarn
: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:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Seu repo que aparece na coluna
SYNCED
confirma a instalação das políticas.
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:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Seu repo que aparece na coluna
SYNCED
confirma a remoção das políticas.