Menggunakan batasan kebijakan keamanan Anthos Service Mesh
Pengontrol Kebijakan dilengkapi library default berisi template batasan yang dapat digunakan dengan paket keamanan Anthos Service Mesh untuk mengaudit kepatuhan kerentanan dan praktik terbaik keamanan mesh Anda.
Paket batasan ini menangani dan menerapkan kebijakan di domain berikut:
- Anthos Service Mesh menerapkan traffic mTLS
- Praktik terbaik AuthorizationPolicy Anthos Service Mesh
- Penerapan keamanan workload Anthos Service Mesh
Batasan paket kebijakan Anthos 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 | Terapkan file bantuan proxy istio yang selalu dimasukkan ke pod workload | 1.1.2 |
asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny | Menerapkan AuthorizationPolicy penolakan 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 | 1.2.3 |
asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls | Menerapkan PeerAuthentication mtls ketat level mesh | 1.3.1 |
asm-policy-v0.0.1-asm-peer-authn-strict-mtls | Penerapan semua PeerAuthentications tidak dapat menimpa 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 luas | 1.4.1 |
Profil paket
Dalam paket kebijakan keamanan Anthos Service Mesh, Anda dapat menggunakan dua profil berdasarkan tingkat pengetatan. Tingkat pengetatan rendah menerapkan lebih sedikit batasan, sehingga memberikan fleksibilitas yang lebih besar. Tingkat pengetatan tinggi menerapkan lebih banyak batasan, sehingga memberikan kontrol kebijakan yang lebih aman.
Tingkat pengetatan rendah
Profil tingkat pengetatan rendah memiliki batasan kebijakan berikut:
Label
istio:ingressgateway
hanya dapat digunakan oleh Pod gateway masuk Istio.Di
AuthorizationPolicy
, kolomhosts
ataunotHosts
hanya dapat digunakan dengan memilih gateway masuk Istio yang memiliki labelistio:ingressgateway
.Di
AuthorizationPolicy
, saat kolommethods
ataunotMethods
digunakan, nilainya harus berupa huruf besar.Di
AuthorizationPolicy
, saat kolomrequest.headers
digunakan, nilai tidak boleh berisi spasi.Di
AuthorizationPolicy
, saat kolompaths
ataunotPaths
digunakan, nilai harus berupa nilai yang dinormalisasi.
Tingkat pengetatan tinggi
Tingkat pengetatan tinggi mencakup semua batasan dari tingkat pengetatan rendah serta batasan berikut:
Untuk semua Pod beban kerja, anotasi
sidecar.istio.io/inject: false
tidak dapat diterapkan untuk mengabaikan injeksi proxy.AuthorizationPolicy
level mesh yang menentukan aturan penolakan default diterapkan.AuthorizationPolicy
harus mengikuti setelan ALLOW-with-positive-matching atau ALLOW-with-positive-matching.Di
AuthorizationPolicy
, saat kolomhosts
ataunotHosts
digunakan, nilai harus berupa pasangan<host-name>
dan<host-name>:*
.Tingkat mesh
PeerAuthentication
yang menentukan mTLS yang ketat diterapkan.Untuk semua
PeerAuthentication
di mesh, mode mTLS hanya dapat berupaUNSET
atauSTRICT
, untuk mengikuti mTLS ketat.
Setelan paket
Penyetel KPT | Deskripsi |
---|---|
tingkat pengetatan | Profil tingkat ketat paket Anthos Service Mesh, opsinya adalah `Low` atau `High` (default) |
Sebelum memulai
- Instal dan inisialisasi Google Cloud CLI, yang menyediakan perintah
gcloud
dankubectl
yang digunakan dalam petunjuk ini. Jika Anda menggunakan Cloud Shell, Google Cloud CLI sudah diinstal sebelumnya. - 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 referensi, karena paket ini berisi batasan referensial.
- Pastikan Anthos 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 mengawasi jenis objek tertentu.
Terapkan manifes
policycontroller-config.yaml
:kubectl apply -f policycontroller-config.yaml
Paket kebijakan Audit Anthos Service Mesh
Pengontrol Kebijakan memungkinkan Anda menerapkan kebijakan untuk cluster Kubernetes Anda. Untuk membantu menguji workload dan kepatuhannya terhadap kebijakan keamanan Anthos Service Mesh yang diuraikan dalam tabel sebelumnya, Anda dapat men-deploy batasan ini dalam mode "audit" untuk mengungkap pelanggaran dan yang lebih penting memberi diri Anda kesempatan untuk memperbaikinya sebelum menerapkannya pada cluster Kubernetes Anda.
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
Output-nya 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
Pastikan 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
{i>kpt<i}
Menginstal dan menyiapkan kpt. kpt digunakan dalam petunjuk ini untuk menyesuaikan dan men-deploy resource Kubernetes.
Download paket kebijakan keamanan Anthos 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-action
untuk menetapkan tindakan penerapan kebijakan kedryrun
:kpt fn eval asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
Jalankan fungsi penyetel kpt untuk menetapkan kolom khusus kebijakan keamanan Anthos Service Mesh:
kpt fn eval asm-policy-v0.0.1 --image gcr.io/kpt-fn/apply-setters:v0.2.0 -- \ 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
Output-nya 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
Pastikan batasan kebijakan telah diinstal dan periksa apakah ada pelanggaran di seluruh cluster:
kpt live status --output table --poll-until current
Status
CURRENT
mengonfirmasi penginstalan batasan berhasil.
Config Sync
- Menginstal dan menyiapkan 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
.gitignore
denganresourcegroup.yaml
:echo resourcegroup.yaml >> .gitignore
Buat direktori
policies
khusus:mkdir -p policies
Download paket kebijakan keamanan Anthos 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-action
untuk menetapkan tindakan penerapan kebijakan kedryrun
:kpt fn eval policies/asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
Jalankan fungsi penyetel kpt untuk menetapkan kolom khusus kebijakan keamanan Anthos Service Mesh:
kpt fn eval policies/asm-policy-v0.0.1 --image gcr.io/kpt-fn/apply-setters:v0.2.0 -- \ 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
Output-nya 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 Anda untuk Config Sync menggunakan Sesuaikan, tambahkan
policies/asm-policy-v0.0.1
kekustomization.yaml
root 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
SYNCED
mengonfirmasi penginstalan kebijakan.
Lihat 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 terdapat pelanggaran, listingan 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 Anthos Service Mesh
Setelah meninjau pelanggaran kebijakan pada cluster, Anda dapat mempertimbangkan
untuk mengubah mode penerapan sehingga Pengontrol Penerimaan akan warn
aktif
atau bahkan deny
memblokir resource yang tidak mematuhi kebijakan agar tidak diterapkan ke cluster.
kubectl
Gunakan kubectl untuk menetapkan tindakan penegakan 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"}]'
Pastikan tindakan penerapan batasan kebijakan telah diperbarui:
kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1
{i>kpt<i}
Jalankan fungsi kpt
set-enforcement-action
untuk menetapkan tindakan penerapan kebijakan kewarn
: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 kpt
set-enforcement-action
untuk menetapkan tindakan penerapan kebijakan kewarn
:kpt fn eval policies/asm-policy-v0.0.1 -i gcr.io/kpt-fn/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:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Repo Anda yang muncul di kolom
SYNCED
akan mengonfirmasi penginstalan kebijakan.
Menguji penegakan kebijakan
Buat resource yang tidak mematuhi kebijakan 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 harus memberikan 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 Anthos Service Mesh
Jika diperlukan, paket kebijakan Anthos 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
{i>kpt<i}
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 Anthos Service Mesh policies' git push
Verifikasi statusnya:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Repo Anda yang muncul di kolom
SYNCED
mengonfirmasi penghapusan kebijakan.