Kebijakan otorisasi dan keamanan jaringan sekitar

Halaman ini menunjukkan cara membuat kebijakan otorisasi di jaringan sekitar.

Prasyarat

Sebelum dapat menyelesaikan langkah-langkah dalam dokumen ini, Anda harus memenuhi kondisi berikut:

  • Cluster GKE yang sedang berjalan dengan jaringan ambient Cloud Service Mesh diaktifkan.
  • Namespace yang terdaftar dalam jaringan sekitar (misalnya, ambient-test) dengan contoh workload klien dan server yang di-deploy.
  • Mutual TLS (mTLS) diaktifkan antara beban kerja klien dan server dengan menggunakan GCPServerTLSPolicy (dengan mtlsMode: Strict) dan GCPClientTLSPolicy. Aturan berbasis identitas GCPAuthzPolicy yang cocok dengan CLIENT_CERT_URI_SAN memerlukan mTLS aktif untuk mengekstraksi identitas SPIFFE klien.

Untuk penyiapan lingkungan yang mendetail, lihat Menyiapkan jaringan ambient GKE.

Kebijakan tolak secara default

Secara default, GKE Ambient Authorization Policy API mengizinkan semua traffic kecuali jika dibatasi oleh kebijakan, yang sesuai dengan perilakuNetworkPolicy Kubernetes standar.

Tindakan DENY_BY_DEFAULT memungkinkan Anda mengubah perilaku default ini. Jika diterapkan ke namespace, kebijakan ini akan memblokir semua traffic ke workload di namespace tersebut, kecuali jika diizinkan secara eksplisit oleh kebijakan ALLOW.

Halaman ini menunjukkan cara mengonfigurasi dan menggunakan DENY_BY_DEFAULT di Cloud Service Mesh untuk menetapkan postur keamanan secara default bagi beban kerja Anda.

Batasan

Sebelum menerapkan kebijakan DENY_BY_DEFAULT, perhatikan batasan berikut:

  • Anda hanya dapat membuat satu kebijakan DENY_BY_DEFAULT per namespace.
  • Kebijakan dengan tindakan DENY_BY_DEFAULT tidak dapat memiliki aturan yang ditentukan.
  • Gunakan tindakan ini untuk menetapkan dasar matchLabels: {} di seluruh namespace guna menargetkan semua Pod. Anda tidak dapat menggunakan DENY_BY_DEFAULT untuk pembatasan per-Pod.

Menyiapkan kebijakan otorisasi tolak secara default

Untuk menetapkan dasar-dasar penolakan secara default di seluruh namespace dan mengizinkan akses secara selektif ke beban kerja tertentu, ikuti langkah-langkah berikut:

  1. Buat dan terapkan GCPAuthzPolicy dengan tindakan yang ditetapkan ke DENY_BY_DEFAULT ke namespace Anda.

    cat <<EOF > deny-by-default-policy.yaml && kubectl apply -f deny-by-default-policy.yaml
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: deny-by-default-authz
      namespace: ambient-test
    spec:
      action: DENY_BY_DEFAULT
      enforcementLevel: L4
      targetRefs:
      - group: ""
        kind: Pod
        selector:
          matchLabels: {}
    EOF
    

    Outputnya mirip dengan:

     gcpauthzpolicy.networking.gke.io/deny-by-default-authz created
    

    Kebijakan ini memblokir semua traffic masuk (Timur-Barat dan ingress) ke beban kerja di namespace ambient-test secara default. Kebijakan ini tidak membatasi traffic keluar yang berasal dari workload di namespace.

  2. Untuk mengizinkan traffic secara selektif, buat dan terapkan kebijakan ALLOW:

    cat <<EOF > allow-policy.yaml && kubectl apply -f allow-policy.yaml
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: allow-client-to-server
      namespace: ambient-test
    spec:
      action: ALLOW
      enforcementLevel: L4
      targetRefs:
      - group: ""
        kind: Pod
        selector:
          matchLabels:
            app: server
      rules:
      - from:
          sources:
          - principals:
          - principalSelector: CLIENT_CERT_URI_SAN
            principal:
              type: Exact
              value: spiffe://PROJECT_ID.s3ns.svc.id.goog/ns/ambient-test/sa/client
    EOF
    

    Ganti PROJECT_ID dengan project ID Anda.

    Penerapan kebijakan dapat memerlukan waktu hingga tiga menit setelah pengontrol menerima. Tunggu tiga menit sebelum melanjutkan.

  3. Uji konektivitas dari klien ke server. Permintaan ini akan berhasil karena cocok dengan kebijakan ALLOW.

    kubectl exec -it deploy/client -n ambient-test -- /bin/curl -fsLS server.ambient-test.svc.cluster.local
    
  4. Uji konektivitas dari server ke server itu sendiri (atau workload lain tanpa kebijakan izin eksplisit). Permintaan akan gagal karena kebijakan DENY_BY_DEFAULT.

    kubectl exec -it deploy/server -n ambient-test -- /bin/curl -fsLS server.ambient-test.svc.cluster.local
    

    Outputnya mirip dengan:

    curl: (52) Empty reply from server.
    

Logging

Jika permintaan ditolak oleh kebijakan otorisasi, log akses GKE Ambient Proxy akan berisi kolom berikut dalam payload JSON:

  • jsonPayload.error_details: Tetapkan ke - rbac_access_denied_matched_policy[none]

Anda dapat menggunakan Logs Explorer di konsol Cloud de Confiance untuk melihat entri log akses untuk koneksi yang ditolak. Lihat Verifikasi bahwa traffic diautentikasi dan diizinkan.

Kebijakan keamanan keluar

Untuk memeriksa dan mengontrol traffic keluar dari workload jaringan sekitar ke endpoint eksternal atau internet, Anda dapat merutekan traffic keluar melalui Secure Web Proxy (SWP).

Untuk mengetahui petunjuk tentang cara mengonfigurasi resource GCPBackend dan GCPEgressRouting, lihat Merutekan traffic egress sekitar melalui Secure Web Proxy.