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 RootSync no 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 NetworkPolicy de 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-by vá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 Namespace definido no cluster tenha um NetworkPolicy .
|
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/exec em Roles e de ClusterRoles .
|
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 Roles e ClusterRoles .
|
7.3.3, 8.2.4 |
pci-dss-v4.0-restrict-storageclass | Restringe StorageClass a uma lista de StorageClass que 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
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.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/date
com o esquema deYYYY-MM-DD
. - Uma solução antivírus é necessária. O padrão é a presença de um
daemonset
chamadoclamav
noclamav
Namespace
, mas o nome e o namespace dodaemonset
podem 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
BackendConfig
precisam ser configurados para CloudArmor. - A presença e a ativação do Config Sync são obrigatórias.
- 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-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-by
pode ser personalizado na restriçãopci-dss-v4.0-enforce-managed-by-configmanagement-label
. - Cada
Namespace
definido 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
,StatefulSet
eDaemonSet
) precisam incluir umpci-dss-firewall-audit label
com 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
Namespace
padrão não pode ser usado para pods. - Somente os objetos de entrada permitidos (tipos de
Ingress
,Gateway
eService
deNodePort
eLoadBalancer
) 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/exec
emRoles
eClusterRoles
. - 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-action
do kpt para definir a ação de aplicação das políticas comodryrun
: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
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 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-action
do kpt para definir a ação de aplicação das políticas comodryrun
: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
à raizkustomization.yaml
. Caso contrário, remova o arquivopolicies/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
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-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-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-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
SYNCED
com 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
SYNCED
com os recursos removidos.