Policy Controller dilengkapi dengan library default template batasan yang dapat digunakan dengan paket PCI-DSS v4.0 untuk mengevaluasi kepatuhan resource cluster Anda terhadap beberapa aspek Standar Keamanan Data Industri Kartu Pembayaran (PCI-DSS) v4.0.
Halaman ini berisi petunjuk untuk menerapkan paket kebijakan secara manual. Atau, Anda dapat menerapkan paket kebijakan secara langsung.
Halaman ini ditujukan bagi administrator dan Operator IT yang ingin memastikan bahwa semua resource yang berjalan dalam platform cloud memenuhi persyaratan kepatuhan organisasi dengan menyediakan dan mempertahankan otomatisasi untuk mengaudit atau menerapkan. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten, lihat Peran dan tugas pengguna GKE umum. Google Cloud
Batasan paket kebijakan PCI-DSS v4.0
| Nama Batasan | Deskripsi Batasan | ID Kontrol | 
|---|---|---|
| pci-dss-v4.0-require-apps-annotations | Mewajibkan semua aplikasi dalam cluster memiliki anotasi network-controls/date. | 2.2.5 | 
| pci-dss-v4.0-require-av-daemonset | Memerlukan kehadiran Anti-Virus 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 | Memerlukan Webhook Penerimaan Validasi Otorisasi Biner. | 2.2.1, 2.2.4, 6.2.3, 6.3.1, 6.3.2 | 
| pci-dss-v4.0-require-cloudarmor-backendconfig | Menerapkan konfigurasi Google Cloud Armor pada resource BackendConfig. | 6.4.1, 6.4.2 | 
| pci-dss-v4.0-require-config-management | Memerlukan Config Management yang berjalan dengan Pencegahan Penyimpangan diaktifkan dan setidaknya satu objek RootSyncdi 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 | Mewajibkan setiap namespace yang ditentukan dalam cluster memiliki NetworkPolicytolak default untuk egress. | 1.3.2, 1.4.4 | 
| pci-dss-v4.0-require-managed-by-label | Mewajibkan semua aplikasi memiliki label app.kubernetes.io/managed-byyang valid. | 1.2.8, 2.2.6, 5.3.5, 6.3.2, 6.5.1 | 
| pci-dss-v4.0-require-namespace-network-policies | Memerlukan setiap Namespaceyang ditentukan dalam cluster memilikiNetworkPolicy. | 1.2.5, 1.2.6, 1.4.1, 1.4.4 | 
| pci-dss-v4.0-require-peer-authentication-strict-mtls | Memastikan PeerAuthentication tidak dapat menggantikan mTLS yang ketat. | 2.2.7, 4.2.1, 8.3.2 | 
| pci-dss-v4.0-require-valid-network-ranges | Membatasi rentang CIDR yang diizinkan untuk digunakan dengan ingress dan egress. | 1.3.1, 1.3.2, 1.4.2, 1.4.4 | 
| pci-dss-v4.0-resources-have-required-labels | Mewajibkan semua aplikasi berisi label tertentu untuk memenuhi persyaratan firewall. | 1.2.7 | 
| pci-dss-v4.0-restrict-cluster-admin-role | Membatasi penggunaan peran cluster-admin. | 7.2.1, 7.2.2, 7.2.5, 8.2.4 | 
| pci-dss-v4.0-restrict-creation-with-default-serviceaccount | Membatasi pembuatan resource menggunakan akun layanan default. Tidak berpengaruh selama audit. | 2.2.2 | 
| pci-dss-v4.0-restrict-default-namespace | Membatasi pod agar tidak menggunakan namespace default. | 2.2.3 | 
| pci-dss-v4.0-restrict-ingress | Membatasi pembuatan objek Ingress. | 1.3.1, 1.4.2, 1.4.4 | 
| pci-dss-v4.0-restrict-node-image | Memastikan waktu yang konsisten dan benar di Node dengan hanya mengizinkan Container-Optimized OS atau Ubuntu sebagai image OS. | 10.6.1, 10.6.2, 10.6.3 | 
| pci-dss-v4.0-restrict-pods-exec | Membatasi penggunaan pods/execdiRolesdanClusterRoles. | 8.6.1 | 
| pci-dss-v4.0-restrict-rbac-subjects | Membatasi penggunaan nama dalam subjek RBAC ke nilai yang diizinkan. | 7.3.2, 8.2.1, 8.2.2, 8.2.4 | 
| pci-dss-v4.0-restrict-role-wildcards | Membatasi penggunaan karakter pengganti di RolesdanClusterRoles. | 7.3.3, 8.2.4 | 
| pci-dss-v4.0-restrict-storageclass | Membatasi StorageClasske daftarStorageClassyang dienkripsi secara default. | 3.3.2, 3.3.3 | 
Sebelum memulai
- Instal dan lakukan inisialisasi
Google Cloud CLI,
yang menyediakan perintah gclouddankubectlyang digunakan dalam petunjuk ini. Jika Anda menggunakan Cloud Shell, Google Cloud CLI sudah terinstal sebelumnya.
- Instal Pengontrol Kebijakan v1.16.0 atau yang lebih tinggi di cluster Anda dengan library template batasan default. Anda juga harus mengaktifkan dukungan untuk batasan referensial karena paket ini berisi batasan referensial.
Mengonfigurasi Policy Controller untuk batasan referensial
- Simpan manifes YAML berikut ke file sebagai - policycontroller-config.yaml. Manifes mengonfigurasi Policy Controller untuk memantau jenis objek tertentu.- 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"
- Terapkan manifes - policycontroller-config.yaml:- kubectl apply -f policycontroller-config.yaml
Mengonfigurasi workload cluster Anda untuk PCI-DSS v4.0
- Semua aplikasi (ReplicaSet,Deployment,StatefulSet,DaemonSet) harus menyertakan anotasinetwork-controls/datedengan skemaYYYY-MM-DD.
- Solusi antivirus diperlukan. Defaultnya adalah keberadaan daemonsetbernamaclamavdiclamavNamespace, tetapi nama dan namespacedaemonsetdapat disesuaikan dengan penerapan Anda dalam batasanpci-dss-v4.0-require-av-daemonset.
- Pengaktifan dan konfigurasi Otorisasi Biner diperlukan di pci-dss-v4.0-require-binauthz.
- Semua BackendConfigharus dikonfigurasi untuk CloudArmor.
- Keberadaan dan pengaktifan Config Sync diperlukan.
- Setiap Namespaceyang ditentukan dalam cluster memilikiNetworkPolicytolak default untuk egress, pengecualian yang diizinkan dapat ditentukan dalampci-dss-v4.0-require-namespace-network-policies.
- Penggunaan Config Sync untuk configmanagement.gke.iodiwajibkan secara default, tetapi nilaiapp.kubernetes.io/managed-byyang diizinkan dapat disesuaikan dalam batasanpci-dss-v4.0-enforce-managed-by-configmanagement-label.
- Setiap Namespaceyang ditentukan dalam cluster harus memilikiNetworkPolicy.
- Jika menggunakan Cloud Service Mesh, PeerAuthentication ASM harus menggunakan mTLS ketat spec.mtls.mode: STRICT.
- Hanya rentang IP yang diizinkan yang dapat digunakan untuk Ingress dan Express, yang dapat ditentukan dalam pci-dss-v4.0-require-valid-network-ranges.
- Semua aplikasi (ReplicaSet,Deployment,StatefulSet, danDaemonSet) harus menyertakanpci-dss-firewall-audit labeldengan skemapci-dss-[0-9]{4}q[1-4].
- Penggunaan ClusterRolecluster-admin tidak diizinkan.
- Resource tidak dapat dibuat menggunakan akun layanan default.
- Namespacedefault tidak dapat digunakan untuk pod.
- Hanya objek Ingress yang diizinkan (jenis Ingress,Gateway, danServicedariNodePortdanLoadBalancer) yang dapat dibuat, dan objek ini dapat ditentukan dalampci-dss-v4.0-restrict-ingress.
- Semua node harus menggunakan Container-Optimized OS atau Ubuntu untuk image-nya agar waktu tetap konsisten.
- Penggunaan karakter pengganti atau izin pods/execdiRolesdanClusterRolestidak diizinkan.
- Hanya subjek yang diizinkan yang dapat digunakan dalam binding RBAC, nama domain Anda dapat ditentukan dalam pci-dss-v4.0-restrict-rbac-subjects.
- Penggunaan enkripsi secara default StorageClassdiperlukan dipci-dss-v4.0-restrict-storageclass.
Mengaudit paket kebijakan PCI-DSS v4.0
Dengan Pengontrol Kebijakan, Anda dapat menerapkan kebijakan untuk cluster Kubernetes Anda. Untuk membantu menguji workload dan kepatuhannya terhadap kebijakan PCI-DSS v4.0 yang diuraikan dalam tabel sebelumnya, Anda dapat men-deploy batasan ini dalam mode "audit" untuk mengungkapkan pelanggaran dan yang lebih penting, memberi Anda kesempatan untuk memperbaikinya sebelum diterapkan di cluster Kubernetes Anda.
Anda dapat menerapkan kebijakan ini dengan spec.enforcementAction ditetapkan ke dryrun menggunakan kubectl,
kpt,
atau
Config Sync.
kubectl
- (Opsional) Lihat pratinjau batasan kebijakan dengan kubectl: - kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v4.0 
- Terapkan batasan kebijakan dengan kubectl: - kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v4.0 - Outputnya adalah sebagai berikut: - 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 
- Pastikan batasan kebijakan telah diinstal dan periksa apakah ada pelanggaran di seluruh cluster: - kubectl get constraints -l policycontroller.gke.io/bundleName=pci-dss-v4.0 - Outputnya mirip dengan hal berikut ini: - 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
- Instal dan siapkan kpt. kpt digunakan dalam petunjuk ini untuk menyesuaikan dan men-deploy resource Kubernetes. 
- Download paket kebijakan PCI-DSS v4.0 dari GitHub menggunakan kpt: - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v4.0 
- Jalankan fungsi - set-enforcement-actionKPT untuk menetapkan tindakan penerapan kebijakan ke- dryrun:- kpt fn eval pci-dss-v4.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun 
- Lakukan inisialisasi direktori kerja dengan kpt, yang membuat resource untuk melacak perubahan: - cd pci-dss-v4.0 kpt live init 
- Terapkan batasan kebijakan dengan kpt: - kpt live apply 
- Pastikan batasan kebijakan telah diinstal dan periksa apakah ada pelanggaran di seluruh cluster: - kpt live status --output table --poll-until current - Status - CURRENTmengonfirmasi penginstalan batasan yang berhasil.
Config Sync
- Instal dan siapkan kpt. kpt digunakan dalam petunjuk ini untuk menyesuaikan dan men-deploy resource Kubernetes.
Operator yang menggunakan Config Sync untuk men-deploy kebijakan ke cluster mereka dapat menggunakan petunjuk berikut:
- Ubah ke direktori sinkronisasi untuk Config Sync: - cd SYNC_ROOT_DIR - Untuk membuat atau menambahkan - .gitignoredengan- resourcegroup.yaml:- echo resourcegroup.yaml >> .gitignore 
- Buat direktori - policieskhusus:- mkdir -p policies 
- Download paket kebijakan PCI-DSS v4.0 dari GitHub menggunakan kpt: - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v4.0 policies/pci-dss-v4.0 
- Jalankan fungsi - set-enforcement-actionKPT untuk menetapkan tindakan penerapan kebijakan ke- dryrun:- kpt fn eval policies/pci-dss-v4.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun 
- (Opsional) Lihat pratinjau batasan kebijakan yang akan dibuat: - kpt live init policies/pci-dss-v4.0 kpt live apply --dry-run policies/pci-dss-v4.0 
- Jika direktori sinkronisasi Anda untuk Config Sync menggunakan Kustomize, tambahkan - policies/pci-dss-v4.0ke- kustomization.yamlroot Anda. Jika tidak, hapus file- policies/pci-dss-v4.0/kustomization.yaml:- rm SYNC_ROOT_DIR/policies/pci-dss-v4.0/kustomization.yaml 
- Kirim perubahan ke repositori 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 
- Verifikasi status penginstalan: - watch gcloud beta container fleet config-management status --project PROJECT_ID - Status - SYNCEDmengonfirmasi penginstalan kebijakan.
Melihat pelanggaran kebijakan
Setelah batasan kebijakan diinstal dalam mode audit, pelanggaran pada cluster dapat dilihat di UI menggunakan Dasbor Pengontrol Kebijakan.
Anda juga dapat menggunakan kubectl untuk melihat pelanggaran pada cluster menggunakan perintah berikut:
kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v4.0 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
Jika ada pelanggaran, daftar pesan pelanggaran per batasan dapat dilihat dengan:
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[]?]'
Mengubah tindakan penerapan paket kebijakan PCI-DSS v4.0
Setelah meninjau pelanggaran kebijakan di cluster, Anda dapat mempertimbangkan untuk mengubah mode penerapan sehingga Pengontrol Penerimaan akan warn diaktifkan atau bahkan deny memblokir penerapan resource yang tidak mematuhi kebijakan ke cluster.
kubectl
- Gunakan kubectl untuk menyetel tindakan penerapan kebijakan ke - 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"}]'
- Pastikan tindakan penerapan batasan kebijakan telah diperbarui: - kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v4.0 
kpt
- Jalankan fungsi - set-enforcement-actionKPT untuk menetapkan tindakan penerapan kebijakan ke- warn:- kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn 
- Terapkan batasan kebijakan: - kpt live apply 
Config Sync
Operator yang menggunakan Config Sync untuk men-deploy kebijakan ke cluster mereka dapat menggunakan petunjuk berikut:
- Ubah ke direktori sinkronisasi untuk Config Sync: - cd SYNC_ROOT_DIR 
- Jalankan fungsi - set-enforcement-actionKPT untuk menetapkan tindakan penerapan kebijakan ke- warn:- kpt fn eval policies/pci-dss-v4.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn 
- Kirim perubahan ke repositori 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 
- Verifikasi status penginstalan: - nomos status - Cluster akan menampilkan status - SYNCEDdengan kebijakan yang diinstal.
Menguji penegakan kebijakan
Buat resource yang tidak sesuai di cluster menggunakan perintah berikut:
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
Pengontrol penerimaan harus menghasilkan peringatan yang mencantumkan pelanggaran kebijakan yang dilakukan oleh resource ini, seperti yang ditunjukkan dalam contoh berikut:
Warning: [pci-dss-v4.0-restrict-default-namespace] <default> namespace is restricted pod/wp-non-compliant created
Menghapus paket kebijakan PCI-DSS v4.0
Jika perlu, paket kebijakan PCI-DSS v4.0 dapat dihapus dari cluster.
kubectl
- Gunakan kubectl untuk menghapus kebijakan: - kubectl delete constraint -l policycontroller.gke.io/bundleName=pci-dss-v4.0 
kpt
- Hapus kebijakan: - kpt live destroy 
Config Sync
Operator yang menggunakan Config Sync untuk men-deploy kebijakan ke cluster mereka dapat menggunakan petunjuk berikut:
- Kirim perubahan ke repositori Config Sync: - git rm -r SYNC_ROOT_DIR/policies/pci-dss-v4.0 git commit -m 'Removing PCI-DSS v4.0 policies' git push 
- Verifikasi status: - nomos status - Cluster akan menampilkan status - SYNCEDdengan resource yang dihapus.