Pengontrol Kebijakan dilengkapi dengan library default template batasan yang dapat digunakan dengan Cloud Service Mesh paket keamanan untuk mengaudit kepatuhan kerentanan keamanan mesh dan praktik terbaik Anda.
Halaman ini berisi petunjuk untuk menerapkan paket kebijakan secara manual. Atau, Anda dapat menerapkan paket kebijakan secara langsung.
Paket batasan ini membahas dan menerapkan kebijakan di domain berikut:
- Cloud Service Mesh menerapkan traffic mTLS
- Praktik terbaik Cloud Service Mesh AuthorizationPolicy
- Penerapan keamanan workload Cloud Service Mesh
Batasan paket kebijakan Cloud Service Mesh
| Nama Batasan | Deskripsi Batasan | ID Kontrol |
|---|---|---|
| asm-policy-v0.0.1-asm-ingressgateway-label | Menerapkan penggunaan label istio ingressgateway hanya pada pod ingressgateway | 1.1.1 |
| asm-policy-v0.0.1-asm-sidecar-injection | Menerapkan sidecar proxy istio yang selalu disisipkan ke pod workload | 1.1.2 |
| asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny | Menerapkan AuthorizationPolicy tolak default tingkat mesh | 1.2.1 |
| asm-policy-v0.0.1-asm-authz-policy-normalization | Menerapkan normalisasi AuthorizationPolicy | 1.2.2 |
| asm-policy-v0.0.1-asm-authz-policy-safe-pattern | Menerapkan pola aman AuthorizationPolicy aman | 1.2.3 |
| asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls | Menerapkan PeerAuthentication mtls ketat tingkat mesh | 1.3.1 |
| asm-policy-v0.0.1-asm-peer-authn-strict-mtls | Menerapkan semua PeerAuthentication tidak dapat mengganti mtls ketat | 1.3.2 |
| asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers | Menerapkan jwtRules outputPayloadToHeader agar tidak berisi header permintaan HTTP yang dikenal | 1.4.1 |
Profil paket
Dalam paket kebijakan keamanan Cloud Service Mesh, Anda dapat menggunakan dua profil berdasarkan tingkat keketatan. Tingkat keketatan rendah memiliki lebih sedikit batasan yang diterapkan, sehingga memberikan lebih banyak fleksibilitas. Tingkat keketatan tinggi memiliki lebih banyak batasan yang diterapkan, sehingga memberikan kontrol kebijakan yang lebih aman.
Tingkat keketatan rendah
Profil tingkat keketatan rendah memiliki batasan kebijakan berikut:
Label
istio:ingressgatewayhanya dapat digunakan oleh Pod gateway masuk Istio.Di
AuthorizationPolicy, kolomhostsataunotHostshanya dapat digunakan dengan memilih gateway masuk Istio yang memiliki labelistio:ingressgateway.Di
AuthorizationPolicy, saat kolommethodsataunotMethodsdigunakan, nilainya harus berupa huruf besar.Di
AuthorizationPolicy, saat kolomrequest.headersdigunakan, nilainya tidak boleh berisi spasi.Di
AuthorizationPolicy, saat kolompathsataunotPathsdigunakan, nilainya harus berupa nilai yang dinormalisasi.
Tingkat keketatan tinggi
Tingkat keketatan tinggi mencakup semua batasan dari tingkat keketatan rendah serta batasan berikut:
Untuk semua Pod workload, anotasi
sidecar.istio.io/inject: falsetidak dapat diterapkan untuk melewati injeksi proxy.`AuthorizationPolicy` tingkat mesh yang menentukan aturan tolak default diterapkan.
AuthorizationPolicyAuthorizationPolicyharus mengikuti ALLOW-with-positive-matching atau DENY-with-negative-match.Di
AuthorizationPolicy, saat kolomhostsataunotHostsdigunakan, nilainya harus berupa pasangan<host-name>dan<host-name>:*.`PeerAuthentication` tingkat mesh yang menentukan mTLS ketat diterapkan.
PeerAuthenticationUntuk semua
PeerAuthenticationdi mesh, mode mTLS hanya dapat berupaUNSETatauSTRICT, untuk mengikuti mTLS ketat.
Setelan paket
| Setter KPT | Deskripsi |
|---|---|
| strictness-level | Profil tingkat keketatan paket Cloud Service Mesh, opsinya adalah `Low` atau `High` (default) |
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. - Instal Pengontrol Kebijakan v.1.11.2 atau yang lebih tinggi di cluster Anda dengan library default template batasan. Anda juga harus mengaktifkan dukungan untuk batasan referensial, karena paket ini berisi batasan referensial.
- Pastikan Cloud Service Mesh diinstal di cluster Anda.
Mengonfigurasi Pengontrol Kebijakan untuk batasan referensial
Simpan manifes YAML berikut sebagai
policycontroller-config.yaml:apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "" version: "v1" kind: "Namespace" - group: "security.istio.io" version: "v1beta1" kind: "AuthorizationPolicy" - group: "security.istio.io" version: "v1beta1" kind: "PeerAuthentication"Manifes ini mengonfigurasi Pengontrol Kebijakan untuk memantau jenis objek tertentu.
Terapkan manifes
policycontroller-config.yaml:kubectl apply -f policycontroller-config.yaml
Mengaudit paket kebijakan Cloud Service Mesh
Pengontrol Kebijakan memungkinkan Anda menerapkan kebijakan untuk cluster Kubernetes. Untuk membantu menguji workload dan kepatuhannya terkait kebijakan keamanan Cloud Service Mesh 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 dapat menerapkan kebijakan ini dengan spec.enforcementAction yang 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/bundles/asm-policy-v0.0.1
Terapkan batasan kebijakan dengan kubectl:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
Outputnya adalah sebagai berikut:
asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny created asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-normalization created asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-safe-pattern created asmingressgatewaylabel.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-ingressgateway-label created asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls created asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-strict-mtls created asmrequestauthnprohibitedoutputheaders.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers created asmsidecarinjection.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-sidecar-injection created
Verifikasi bahwa batasan kebijakan telah diinstal dan periksa apakah ada pelanggaran di seluruh cluster:
kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
Outputnya mirip dengan hal berikut ini:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-normalization dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-safe-pattern dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmingressgatewaylabel.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-ingressgateway-label dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-strict-mtls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmrequestauthnprohibitedoutputheaders.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmsidecarinjection.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-sidecar-injection dryrun 0
kpt
Instal dan siapkan kpt. kpt digunakan dalam petunjuk ini untuk menyesuaikan dan men-deploy resource Kubernetes.
Download paket kebijakan keamanan Cloud Service Mesh dari GitHub menggunakan kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
Jalankan fungsi kpt
set-enforcement-actionuntuk menetapkan tindakan penerapan kebijakan kedryrun:kpt fn eval asm-policy-v0.0.1 -i ghcr.io/kptdev/krm-functions-catalog/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
Jalankan fungsi setter kpt untuk menetapkan kolom tertentu kebijakan keamanan Cloud Service Mesh:
kpt fn eval asm-policy-v0.0.1 --image ghcr.io/kptdev/krm-functions-catalog/apply-setters:v0.2 -- \ strictness-level="Low"
Lakukan inisialisasi direktori kerja dengan kpt, yang membuat resource untuk melacak perubahan:
cd asm-policy-v0.0.1 kpt live init
Terapkan batasan kebijakan dengan kpt:
kpt live apply
Outputnya adalah sebagai berikut:
asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-authz-policy-mesh-default-deny created asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-authz-policy-normalization created asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-authz-policy-safe-pattern created asmingressgatewaylabel.constraints.gatekeeper.sh/asm-ingressgateway-label created asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-peer-authn-mesh-strict-mtls created asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-peer-authn-strict-mtls created asmsidecarinjection.constraints.gatekeeper.sh/asm-sidecar-injection created 7 resource(s) applied. 7 created, 0 unchanged, 0 configured, 0 failed
Verifikasi bahwa 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
.gitignoredenganresourcegroup.yaml:echo resourcegroup.yaml >> .gitignore
Buat direktori
policieskhusus:mkdir -p policies
Download paket kebijakan keamanan Cloud Service Mesh dari GitHub menggunakan kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1 policies/asm-policy-v0.0.1
Jalankan fungsi kpt
set-enforcement-actionuntuk menetapkan tindakan penerapan kebijakan kedryrun:kpt fn eval policies/asm-policy-v0.0.1 -i ghcr.io/kptdev/krm-functions-catalog/set-enforcement-action:v0.1 -- enforcementAction=dryrun
Jalankan fungsi setter kpt untuk menetapkan kolom tertentu kebijakan keamanan Cloud Service Mesh:
kpt fn eval policies/asm-policy-v0.0.1 --image ghcr.io/kptdev/krm-functions-catalog/apply-setters:v0.2 -- \ strictness-level="Low"
(Opsional) Lihat pratinjau batasan kebijakan yang akan dibuat:
kpt live init policies/asm-policy-v0.0.1 kpt live apply --dry-run policies/asm-policy-v0.0.1
Outputnya adalah sebagai berikut:
Dry-run strategy: client inventory update started inventory update finished apply phase started asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny apply successful asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-normalization apply successful asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-safe-pattern apply successful asmingressgatewaylabel.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-ingressgateway-label apply successful asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls apply successful asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-strict-mtls apply successful asmrequestauthnprohibitedoutputheaders.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers apply successful asmsidecarinjection.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-sidecar-injection apply successful apply phase finished inventory update started inventory update finished apply result: 8 attempted, 8 successful, 0 skipped, 0 failed
Jika direktori sinkronisasi untuk Config Sync menggunakan Kustomize, tambahkan
policies/asm-policy-v0.0.1kekustomization.yamlroot Anda. Jika tidak, hapus filepolicies/asm-policy-v0.0.1/kustomization.yaml:rm SYNC_ROOT_DIR/policies/asm-policy-v0.0.1/kustomization.yaml
Kirim perubahan ke repo Config Sync:
git add SYNC_ROOT_DIR/policies/asm-policy-v0.0.1 git commit -m 'Adding ASM security 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=asm-policy-v0.0.1 -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=asm-policy-v0.0.1 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Mengubah tindakan penerapan paket kebijakan Cloud Service Mesh
Setelah meninjau pelanggaran kebijakan di cluster, Anda dapat mempertimbangkan untuk mengubah mode penerapan sehingga Pengontrol Penerimaan akan warn atau bahkan deny memblokir resource yang tidak sesuai agar tidak diterapkan ke cluster.
kubectl
Gunakan kubectl untuk menetapkan tindakan penerapan kebijakan ke
warn:kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'Verifikasi bahwa tindakan penerapan batasan kebijakan telah diperbarui:
kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1
kpt
Jalankan fungsi kpt
set-enforcement-actionuntuk menetapkan tindakan penerapan kebijakan kewarn:kpt fn eval -i ghcr.io/kptdev/krm-functions-catalog/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 kpt
set-enforcement-actionuntuk menetapkan tindakan penerapan kebijakan kewarn:kpt fn eval policies/asm-policy-v0.0.1 -i ghcr.io/kptdev/krm-functions-catalog/set-enforcement-action:v0.1 -- enforcementAction=warn
Kirim perubahan ke repo Config Sync:
git add SYNC_ROOT_DIR/policies/asm-policy-v0.0.1 git commit -m 'Adding ASM security policy bundle warn enforcement' git push
Verifikasi status penginstalan:
nomos status
Cluster akan menampilkan status
SYNCEDdengan kebijakan yang diinstal.
Menguji penerapan kebijakan
Buat resource yang tidak sesuai di cluster menggunakan perintah berikut:
cat <<EOF | kubectl apply -f -
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: non-compliant-authz-policy
spec:
action: ALLOW
rules:
- to:
- operation:
methods: ["get"]
EOF
Pengontrol penerimaan akan menghasilkan peringatan yang mencantumkan pelanggaran kebijakan yang dilanggar oleh resource ini, seperti yang ditunjukkan dalam contoh berikut:
Warning: [asm-policy-v0.0.1-asm-authz-policy-normalization] in rules-to-operation, methods or notMethods must be uppercase authorizationpolicy.security.istio.io/non-compliant-authz-policy created
Menghapus paket kebijakan Cloud Service Mesh
Jika diperlukan, paket kebijakan Cloud Service Mesh dapat dihapus dari cluster.
kubectl
Gunakan kubectl untuk menghapus kebijakan:
kubectl delete constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1
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 repo Config Sync:
git rm -r SYNC_ROOT_DIR/policies/asm-policy-v0.0.1 git commit -m 'Removing Cloud Service Mesh policies' git push
Verifikasi status:
nomos status
Cluster akan menampilkan status
SYNCEDdengan resource yang dihapus.