Mengonfigurasi ekstensi otorisasi

Service Extensions memungkinkan Load Balancer Aplikasi mengirimkan callout ke layanan backend untuk menyisipkan pemrosesan kustom di jalur pemrosesan. Ekstensi otorisasi berjalan di jalur pemrosesan permintaan saat load balancer menerima header permintaan dan setelah peta URL memilih layanan backend. Halaman ini menjelaskan cara mengonfigurasi ekstensi otorisasi untuk menggunakan mesin otorisasi kustom yang ditentukan dalam kebijakan otorisasi.

Untuk mengetahui ringkasan tentang ekstensi Load Balancer Aplikasi, lihat Ringkasan ekstensi Cloud Load Balancing.

Pengantar

Cloud Load Balancing memungkinkan Anda mengonfigurasi kebijakan otorisasi yang menerapkan kontrol akses pada traffic yang masuk ke load balancer. Terkadang, keputusan otorisasi yang kompleks tidak dapat dengan mudah dinyatakan menggunakan kebijakan otorisasi.

Anda dapat mengonfigurasi kebijakan otorisasi dengan ekstensi otorisasi untuk mendelegasikan keputusan otorisasi ke mesin otorisasi kustom. Di jalur data, ekstensi otorisasi dijalankan setelah ekstensi rute, tetapi sebelum ekstensi traffic. Untuk mengetahui informasi selengkapnya tentang kebijakan otorisasi, lihat Ringkasan kebijakan otorisasi.

Untuk setiap permintaan otorisasi, proxy meneruskan header permintaan ke ekstensi. Bergantung pada respons dari penyedia, proxy akan meneruskan atau menolak permintaan.

Dalam Pratinjau, untuk Load Balancer Aplikasi eksternal regional dan Load Balancer Aplikasi internal regional, Anda dapat mengonfigurasi ekstensi otorisasi secara terpisah untuk kebijakan otorisasi permintaan dan kebijakan otorisasi konten. Ekstensi yang didasarkan pada kebijakan otorisasi permintaan dikonfigurasi untuk dijalankan sebelum ekstensi yang didasarkan pada kebijakan otorisasi konten.

Untuk mengetahui informasi tentang batas yang terkait dengan ekstensi Load Balancer Aplikasi, lihat halaman Kuota dan batas.

Mengonfigurasi ekstensi otorisasi dasar

Contoh berikut menunjukkan cara mengonfigurasi ekstensi otorisasi, my-authz-ext, dengan kebijakan otorisasi untuk mendelegasikan keputusan otorisasi untuk Load Balancer Aplikasi eksternal global.

gcloud

  1. Buat resource yang diperlukan seperti yang dijelaskan dalam Mengonfigurasi layanan backend callout.

    Untuk latihan ini, buat Load Balancer Aplikasi eksternal global. Beri nama layanan authz-service dan aturan penerusan fr1.

  2. Konfigurasi ekstensi otorisasi.

    1. Tentukan ekstensi dalam file YAML yang mengaitkannya dengan layanan backend, authz-service. Gunakan nilai sampel yang diberikan.

      cat >authz-extension.yaml <<EOF
          name: my-authz-ext
          authority: ext11.com
          loadBalancingScheme: EXTERNAL_MANAGED
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service
          forwardHeaders:
            - Authorization
          failOpen: false
          timeout: "0.1s"
          forwardAttributes:
          - request.mcp_param
          - connection.client_cert_leaf
      EOF
      

      Ganti PROJECT_ID dengan project ID.

      Untuk mengetahui informasi selengkapnya tentang kolom dalam file YAML, lihat ExtensionChain dalam dokumentasi API. Untuk mengetahui informasi tentang atribut yang didukung, lihat Atribut yang didukung.

    2. Impor ekstensi otorisasi. Gunakan perintah gcloud service-extensions authz-extensions import dengan nilai contoh berikut.

      gcloud service-extensions authz-extensions import my-authz-ext \
          --source=authz-extension.yaml \
          --location=global
      

      Jika Anda ingin menyetel protokol ke ext_authz, gunakan perintah gcloud beta service-extensions authz-extensions import sebagai gantinya.

  3. Konfigurasi kebijakan otorisasi dengan ekstensi.

    1. Tentukan kebijakan otorisasi yang mengaitkan ekstensi my-authz-ext dengan aturan penerusan fr1. Gunakan nilai sampel yang diberikan. Tindakan CUSTOM menunjukkan bahwa ekstensi sedang digunakan.

      cat >authz-policy.yaml <<EOF
          name: my-authz-policy
          target:
            loadBalancingScheme: EXTERNAL_MANAGED
            resources:
              - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/fr1"
          action: CUSTOM
          customProvider:
            authzExtension:
              resources:
                - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext"
      EOF
      
    2. Impor kebijakan otorisasi ke project. Gunakan perintah gcloud network-security authz-policies import dengan nilai contoh berikut.

      gcloud network-security authz-policies import my-authz-policy \
          --source=authz-policy.yaml \
          --location=global
      

Mengonfigurasi ekstensi otorisasi berdasarkan profil

Anda dapat mengonfigurasi ekstensi otorisasi secara terpisah untuk kebijakan otorisasi permintaan dan konten.

Untuk kebijakan otorisasi permintaan

Contoh berikut menunjukkan cara mengonfigurasi ekstensi otorisasi yang menerapkan kebijakan otorisasi permintaan ke aturan penerusan di us-west1. Kebijakan ini mewajibkan traffic untuk melewati autentikasi TLS bersama dari pokok tertentu sebelum diizinkan mencapai tujuan, example.com/mcp.

gcloud

  1. Konfigurasi layanan backend panggilan bernama lb-request-authz-service di us-west1 dengan aturan penerusan bernama fr2.

    Untuk layanan ini, siapkan Load Balancer Aplikasi eksternal regional dengan backend grup instance VM.

  2. Konfigurasi ekstensi otorisasi.

    1. Tentukan ekstensi dalam file YAML yang mengaitkan ekstensi dengan layanan backend, lb-request-authz-service. Gunakan nilai contoh yang diberikan.

      cat >lb-request-authz-extension.yaml <<EOF
      name: my-lb-request-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-request-service
      forwardHeaders:
        - Authorization
      failOpen: false
      timeout: "0.1s"
      wireFormat: EXT_AUTHZ_GRPC
      EOF
      

      Ganti PROJECT_ID dengan project ID.

      Ekstensi harus berada di region yang sama dengan layanan backend Anda.

      Secara default, semua panggilan Ekstensi Layanan menggunakan protokol Pemrosesan Eksternal Envoy atau ext_proc. Dalam kasus anotasi otorisasi, protokol Otorisasi Eksternal atau ext_authz juga didukung dalam Pratinjau. Jika opsi wireFormat disetel ke EXT_AUTHZ_GRPC, info menggunakan protokol ext_authz. Jika opsi tidak ditentukan, balon panggilan akan menggunakan protokol ext_proc.

      Untuk kebijakan otorisasi permintaan, nilai wireFormat dapat berupa EXT_AUTHZ_GRPC sehingga balon menggunakan protokol ext_authz meskipun protokol ext_proc juga didukung.

      Secara default, failOpen disetel ke false. Jika waktu tunggu ekstensi habis atau gagal, pemrosesan permintaan akan berhenti. Opsi default ini lebih disukai jika memprioritaskan keamanan atau integritas daripada ketersediaan.

    2. Impor ekstensi otorisasi. Gunakan perintah gcloud beta service-extensions authz-extensions import dengan nilai contoh berikut.

      gcloud beta service-extensions authz-extensions import my-lb-request-authz-ext \
          --source=lb-request-authz-extension.yaml \
          --location=us-west1
      
  3. Dalam project yang sama, konfigurasi kebijakan otorisasi dengan ekstensi.

    Untuk setiap permintaan ke example.com/mcp, kebijakan ini memerlukan autentikasi TLS bersama dari prinsipal tertentu dan selanjutnya mendelegasikan keputusan otorisasi ke ekstensi otorisasi, my-lb-authz-request-ext.

    1. Tentukan kebijakan otorisasi yang mengaitkan ekstensi my-lb-request-authz-ext dengan aturan penerusan fr2. Gunakan nilai sampel yang diberikan.

      cat >lb-request-authz-policy.yaml <<EOF
      name: my-lb-request-authz-policy
      target:
        resources:
          - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr2"
      policyProfile: REQUEST_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/mcp"
        from:
          sources:
          - principals:
            - principal_selector: CLIENT_CERT_DNS_NAME_SANS
              principal:
                exact: "spiffe://p.global.123.workload.id.goog/ns/ns1/sa/hellomcp"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-lb-request-authz-ext"
      EOF
      

      Untuk kebijakan otorisasi permintaan, nilai policyProfile harus berupa REQUEST_AUTHZ. Nilai ini menunjukkan bahwa penyedia kebijakan kustom bertindak atas permintaan untuk mengizinkan atau menolak traffic.

      Tindakan CUSTOM menunjukkan bahwa ekstensi dikaitkan dengan proxy.

      Untuk mengetahui informasi selengkapnya tentang resource kebijakan otorisasi, lihat dokumentasi referensi authzPolicy.

    2. Impor kebijakan otorisasi ke project. Gunakan perintah gcloud beta network-security authz-policies import dengan nilai contoh berikut.

      gcloud beta network-security authz-policies import my-lb-request-authz-policy \
          --source=lb-request-authz-policy.yaml \
          --location=us-west1
      

Untuk kebijakan otorisasi konten

Contoh berikut menunjukkan cara mengonfigurasi ekstensi otorisasi yang menerapkan kebijakan otorisasi konten ke aturan penerusan di us-west1. Kebijakan ini mewajibkan layanan pembersihan konten untuk melakukan pemeriksaan mendalam pada payload aplikasi Anda guna mengizinkan atau menolak permintaan atau mengubah permintaan dan respons, sebagaimana diperlukan.

gcloud

  1. Konfigurasi layanan backend panggilan bernama lb-content-authz-service di us-west1 dengan aturan penerusan bernama fr3.

    Untuk layanan ini, siapkan Load Balancer Aplikasi eksternal regional dengan backend grup instance VM.

    Konfigurasi server ekstensi dengan protokol ext_proc dalam FULL_DUPLEX_STREAMED mode pemrosesan isi dan mendukung semua peristiwa.

  2. Konfigurasi ekstensi otorisasi.

    1. Tentukan ekstensi dalam file YAML yang mengaitkan ekstensi dengan layanan backend, lb-content-authz-service. Gunakan nilai contoh yang diberikan.

      cat >lb-content-authz-extension.yaml <<EOF
      name: my-lb-content-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-sdp-service
      failOpen: false
      timeout: "0.1s"
      EOF
      

      Untuk kebijakan otorisasi konten, nilai policyProfile harus berupa CONTENT_AUTHZ.

      Untuk kebijakan CONTENT_AUTHZ, nilai wireFormat tidak perlu ditetapkan secara eksplisit sebagai EXT_PROC_GRPC. Secara default, balon teks menggunakan protokol ext_proc.

    2. Impor ekstensi otorisasi. Gunakan perintah gcloud beta service-extensions authz-extensions import dengan nilai contoh berikut.

      gcloud beta service-extensions authz-extensions import my-lb-content-authz-ext \
          --source=lb-content-authz-extension.yaml \
          --location=us-west1
      
  3. Konfigurasi kebijakan otorisasi dengan ekstensi.

    1. Tentukan kebijakan otorisasi yang mengaitkan ekstensi my-lb-content-authz-ext dengan aturan penerusan, fr3. Gunakan nilai contoh yang diberikan.

      cat >lb-content-authz-policy.yaml <<EOF
      name: lb-content-authz-policy
      target:
        resources:
          - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr3"
      policyProfile: CONTENT_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/sensitive-stuff"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-lb-authz-content-ext"
      EOF
      

      Nilai policyProfile harus CONTENT_AUTHZ.

    2. Impor kebijakan otorisasi ke project. Gunakan perintah gcloud beta network-security authz-policies import dengan nilai contoh berikut.

      gcloud beta network-security authz-policies import my-lb-content-authz-policy \
          --source=lb-content-authz-policy.yaml \
          --location=us-west1
      

Batasan untuk ekstensi otorisasi

Berikut beberapa batasan ekstensi otorisasi:

  • Kebijakan otorisasi hanya dapat memiliki satu ekstensi otorisasi.
  • Aturan penerusan dapat digunakan dengan beberapa kebijakan otorisasi yang hanya satu di antaranya dapat berupa kebijakan otorisasi kustom.

Untuk batasan yang berlaku untuk semua ekstensi, lihat Batasan untuk ekstensi.

Langkah berikutnya