Menyiapkan kebijakan otorisasi untuk Load Balancer Aplikasi

Halaman ini menunjukkan cara menyiapkan kebijakan otorisasi untuk Load Balancer Aplikasi.

Sebelum memulai

Menyiapkan load balancer

Jika Anda belum membuat load balancer, lihat halaman berikut untuk menyiapkan Load Balancer Aplikasi pilihan Anda:

Membuat kebijakan otorisasi

Untuk membuat kebijakan otorisasi, Anda membuat file YAML yang menentukan target dan aturan, lalu mengimpor file menggunakan perintah gcloud network-security authz-policies.

Bagian ini memberikan petunjuk untuk membuat kebijakan otorisasi yang dilampirkan ke aturan penerusan Load Balancer Aplikasi.

Untuk mempelajari lebih lanjut cara membuat kebijakan otorisasi untuk Agent Gateway yang mendelegasikan otorisasi menggunakan Service Extensions, lihat Mendelegasikan otorisasi dengan Service Extensions.

Untuk mempelajari lebih lanjut cara membuat kebijakan otorisasi untuk Secure Web Proxy, lihat Menyiapkan kebijakan otorisasi untuk Secure Web Proxy.

Kebijakan otorisasi untuk menolak permintaan

Bagian ini memberikan contoh kebijakan otorisasi yang menolak permintaan berdasarkan atribut permintaan tertentu.

Menolak permintaan berdasarkan rentang alamat IP

Bagian ini memberikan contoh kebijakan otorisasi yang menolak permintaan berdasarkan permintaan yang berasal dari rentang alamat IP tertentu.

Global dan lintas region

  1. Tentukan kebijakan otorisasi dalam file YAML.

    Contoh berikut membuat file authz-policy-deny.yaml untuk aturan penerusan LB_FORWARDING_RULE di lokasi global. Kebijakan ini menolak akses klien dengan alamat IP dalam rentang 10.0.0.0/24 ke jalur URL /api/payments.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
    - to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi eksternal global, tetapkan skema ke EXTERNAL_MANAGED. Untuk Load Balancer Aplikasi internal lintas region, tetapkan skema ke INTERNAL_MANAGED.
    • PROJECT_ID: ID Google Cloud project Anda.
    • LB_FORWARDING_RULE: nama aturan penerusan load balancer.
  2. Buat kebijakan otorisasi dengan mengimpor file YAML kebijakan otorisasi menggunakan perintah gcloud network-security authz-policies import.

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

Regional

  1. Tentukan kebijakan otorisasi dalam file YAML.

    Contoh berikut membuat file authz-policy-deny.yaml untuk aturan penerusan LB_FORWARDING_RULE di region Google Cloud . Kebijakan ini menolak akses klien dengan alamat IP dalam rentang 10.0.0.0/24 ke jalur URL /api/payments.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
    - to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi eksternal regional, tetapkan skema ke EXTERNAL_MANAGED. Untuk Load Balancer Aplikasi internal regional, tetapkan skema ke INTERNAL_MANAGED.
    • PROJECT_ID: ID Google Cloud project Anda.
    • LB_FORWARDING_RULE: nama aturan penerusan load balancer.
  2. Buat kebijakan otorisasi dengan mengimpor file YAML kebijakan otorisasi menggunakan perintah gcloud network-security authz-policies import.

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

Menolak permintaan berdasarkan prinsipal sertifikat klien

Bagian ini memberikan contoh kebijakan otorisasi yang menolak permintaan berdasarkan akun utama sertifikat klien.

Global dan lintas region

  1. Tentukan kebijakan otorisasi dalam file YAML.

    Contoh berikut membuat file authz-policy-deny.yaml untuk aturan penerusan LB_FORWARDING_RULE di lokasi global.Kebijakan ini menolak akses ke jalur URL /api/payments bagi klien yang memiliki www.example.com di SAN nama DNS sertifikat klien mereka.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - principals:
          - principalSelector: CLIENT_CERT_DNS_NAME_SAN
            principal:
              exact: "www.example.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi eksternal global, tetapkan skema ke EXTERNAL_MANAGED. Untuk Load Balancer Aplikasi internal lintas region, tetapkan skema ke INTERNAL_MANAGED.
    • PROJECT_ID: ID Google Cloud project Anda.
    • LB_FORWARDING_RULE: nama aturan penerusan load balancer.
  2. Buat kebijakan otorisasi dengan mengimpor file YAML kebijakan otorisasi menggunakan perintah gcloud network-security authz-policies import.

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

Regional

  1. Tentukan kebijakan otorisasi dalam file YAML.

    Contoh berikut membuat file authz-policy-deny.yaml untuk aturan penerusan LB_FORWARDING_RULE di regionGoogle Cloud . Kebijakan ini menolak akses ke jalur URL /api/payments bagi klien yang memiliki www.example.com di SAN nama DNS sertifikat klien mereka.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - principals:
          - principalSelector: CLIENT_CERT_DNS_NAME_SAN
            principal:
              exact: "www.example.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi eksternal regional, tetapkan skema ke EXTERNAL_MANAGED. Untuk Load Balancer Aplikasi internal regional, tetapkan skema ke INTERNAL_MANAGED.
    • PROJECT_ID: ID Google Cloud project Anda.
    • LOCATION: Google Cloud region Anda.
    • LB_FORWARDING_RULE: nama aturan penerusan load balancer.
  2. Buat kebijakan otorisasi dengan mengimpor file YAML kebijakan otorisasi menggunakan perintah gcloud network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=LOCATION
    

Kebijakan otorisasi untuk mengizinkan permintaan

Bagian ini memberikan contoh kebijakan otorisasi yang mengizinkan permintaan yang berasal dari rentang alamat IP tertentu.

Global dan lintas region

Jika Anda menggunakan Load Balancer Aplikasi eksternal global atau Load Balancer Aplikasi internal lintas region, ikuti langkah-langkah berikut untuk membuat kebijakan otorisasi:

  1. Tentukan kebijakan otorisasi dalam file YAML.

    Contoh berikut membuat file authz-policy-allow.yaml untuk aturan penerusan LB_FORWARDING_RULE di lokasi global. Kebijakan ini memungkinkan klien dengan alamat IP dalam rentang 10.0.0.0/24 mengakses jalur URL /api/payments.

    cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi eksternal global, tetapkan skema ke EXTERNAL_MANAGED. Untuk Load Balancer Aplikasi internal lintas region, tetapkan skema ke INTERNAL_MANAGED.
    • PROJECT_ID: ID Google Cloud project Anda.
    • LB_FORWARDING_RULE: nama aturan penerusan load balancer.
  2. Buat kebijakan otorisasi dengan mengimpor file YAML kebijakan otorisasi menggunakan perintah gcloud network-security authz-policies import.

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

Regional

Jika Anda menggunakan Load Balancer Aplikasi eksternal regional atau Load Balancer Aplikasi internal regional, ikuti langkah-langkah berikut untuk membuat dan mengimpor kebijakan otorisasi:

  1. Tentukan kebijakan otorisasi dalam file YAML.

    Contoh berikut membuat file authz-policy-allow.yaml untuk aturan pengalihan LB_FORWARDING_RULE di region Google Cloud tertentu. Kebijakan ini memungkinkan klien dengan alamat IP dalam rentang 10.0.0.0/24 mengakses jalur URL /api/payments.

    cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi eksternal regional, tetapkan skema ke EXTERNAL_MANAGED. Untuk Load Balancer Aplikasi internal regional, tetapkan skema ke INTERNAL_MANAGED.
    • PROJECT_ID: ID Google Cloud project Anda.
    • LOCATION: Google Cloud region Anda.
    • LB_FORWARDING_RULE: nama aturan penerusan load balancer.
  2. Buat kebijakan otorisasi dengan mengimpor file YAML kebijakan otorisasi menggunakan perintah gcloud network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-allow \
        --source=authz-policy-allow.yaml \
        --location=LOCATION
    

Kebijakan otorisasi berdasarkan akun layanan atau tag

Anda dapat menerapkan kebijakan otorisasi berdasarkan akun layanan atau tag aman yang dilampirkan ke berbagai Google Cloud resource.

Contoh ini mengasumsikan bahwa Anda telah melakukan tindakan berikut:

Akun layanan

  1. Tentukan kebijakan otorisasi dalam file YAML.

    Contoh berikut membuat file authz-policy-deny.yaml untuk aturan penerusan LB_FORWARDING_RULE dari Load Balancer Aplikasi internal regional. Kebijakan dikonfigurasi untuk menolak permintaan dari resource Google Cloud , seperti VM Compute Engine, dengan akun layanan my-sa-123@PROJECT_ID.iam.gserviceaccount.com untuk mencapai jalur /api/payments.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - resources:
           - iamServiceAccount:
               exact: "my-sa-123@PROJECT_ID.iam.gserviceaccount.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi internal regional dan Load Balancer Aplikasi internal lintas region, tetapkan skema ke INTERNAL_MANAGED.
    • PROJECT_ID: ID Google Cloud project Anda.
    • LOCATION: Google Cloud region Anda.
    • LB_FORWARDING_RULE: nama aturan penerusan load balancer.
  2. Buat kebijakan otorisasi dengan mengimpor file YAML kebijakan otorisasi menggunakan perintah gcloud network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=LOCATION
    

    Ganti LOCATION dengan region Google Cloud Anda.

Tag

  1. Tentukan kebijakan otorisasi dalam file YAML.

    Contoh berikut membuat file authz-policy-allow.yaml untuk aturan penerusan LB_FORWARDING_RULE Load Balancer Aplikasi internal regional. Kebijakan ini hanya mengizinkan permintaan yang berasal dari resource Google Cloud , seperti VM Compute Engine, dengan nilai tag aman TAG_VALUE_PERMANENT_ID untuk mengakses jalur URL /api/payments.

    cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
      sources:
        resources:
        - tagValueIdSet:
          - ids: "TAG_VALUE_PERMANENT_ID"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi internal regional dan Load Balancer Aplikasi internal lintas region, tetapkan skema ke INTERNAL_MANAGED.
    • PROJECT_ID: ID Google Cloud project Anda.
    • LOCATION: Google Cloud region Anda.
    • LB_FORWARDING_RULE: nama aturan penerusan load balancer.
    • TAG_VALUE_PERMANENT_ID: ID permanen nilai tag.
  2. Buat kebijakan otorisasi dengan mengimpor file YAML kebijakan otorisasi menggunakan perintah gcloud network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-allow \
        --source=authz-policy-allow.yaml \
        --location=LOCATION
    

    Ganti kode berikut:

    • LOCATION: Google Cloud region Anda.

Kebijakan otorisasi untuk mendelegasikan keputusan otorisasi

Contoh di bagian ini membuat kebijakan otorisasi yang mendelegasikan keputusan otorisasi ke layanan berikut melalui Service Extensions:

Mendelegasikan keputusan otorisasi ke layanan yang dikelola pengguna

Anda dapat mengonfigurasi kebijakan otorisasi untuk mendelegasikan keputusan otorisasi ke layanan yang dikelola pengguna melalui Service Extensions, khususnya ekstensi otorisasi.

  • Untuk load balancer global dan lintas region, ekstensi otorisasi dapat berjalan di layanan backend yang dikelola pengguna Google Cloud .

  • Untuk load balancer regional, ekstensi otorisasi dapat berjalan di layanan backend yang dikelola pengguna dan layanan berbasis FQDN. Google Cloud

Penyiapan contoh ini mengasumsikan bahwa Anda telah membuat layanan backend Google Cloud yang dikelola pengguna, yang juga disebut sebagai layanan backend teks promosi, bernama authz-service. Untuk mempelajari lebih lanjut cara membuatnya, lihat Mengonfigurasi layanan backend teks singkat yang dikelola pengguna.

Untuk layanan berbasis FQDN, contoh penyiapan ini mengasumsikan bahwa layanan kustom di-deploy di VPC Anda sendiri, mendukung protokol ext_authz, dan dapat diakses oleh nama domain yang sepenuhnya memenuhi syarat mycustomauthz.internal.net.

Global dan lintas region

Jika Anda menggunakan Load Balancer Aplikasi eksternal global atau Load Balancer Aplikasi internal lintas region, ikuti langkah-langkah berikut untuk mendelegasikan keputusan otorisasi ke layanan yang dikelola pengguna.

  1. Tentukan ekstensi otorisasi dalam file YAML. Ekstensi otorisasi berjalan di layanan backend (authz-service) dan mendukung protokol ext_authz.

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    authority: ext11.com
    loadBalancingScheme: LB_SCHEME
    service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service
    forwardHeaders:
      - Authorization
    failOpen: false
    timeout: "0.1s"
    wireFormat: EXT_AUTHZ_GRPC
    EOF
    
  2. Buat ekstensi otorisasi dengan mengimpor file YAML ekstensi otorisasi menggunakan perintah gcloud service-extensions authz-extensions import.

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

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi eksternal global, tetapkan skema ke EXTERNAL_MANAGED. Untuk Load Balancer Aplikasi internal lintas region, tetapkan skema ke INTERNAL_MANAGED.
    • PROJECT_ID: ID Google Cloud project Anda.
  3. Tentukan kebijakan otorisasi dalam file YAML. Kebijakan otorisasi mendelegasikan otorisasi ke ekstensi otorisasi di kolom customProvider.

    Kebijakan ini memanggil ekstensi otorisasi my-authz-ext untuk semua traffic ke jalur URL example.com/api/payments saat permintaan berisi header Authorization yang tidak kosong.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - to:
        operations:
        - hosts:
          - exact: "example.com"
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext"
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi eksternal global, tetapkan skema ke EXTERNAL_MANAGED. Untuk Load Balancer Aplikasi internal lintas region, tetapkan skema ke INTERNAL_MANAGED.
    • PROJECT_ID: ID Google Cloud project Anda.
    • LB_FORWARDING_RULE: nama aturan penerusan load balancer.
  4. Buat kebijakan otorisasi dengan mengimpor file YAML kebijakan otorisasi menggunakan perintah gcloud network-security authz-policies import.

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

Regional

Jika Anda menggunakan Load Balancer Aplikasi eksternal regional atau Load Balancer Aplikasi internal regional, ikuti langkah-langkah berikut untuk mendelegasikan keputusan otorisasi ke layanan yang dikelola pengguna.

  1. Tentukan ekstensi otorisasi dalam file YAML. Ekstensi otorisasi dapat berjalan di layanan backend atau layanan berbasis FQDN.

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    authority: ext11.com
    loadBalancingScheme: LB_SCHEME
    service: BACKEND_SERVICE_URI_OR_FQDN
    forwardHeaders:
      - Authorization
    failOpen: false
    timeout: "0.1s"
    wireFormat: EXT_AUTHZ_GRPC
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi eksternal regional, tetapkan skema ke EXTERNAL_MANAGED. Untuk Load Balancer Aplikasi internal regional, tetapkan skema ke INTERNAL_MANAGED.
    • BACKEND_SERVICE_URI_OR_FQDN: layanan dapat berupa salah satu dari berikut ini:
      • URI resource layanan backend regional dengan format https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/backendServices/authz-service.
      • nama domain yang sepenuhnya memenuhi syarat (misalnya, mycustomauthz.extension.net) yang dapat diselesaikan oleh Cloud DNS.
  2. Buat ekstensi otorisasi dengan mengimpor file YAML ekstensi otorisasi menggunakan perintah gcloud service-extensions authz-extensions import.

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

    Ganti LOCATION dengan Google Cloud region tempat layanan backend info promosi dikonfigurasi.

  3. Tentukan kebijakan otorisasi dalam file YAML. Kebijakan otorisasi mendelegasikan otorisasi ke ekstensi otorisasi di kolom customProvider.

    Kebijakan ini memanggil ekstensi otorisasi my-authz-ext untuk semua traffic ke jalur URL example.com/api/payments saat permintaan berisi header Authorization yang tidak kosong.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - to:
        operations:
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi eksternal regional, tetapkan skema ke EXTERNAL_MANAGED. Untuk Load Balancer Aplikasi internal regional, tetapkan skema ke INTERNAL_MANAGED.
    • PROJECT_ID: ID Google Cloud project Anda.
    • LOCATION: Google Cloud region.
    • LB_FORWARDING_RULE: nama aturan penerusan load balancer.
  4. Buat kebijakan otorisasi dengan mengimpor file YAML kebijakan otorisasi menggunakan perintah gcloud network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-custom \
        --source=authz-policy-custom.yaml \
        --location=LOCATION
    

    Ganti LOCATION dengan Google Cloud region tempat load balancer dikonfigurasi.

Untuk mengetahui informasi selengkapnya tentang ekstensi otorisasi, lihat Mengonfigurasi ekstensi otorisasi.

Mendelegasikan keputusan otorisasi ke Model Armor

Anda dapat mengonfigurasi kebijakan otorisasi untuk mendelegasikan keputusan otorisasi ke Model Armor.

Sebelum memulai, buat template Model Armor. Dalam penyiapan contoh ini, kebijakan otorisasi mengarah ke ekstensi otorisasi, yang pada gilirannya mengarah ke Model Armor.

Jika Anda menggunakan Load Balancer Aplikasi eksternal regional atau Load Balancer Aplikasi internal regional, ikuti langkah-langkah berikut untuk mendelegasikan keputusan otorisasi ke Model Armor.

Regional

  1. Tentukan ekstensi otorisasi dalam file YAML. Ekstensi otorisasi mengarah ke template permintaan dan respons Model Armor.

    cat >authz-extension.yaml <<EOF
    name: my-authz-extension
    loadBalancingScheme: INTERNAL_MANAGED
    service: modelarmor.LOCATION.rep.googleapis.com
    metadata:
      model_armor_settings: '[
        {
        "response_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID",
        "request_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID"
        }
      ]'
    failOpen: true
    EOF
    

    Ganti kode berikut:

    • LOCATION: lokasi template
    • PROJECT_ID: ID project yang memiliki template
    • RESPONSE_TEMPLATE_ID: ID template respons
    • REQUEST_TEMPLATE_ID: ID template permintaan
  2. Buat ekstensi otorisasi dengan mengimpor file YAML ekstensi otorisasi menggunakan perintah gcloud beta service-extensions authz-extensions import.

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

    Ganti LOCATION dengan Google Cloud region tempat load balancer berada.

  3. Tentukan kebijakan otorisasi dalam file YAML. Kebijakan otorisasi mendelegasikan otorisasi ke ekstensi otorisasi di kolom customProvider.

    Nilai policyProfile adalah CONTENT_AUTHZ.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: INTERNAL_MANAGED
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: CONTENT_AUTHZ
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

    Ganti kode berikut:

    • PROJECT_ID: ID Google Cloud project Anda.
    • LOCATION: Google Cloud region.
    • LB_FORWARDING_RULE: nama aturan penerusan load balancer.
  4. Buat kebijakan otorisasi dengan mengimpor file YAML kebijakan otorisasi menggunakan perintah gcloud beta network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-custom \
      --source=authz-policy-custom.yaml \
      --location=LOCATION
    

    Ganti LOCATION dengan Google Cloud region tempat load balancer dikonfigurasi.

Mendelegasikan keputusan otorisasi ke Identity-Aware Proxy

Untuk Load Balancer Aplikasi eksternal global dan Load Balancer Aplikasi internal lintas-region, Anda tidak dapat mendelegasikan keputusan otorisasi ke IAP melalui ekstensi otorisasi. Untuk load balancer ini, Anda dapat mendelegasikan keputusan otorisasi ke IAP melalui kolom customProvider pada resource kebijakan otorisasi.

Untuk Load Balancer Aplikasi eksternal regional dan Load Balancer Aplikasi internal regional, Anda dapat mengonfigurasi kebijakan otorisasi untuk mendelegasikan keputusan otorisasi ke IAP melalui ekstensi otorisasi.

Global dan lintas region

Dalam contoh berikut, semua keputusan otorisasi didelegasikan ke IAP untuk semua permintaan yang berasal dari blok alamat IP 10.0.0.0/24. Jika permintaan berasal dari alamat IP di luar 10.0.0.0/24, permintaan tersebut tidak cocok dengan kebijakan ini dan tidak dievaluasi oleh IAP berdasarkan aturan khusus ini.

  1. Tentukan kebijakan otorisasi dalam file YAML. Kebijakan otorisasi mendelegasikan otorisasi ke IAP melalui kolom customProvider.

    cat >authz-policy-iap.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
      - from:
          sources:
          - ipBlock:
            - prefix: "10.0.0.0"
              length: 24
    action: CUSTOM
    customProvider:
      cloudIap: {}
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi eksternal global, tetapkan skema ke EXTERNAL_MANAGED. Untuk Load Balancer Aplikasi internal lintas region, tetapkan skema ke INTERNAL_MANAGED.
    • PROJECT_ID: ID Google Cloud project Anda.
    • LB_FORWARDING_RULE: nama aturan penerusan load balancer.
  2. Buat kebijakan otorisasi dengan mengimpor file YAML kebijakan otorisasi menggunakan perintah gcloud network-security authz-policies import.

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

Regional

Jika Anda menggunakan Load Balancer Aplikasi eksternal regional atau Load Balancer Aplikasi internal regional, ikuti langkah-langkah berikut untuk mendelegasikan keputusan otorisasi ke IAP menggunakan ekstensi otorisasi.

  1. Tentukan ekstensi otorisasi dalam file YAML. Ekstensi otorisasi mengarah ke IAP.

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    loadBalancingScheme: LB_SCHEME
    service: iap.googleapis.com
    failOpen: false
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi eksternal regional, tetapkan skema ke EXTERNAL_MANAGED. Untuk Load Balancer Aplikasi internal regional, tetapkan skema ke INTERNAL_MANAGED.
  2. Buat ekstensi otorisasi dengan mengimpor file YAML ekstensi otorisasi menggunakan perintah gcloud service-extensions authz-extensions import.

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

    Ganti LOCATION dengan Google Cloud region tempat ekstensi otorisasi dikonfigurasi.

  3. Tentukan kebijakan otorisasi dalam file YAML. Kebijakan otorisasi mendelegasikan otorisasi ke ekstensi otorisasi di kolom customProvider.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

    Ganti kode berikut:

    • LB_SCHEME: skema load balancing. Untuk Load Balancer Aplikasi eksternal regional, tetapkan skema ke EXTERNAL_MANAGED. Untuk Load Balancer Aplikasi internal regional, tetapkan skema ke INTERNAL_MANAGED.
    • PROJECT_ID: ID Google Cloud project Anda.
    • LOCATION: Google Cloud region.
    • LB_FORWARDING_RULE: nama aturan penerusan load balancer.
  4. Buat kebijakan otorisasi dengan mengimpor file YAML kebijakan otorisasi menggunakan perintah gcloud network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-custom \
        --source=authz-policy-custom.yaml \
        --location=LOCATION
    

    Ganti LOCATION dengan Google Cloud region tempat load balancer dikonfigurasi.

Memahami log kebijakan otorisasi di Cloud Logging

Untuk memahami cara kebijakan otorisasi dicatat ke log saat permintaan diizinkan atau ditolak, tinjau bagian berikut.

Permintaan tidak sesuai dengan kebijakan ALLOW maupun DENY

Jika permintaan tidak cocok dengan kebijakan ALLOW maupun DENY, kebijakan DENY akan mengizinkan permintaan dan mencatatnya sebagai allowed_as_no_deny_policies_matched_request. Sebaliknya, kebijakan ALLOW menolak permintaan dan mencatatnya sebagai denied_as_no_allow_policies_matched_request. Karena salah satu kebijakan menolak permintaan, permintaan tersebut ditolak.

  • Jika Anda menggunakan Load Balancer Aplikasi eksternal global, statusDetails disetel ke denied_by_authz_policy dalam log. Lihat contoh berikut:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "denied_as_no_allow_policies_matched_request"
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          statusDetails: "denied_by_authz_policy"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • Jika Anda menggunakan Load Balancer Aplikasi internal regional, Load Balancer Aplikasi eksternal regional, atau Load Balancer Aplikasi internal lintas region, proxyStatus disetel ke error=\"http_request_error\"; details=\"denied_by_authz_policy\" dalam log. Lihat contoh berikut:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "denied_as_no_allow_policies_matched_request"
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\""
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

Permintaan sesuai dengan kebijakan DENY

Jika permintaan cocok dengan kebijakan DENY, permintaan tersebut akan ditolak dan kebijakan yang menolak permintaan akan dicatat.

  • Jika Anda menggunakan Load Balancer Aplikasi eksternal global, statusDetails disetel ke denied_by_authz_policy dalam log dan nama kebijakan yang menolak permintaan dicatat dalam policies. Lihat contoh berikut:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "name: "projects/12345567/locations/global/authzPolicies/deny-authz-policy-test""
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
          statusDetails: "denied_by_authz_policy"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • Jika Anda menggunakan Load Balancer Aplikasi internal regional, Load Balancer Aplikasi eksternal regional, atau Load Balancer Aplikasi internal lintas region, proxyStatus disetel ke error=\"http_request_error\"; details=\"denied_by_authz_policy\" dan nama kebijakan dicatat dalam policies. Lihat contoh berikut:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "name: "projects/12345567/locations/$REGION/authzPolicies/deny-authz-policy-test""
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\""
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

Permintaan tidak sesuai dengan kebijakan DENY, tetapi sesuai dengan kebijakan ALLOW

Jika permintaan tidak cocok dengan kebijakan DENY, tetapi cocok dengan kebijakan ALLOW, permintaan diizinkan. Dalam log, tindakan ini dicatat sebagai allowed_as_no_deny_policies_matched_request untuk kebijakan DENY. Kebijakan yang mengizinkan permintaan juga dicatat.

  • Jika Anda menggunakan Load Balancer Aplikasi eksternal global, tidak ada statusDetails dalam log. Kebijakan yang mengizinkan permintaan juga dicatat dalam policies. Lihat contoh berikut:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "name: "projects/12345567/locations/global/authzPolicies/allow-authz-policy-test""
                result: "ALLOWED"
              }
            ]
            result: "ALLOWED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • Jika Anda menggunakan Load Balancer Aplikasi internal regional, Load Balancer Aplikasi eksternal regional, atau Load Balancer Aplikasi internal lintas region, tidak ada kolom proxyStatus dalam log. Kebijakan yang mengizinkan permintaan juga dicatat dalam policies. Lihat contoh berikut:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "name: "projects/12345567/locations/$REGION/authzPolicies/allow-authz-policy-test""
                result: "ALLOWED"
              }
            ]
            result: "ALLOWED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

Langkah berikutnya