Menyiapkan Keamanan Layanan di mesh layanan sidecar Envoy di GKE

Halaman ini menjelaskan cara menyiapkan fitur keamanan di mesh layanan sidecar Envoy di GKE.

Prasyarat

Sebagai titik awal, panduan ini mengasumsikan bahwa Anda telah:

Menyiapkan kebijakan otorisasi di sidecar di GKE

Bagian ini menunjukkan cara menyiapkan berbagai jenis kebijakan otorisasi di sidecar Cloud Service Mesh di GKE.

Sebelum dapat membuat kebijakan otorisasi, Anda harus menginstal GCPAuthzPolicy CustomResourceDefinition (CRD):

curl https://github.com/GoogleCloudPlatform/gke-networking-recipes/blob/main/gateway-api/config/mesh/crd/experimental/gcpauthzpolicy.yaml \
| kubectl apply -f -

Kebijakan Otorisasi dapat menerapkan kontrol akses pada traffic yang memasuki sidecar Envoy. Kebijakan dapat diterapkan pada deployment Kubernetes. Deployment harus berada di namespace yang sama dengan Kebijakan Otorisasi.

Kebijakan otorisasi untuk menolak semua permintaan

Jika memiliki beban kerja yang seharusnya hanya melakukan panggilan keluar, seperti tugas cron, Anda dapat mengonfigurasi kebijakan otorisasi untuk menolak permintaan HTTP yang masuk ke beban kerja. Contoh berikut menolak permintaan HTTP masuk ke workload whereami.

Lakukan langkah-langkah berikut untuk membuat dan menerapkan kebijakan otorisasi tolak:

  1. Buat kebijakan penolakan dengan membuat file bernama deny-all-authz-policy.yaml:

    cat >deny-all-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: sidecar-example
    spec:
    targetRefs:
    - kind: Deployment
      name: wherami
    httpRules:
    - to:
        operations:
        - paths:
          - type: Prefix
            value: "/"
    action: DENY
    EOF
    
  2. Terapkan kebijakan:

    kubectl apply -f deny-all-authz-policy.yaml
    

Kebijakan otorisasi untuk mengizinkan permintaan

Anda juga dapat mengonfigurasi kebijakan izin yang hanya mengizinkan permintaan yang cocok dengan kriteria tertentu, sementara menolak sisanya. Contoh berikut mengonfigurasi kebijakan otorisasi di whereami, tempat hanya permintaan GET yang memiliki header http x-user-role:admin yang ada dalam permintaan yang akan diizinkan.

Lakukan langkah-langkah berikut untuk membuat dan menerapkan kebijakan otorisasi izinkan, hapus kebijakan tolak yang dibuat sebelumnya sebelum menambahkan kebijakan ini untuk melihat hasilnya:

  1. Buat kebijakan kustom dengan membuat file bernama allow-authz-policy.yaml:

    cat >allow-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: sidecar-example
    spec:
    targetRefs:
    - kind: Deployment
      name: whereami
    httpRules:
    - to:
        operations:
        - methods: ["GET"]
      when: "request.headers['x-user-role'] == 'admin'
    action: ALLOW
    EOF
    
  2. Terapkan kebijakan:

    kubectl apply -f allow-authz-policy.yaml
    

Kebijakan otorisasi untuk menolak permintaan berdasarkan aturan

Contoh berikut menolak permintaan GET HTTP masuk ke workload whereami saat berada di jalur /admin .

Lakukan langkah-langkah berikut untuk membuat dan menerapkan kebijakan otorisasi tolak:

  1. Buat kebijakan penolakan dengan membuat file bernama deny-path-authz-policy.yaml:

    cat >deny-path-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: sidecar-example
    spec:
    targetRefs:
    - kind: Deployment
      name: whereami
    httpRules:
    - to:
        operations:
        - paths:
          - type: Prefix
            value: "/admin"
          methods: ["GET"]
    action: DENY
    EOF
    
  2. Terapkan kebijakan:

    kubectl apply -f deny-path-authz-policy.yaml