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, kolom hosts atau notHosts hanya dapat digunakan dengan memilih gateway masuk Istio yang memiliki label istio:ingressgateway.

  • Di AuthorizationPolicy, saat kolom methods atau notMethods digunakan, nilainya harus berupa huruf besar.

  • Di AuthorizationPolicy, saat kolom request.headers digunakan, nilai tidak boleh berisi spasi.

  • Di AuthorizationPolicy, saat kolom paths atau notPaths 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 kolom hosts atau notHosts 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 berupa UNSET atau STRICT, 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

  1. Instal dan inisialisasi Google Cloud CLI, yang menyediakan perintah gcloud dan kubectl yang digunakan dalam petunjuk ini. Jika Anda menggunakan Cloud Shell, Google Cloud CLI sudah diinstal sebelumnya.
  2. 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.
  3. Pastikan Anthos Service Mesh diinstal di cluster Anda.

Mengonfigurasi Pengontrol Kebijakan untuk batasan referensial

  1. 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.

  2. 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

  1. (Opsional) Lihat pratinjau batasan kebijakan dengan kubectl:

    kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
    
  2. 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
    
  3. 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}

  1. Menginstal dan menyiapkan kpt. kpt digunakan dalam petunjuk ini untuk menyesuaikan dan men-deploy resource Kubernetes.

  2. 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
    
  3. Jalankan fungsi kpt set-enforcement-action untuk menetapkan tindakan penerapan kebijakan ke dryrun:

    kpt fn eval asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \
      -- enforcementAction=dryrun
    
  4. 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"
    
  5. Lakukan inisialisasi direktori kerja dengan kpt, yang membuat resource untuk melacak perubahan:

    cd asm-policy-v0.0.1
    kpt live init
    
  6. 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
    
  7. 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

  1. 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:

  1. Ubah ke direktori sinkronisasi untuk Config Sync:

    cd SYNC_ROOT_DIR
    

    Untuk membuat atau menambahkan .gitignore dengan resourcegroup.yaml:

    echo resourcegroup.yaml >> .gitignore
    

  2. Buat direktori policies khusus:

    mkdir -p policies
    
  3. 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
    
  4. Jalankan fungsi kpt set-enforcement-action untuk menetapkan tindakan penerapan kebijakan ke dryrun:

    kpt fn eval policies/asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  5. 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"
    
  6. (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
    
  7. Jika direktori sinkronisasi Anda untuk Config Sync menggunakan Sesuaikan, tambahkan policies/asm-policy-v0.0.1 ke kustomization.yaml root Anda. Jika tidak, hapus file policies/asm-policy-v0.0.1/kustomization.yaml:

    rm SYNC_ROOT_DIR/policies/asm-policy-v0.0.1/kustomization.yaml
    
  8. 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
    
  9. 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

  1. 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"}]'
    
  2. Pastikan tindakan penerapan batasan kebijakan telah diperbarui:

    kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1
    

{i>kpt<i}

  1. Jalankan fungsi kpt set-enforcement-action untuk menetapkan tindakan penerapan kebijakan ke warn:

    kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  2. Terapkan batasan kebijakan:

    kpt live apply
    

Config Sync

Operator yang menggunakan Config Sync untuk men-deploy kebijakan ke cluster mereka dapat menggunakan petunjuk berikut:

  1. Ubah ke direktori sinkronisasi untuk Config Sync:

    cd SYNC_ROOT_DIR
    
  2. Jalankan fungsi kpt set-enforcement-action untuk menetapkan tindakan penerapan kebijakan ke warn:

    kpt fn eval policies/asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  3. 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
    
  4. 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:

  1. 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
    
  2. Verifikasi statusnya:

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    Repo Anda yang muncul di kolom SYNCED mengonfirmasi penghapusan kebijakan.