Mengonfigurasi kebijakan keamanan

Media CDN menggunakan kebijakan keamanan Google Cloud Armor untuk mencegah traffic yang tidak diinginkan mengakses layanannya. Anda dapat mengizinkan atau menolak permintaan berdasarkan hal berikut:

  • Alamat dan rentang IPv4 dan IPv6 (CIDR)
  • Kode negara (geografi)
  • Pemfilteran lapisan 7
  • Google Threat Intelligence (memerlukan paket Google Cloud Armor Enterprise)
  • Nomor Sistem Otonom (ASN)

Kemampuan ini memungkinkan Anda membatasi download konten ke pengguna di lokasi tertentu yang memiliki batasan lisensi konten, hanya mengizinkan alamat IP perusahaan untuk mengakses endpoint pengujian atau staging, dan menolak daftar alamat IP klien buruk yang diketahui.

Cloud Armor terintegrasi dengan ASN untuk mengizinkan atau memblokir traffic jaringan yang berasal dari ASN tertentu. Kebijakan keamanan edge Cloud Armor dapat menggunakan ASN yang terkait dengan alamat IP asal, seperti yang ditentukan oleh operator jaringan yang bertanggung jawab atas awalan IP tersebut, untuk mengontrol aliran traffic.

Anda dapat menambahkan header kustom dengan nama dan nilai yang dapat dikonfigurasi ke permintaan yang diizinkan oleh Cloud Armor.

Integrasi Cloud Armor dengan Google Threat Intelligence memungkinkan Anda mengontrol traffic dari alamat IP dan domain berbahaya yang diketahui, sehingga memberikan perlindungan lanjutan terhadap ancaman.

Kebijakan keamanan Cloud Armor berlaku untuk semua konten yang ditayangkan dari Media CDN, termasuk konten yang di-cache dan cache yang tidak ditemukan.

Kebijakan keamanan Cloud Armor dikonfigurasi per layanan Media CDN—semua permintaan yang ditujukan ke alamat IP (atau nama host) layanan tersebut akan menerapkan kebijakan keamanan secara konsisten. Layanan yang berbeda dapat memiliki kebijakan keamanan yang berbeda, dan Anda dapat membuat beberapa layanan untuk geografi yang berbeda sesuai kebutuhan.

Untuk perlindungan konten yang lebih terperinci di tingkat per pengguna, sebaiknya gunakan URL bertanda tangan dan cookie bertanda tangan bersama dengan kebijakan Cloud Armor.

Media CDN tidak mempertimbangkan header referer selama evaluasi aturan kebijakan keamanan edge pemfilteran header Lapisan 7 saat ditetapkan ke salah satu nilai berikut:

  • Beberapa URL
  • URL relatif
  • URL absolut yang valid yang berisi informasi pengguna atau komponen fragmen

Mengonfigurasi kebijakan keamanan

Gunakan petunjuk berikut untuk mengonfigurasi kebijakan keamanan.

Sebelum memulai

Untuk melampirkan kebijakan keamanan Cloud Armor ke layanan Media CDN, pastikan hal berikut:

  • Pahami Cloud Armor.
  • Memiliki layanan Media CDN yang ada yang ingin Anda terapkan kebijakannya.
  • Opsional, tetapi direkomendasikan: aktifkan logging di layanan Media CDN agar Anda dapat mengidentifikasi permintaan yang diblokir.

Anda juga memerlukan izin Identity and Access Management berikut untuk mengotorisasi, membuat, dan melampirkan kebijakan keamanan ke layanan Media CDN:

  • compute.securityPolicies.addAssociation
  • compute.securityPolicies.create
  • compute.securityPolicies.delete
  • compute.securityPolicies.get
  • compute.securityPolicies.list
  • compute.securityPolicies.update
  • compute.securityPolicies.use

Pengguna yang perlu melampirkan sertifikat yang ada ke layanan Media CDN hanya memerlukan izin IAM berikut:

  • compute.securityPolicies.get
  • compute.securityPolicies.list
  • compute.securityPolicies.use

Peran roles/networkservices.edgeCacheUser mencakup semua izin ini.

Membuat kebijakan keamanan

Kebijakan keamanan Cloud Armor terdiri dari beberapa aturan, dengan setiap aturan menentukan sekumpulan kriteria pencocokan (ekspresi) untuk permintaan, dan tindakan. Misalnya, ekspresi dapat berisi logika pencocokan untuk klien yang berlokasi di India, dengan tindakan terkaitnya adalah allow. Jika permintaan tidak cocok dengan aturan, Cloud Armor akan terus mengevaluasi aturan berikutnya, hingga semua aturan telah dicoba.

Kebijakan keamanan memiliki aturan default dengan tindakan allow. Aturan default mengizinkan permintaan yang tidak cocok dengan aturan sebelumnya. Hal ini dapat diubah menjadi aturan deny jika Anda hanya ingin allow permintaan yang cocok dengan aturan sebelumnya dan menolak semua permintaan lainnya.

Contoh berikut menunjukkan cara membuat aturan yang memblokir semua klien yang berlokasi di Australia dengan HTTP 403, dan mengizinkan semua permintaan lainnya.

gcloud

Untuk membuat kebijakan baru berjenis CLOUD_ARMOR_EDGE, gunakan perintah gcloud compute security-policies create command:

gcloud compute security-policies create block-australia \
    --type="CLOUD_ARMOR_EDGE" --project="PROJECT_ID"

Tindakan ini akan membuat kebijakan dengan aturan izinkan default pada prioritas terendah (priority: 2147483647):

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/securityPolicies/block-australia].

Kemudian, Anda dapat menambahkan aturan dengan prioritas yang lebih tinggi:

gcloud compute security-policies rules create 1000 \
    --security-policy=block-australia --description "block AU" \
    --expression="origin.region_code == 'AU'" --action="deny-403"

Outputnya adalah sebagai berikut:

Updated [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/securityPolicies/block-australia].

Terraform

resource "google_compute_security_policy" "default" {
  name        = "block-australia"
  type        = "CLOUD_ARMOR_EDGE"
  description = "block AU"

  rule {
    action      = "deny(403)"
    description = "block AU"
    priority    = "1000"
    match {
      expr {
        expression = "origin.region_code == 'AU'"
      }
    }
  }
  rule {
    action   = "allow"
    priority = "2147483647"
    match {
      versioned_expr = "SRC_IPS_V1"
      config {
        src_ip_ranges = ["*"]
      }
    }
    description = "default rule"
  }
}

Jika Anda memeriksa kebijakan, Anda akan melihat dua aturan: aturan pertama memblokir permintaan yang berasal dari Australia (origin.region_code == 'AU') dan aturan kedua, yang merupakan aturan prioritas terendah, mengizinkan semua traffic yang tidak cocok dengan aturan prioritas yang lebih tinggi (atau aturan).

kind: compute#securityPolicy
name: block-australia
rules:
- action: deny(403)
  description: block AU
  kind: compute#securityPolicyRule
  match:
    expr:
      expression: origin.region_code == 'AU'
  preview: false
  priority: 1000
- action: allow
  description: default rule
  kind: compute#securityPolicyRule
  match:
    config:
      srcIpRanges:
      - '*'
    versionedExpr: SRC_IPS_V1
  preview: false
  priority: 2147483647
  ruleNumber: '1'
type: CLOUD_ARMOR_EDGE

Menambahkan aturan ke kebijakan keamanan

Kebijakan keamanan Cloud Armor adalah serangkaian aturan yang cocok dengan atribut Lapisan 7 untuk melindungi aplikasi atau layanan yang dapat diakses dari luar. Setiap aturan dievaluasi sehubungan dengan traffic masuk.

Atribut ini dapat digunakan untuk permintaan HTTP dalam kebijakan keamanan: request.headers, request.method, request.path, request.scheme, dan request.query. Untuk mengetahui informasi selengkapnya tentang cara menulis ekspresi untuk aturan kebijakan keamanan, lihat Referensi bahasa aturan kustom Cloud Armor.

Aturan kebijakan keamanan Cloud Armor terdiri dari kondisi kecocokan dan tindakan yang harus dilakukan saat kondisi tersebut terpenuhi.

gcloud

Untuk membuat aturan untuk kebijakan keamanan, gunakan gcloud compute security-policies rules create PRIORITY perintah. Ganti PRIORITY dengan prioritas aturan dalam kebijakan:

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME \
    --description DESCRIPTION \
    --src-ip-ranges IP_RANGES | --expression EXPRESSION \
    --action=[ allow | deny-403 | deny-404 | deny-502 ] \
    --preview

Melampirkan kebijakan ke layanan

gcloud

Untuk melampirkan kebijakan Cloud Armor yang ada ke layanan Media CDN, gunakan gcloud edge-cache services update perintah:

gcloud edge-cache services update MY_SERVICE \
    --edge-security-policy=SECURITY_POLICY

Memperbarui aturan dalam kebijakan keamanan

Gunakan petunjuk ini untuk memperbarui satu aturan dalam kebijakan keamanan Cloud Armor. Atau, Anda dapat memperbarui beberapa aturan secara atomik dalam kebijakan keamanan.

gcloud

Gunakan gcloud compute security-policies rules update perintah:

gcloud compute security-policies rules update PRIORITY [ \
    --security-policy POLICY_NAME  \
    --description DESCRIPTION  \
    --src-ip-ranges IP_RANGES  | --expression EXPRESSION \
    --action=[ allow | deny-403 | deny-404 | deny-502 ]  \
    --preview
  ]
  

Misalnya, perintah berikut mengupdate aturan dengan prioritas 1111 untuk mengizinkan traffic dari rentang alamat IP 192.0.2.0/24:

gcloud compute security-policies rules update 1111 \
    --security-policy my-policy \
    --description "allow traffic from 192.0.2.0/24" \
    --src-ip-ranges "192.0.2.0/24" \
    --action "allow"

Untuk memperbarui prioritas aturan, Anda harus menggunakan REST API. Untuk mengetahui informasi selengkapnya, lihat metode securityPolicies.patchRule.

Melihat lampiran kebijakan

Untuk meninjau kebijakan yang dilampirkan ke layanan yang ada, periksa (jelaskan) layanan tersebut.

gcloud

Untuk melihat kebijakan Cloud Armor yang dilampirkan ke layanan Media CDN, gunakan gcloud edge-cache services describe perintah:

gcloud edge-cache services describe MY_SERVICE

Kolom edgeSecurityPolicy layanan menjelaskan kebijakan yang dilampirkan:

name: "MY_SERVICE"
edgeSecurityPolicy: "SECURITY_POLICY

Menghapus kebijakan

Untuk menghapus kebijakan yang ada, perbarui layanan terkait dan teruskan string kosong sebagai kebijakan.

gcloud

Gunakan gcloud edge-cache services update perintah:

  gcloud edge-cache services update MY_SERVICE \
      --edge-security-policy=""

Kolom edgeSecurityPolicy kini dihilangkan dari output perintah gcloud edge-cache services describe MY_SERVICE.

Contoh

Pertimbangkan contoh kasus penggunaan mendetail berikut.

Contoh: Mengidentifikasi permintaan yang diblokir

Anda harus mengaktifkan logging untuk layanan Edge Cache tertentu agar permintaan yang diblokir dapat dicatat ke dalam log.

Permintaan yang diizinkan atau ditolak oleh kebijakan pemfilteran dicatat ke dalam log di Cloud Logging. Untuk memfilter permintaan yang ditolak, kueri Cloud Logging untuk konfigurasi prod-video-service akan terlihat seperti:

resource.type="edge_cache_service"
jsonPayload.statusDetails="denied_by_security_policy"

Contoh: Menyesuaikan kode respons

Anda dapat mengonfigurasi aturan Cloud Armor untuk menampilkan kode status tertentu sebagai tindakan yang terkait dengan aturan tertentu. Dalam sebagian besar kasus, sebaiknya tampilkan kode status HTTP 403 DENY untuk memberi sinyal yang jelas bahwa klien diblokir oleh aturan tersebut.

Kode status yang didukung adalah:

  • HTTP 403 Forbidden
  • HTTP 404 Not Found
  • HTTP 502 Bad Gateway

Contoh berikut menunjukkan cara mengonfigurasi kode status yang ditampilkan:

Untuk menentukan salah satu dari [allow | deny-403 | deny-404 | deny-502] sebagai tindakan yang terkait dengan aturan, jalankan perintah berikut. Contoh ini mengonfigurasi aturan untuk menampilkan kode status HTTP 502.

gcloud compute security-policies rules create 1000 \
    --security-policy=block-australia --description "block AU" \
    --expression="origin.region_code == 'AU'" --action="deny-502"

Setiap aturan dalam kebijakan keamanan dapat menentukan respons kode status yang berbeda.

Contoh: Menolak klien di luar negara, kecuali untuk alamat IP yang diizinkan

Kasus umum dalam penayangan media adalah menolak koneksi dari klien yang berada di luar wilayah yang memiliki lisensi konten atau mekanisme pembayaran.

Misalnya, Anda mungkin hanya ingin mengizinkan klien yang berlokasi di India, serta alamat IP apa pun yang ada dalam daftar yang diizinkan, termasuk alamat IP partner konten dan karyawan Anda sendiri, dalam rentang 192.0.2.0/24, dan menolak semua alamat IP lainnya.

Dengan menggunakan bahasa aturan kustom Cloud Armor, ekspresi berikut akan mencapai hal ini:

origin.region_code == "IN" || inIpRange(origin.ip, '192.0.2.0/24')

Ekspresi ini dikonfigurasi sebagai aturan allow, dengan aturan deny default yang dikonfigurasi agar cocok dengan semua klien lainnya. Kebijakan keamanan selalu memiliki aturan default. Biasanya, Anda mengonfigurasi ini untuk default deny traffic yang tidak Anda izinkan secara eksplisit. Dalam kasus lain, Anda dapat memilih untuk memblokir beberapa traffic dan default allow semua traffic lainnya.

Dalam output kebijakan keamanan, perhatikan hal berikut:

  • Aturan prioritas tertinggi (priority: 0) mengizinkan traffic dari India ATAU dari daftar alamat IP yang ditentukan.
  • Aturan prioritas terendah mewakili default deny. Mesin aturan menolak semua klien yang tidak dievaluasi sebagai benar oleh aturan prioritas yang lebih tinggi.
  • Anda dapat menggabungkan beberapa aturan menggunakan operator boolean.

Kebijakan ini mengizinkan traffic dari klien di India, mengizinkan klien dari rentang IP yang ditentukan, dan menolak semua traffic lainnya.

Saat Anda melihat detail kebijakan, output-nya akan terlihat seperti berikut:

kind: compute#securityPolicy
name: allow-india-only
type: "CLOUD_ARMOR_EDGE"
rules:
- action: allow
  description: ''
  kind: compute#securityPolicyRule
  match:
    expr:
      expression: origin.region_code == "IN" || inIpRange(origin.ip, '192.0.2.0/24')
  preview: false
  priority: 0
- action: deny(403)
  description: Default rule, higher priority overrides it
  kind: compute#securityPolicyRule
  match:
    config:
      srcIpRanges:
      - '*'
    versionedExpr: SRC_IPS_V1
  preview: false
  priority: 2147483647

Anda juga dapat menetapkan header respons kustom dengan variabel header {region_code}. Header ini dapat diperiksa menggunakan JavaScript dan ditampilkan ke klien.

Contoh: Memblokir traffic dari IP berbahaya yang diketahui

Ekspresi bahasa aturan kustom Cloud Armor berikut memblokir traffic dari alamat IP yang diidentifikasi sebagai berbahaya:

evaluateThreatIntelligence('iplist-known-malicious-ips')

Ekspresi ini mengarahkan Cloud Armor untuk memeriksa permintaan masuk berdasarkan daftar alamat IP berbahaya yang terus diperbarui oleh Google dan memberikan perlindungan otomatis yang andal.

Untuk memblokir alamat IP berbahaya secara otomatis, Anda dapat mengonfigurasi kebijakan keamanan edge dengan aturan Google Threat Intelligence.

Perintah Google Cloud CLI berikut menunjukkan cara menambahkan aturan Google Threat Intelligence baru ke kebijakan yang ada, seperti my-edge-policy:

  gcloud compute security-policies create my-edge-policy \
      --type=CLOUD_ARMOR_EDGE

  gcloud edge-cache services update my-edge-cache-service \
      --edge-security-policy "my-edge-policy"

  gcloud compute security-policies rules create 1000 \
      --security-policy "my-edge-policy" \
      --expression "evaluateThreatIntelligence('iplist-known-malicious-ips')" \
      --action "deny-403"

Contoh: Memblokir klien berbahaya berdasarkan alamat IP dan rentang IP

Dengan menggunakan bahasa aturan kustom Cloud Armor, ekspresi berikut akan mencapai hal ini:

inIpRange(origin.ip, '192.0.2.2/32') || inIpRange(origin.ip, '192.0.2.170/32')

Anda dapat memblokir rentang IP hingga mask /8 di IPv4 dan /32 di IPv6. Kasus umum untuk platform streaming adalah memblokir rentang IP traffic keluar dari proxy atau penyedia VPN untuk meminimalkan pengelakan lisensi konten:

inIpRange(origin.ip, '192.0.2.0/24') || inIpRange(origin.ip, '198.51.100.0/24') || inIpRange(origin.ip, '203.0.113.0/24') || inIpRange(origin.ip, '2001:DB8::B33F:2002/64')

Rentang alamat IPv4 dan IPv6 didukung.

Contoh: Hanya mengizinkan daftar geografi tetap

Jika memiliki daftar kode negara, Anda dapat menggunakan operator OR boolean || untuk menggabungkan kondisi pencocokan.

Dengan menggunakan bahasa aturan kustom Cloud Armor, ekspresi berikut mengizinkan pengguna yang diidentifikasi berasal dari Australia atau Selandia Baru:

origin.region_code == "AU" || origin.region_code == "NZ"

Ekspresi ini juga dapat digabungkan dengan origin.ip atau inIpRange(origin.ip, '...') ekspresi untuk mengizinkan penguji, partner, dan rentang IP perusahaan Anda, meskipun mereka tidak berasal dari salah satu geografi yang ditentukan.

Ada jumlah subekspresi yang didokumentasikan untuk setiap aturan dengan ekspresi kustom. Jika perlu menggabungkan lebih banyak subekspresi, tentukan beberapa aturan dalam satu kebijakan.

Contoh: Memblokir klien dari kumpulan negara tertentu

Contoh yang kurang umum adalah memblokir klien dari kumpulan negara tertentu, tetapi mengizinkan permintaan dari semua negara lain.

Untuk melakukannya, Anda membuat kebijakan yang memblokir negara dan klien mana pun yang regionnya tidak dapat ditentukan, lalu menerapkan aturan izinkan default untuk semua permintaan lainnya.

Contoh berikut menjelaskan kebijakan yang memblokir klien dari Kanada, serta klien mana pun yang lokasinya tidak diketahui, tetapi mengizinkan semua traffic lainnya:

  kind: compute#securityPolicy
  name: block-canada
  type: "CLOUD_ARMOR_EDGE"
  rules:
  - action: deny(403)
    description: ''
    kind: compute#securityPolicyRule
    match:
      expr:
        expression: origin.region_code == "CA" || origin.region_code == "ZZ"
    preview: false
    priority: 0
  - action: allow
    description: Default rule, higher priority overrides it
    kind: compute#securityPolicyRule
    match:
      config:
        srcIpRanges:
        - '*'
      versionedExpr: SRC_IPS_V1
    preview: false
    priority: 2147483647

Contoh: Menolak permintaan konten yang di-cache dengan header tertentu

Kebijakan keamanan edge berlaku untuk semua permintaan yang menargetkan layanan Media CDN mana pun yang dilampirkan ke kebijakan tersebut. Penerapan kebijakan ini dilakukan sebelum pencarian cache. Permintaan yang tidak diizinkan oleh kebijakan keamanan edge akan ditolak dengan kode status yang dikonfigurasi.

Ekspresi berikut mencocokkan permintaan dari alamat IP 1.2.3.4 yang berisi string user1 di header user-agent:

inIpRange(origin.ip, '1.2.3.4/32') && request.headers['user-agent'].contains('user1')

Perintah berikut menambahkan aturan pemfilteran 105 ke kebijakan keamanan edge my-edge-policy, yang dilampirkan ke layanan Media CDN:

gcloud compute security-policies rules create 105 \
    --security-policy "my-edge-policy" \
    --expression = "inIpRange(origin.ip, '1.2.3.4/32') && request.headers['user-agent'].contains('charlie')" \
    --action= deny-403 \
    --description="block requests from IP addresses in which the user-agent header contains the string charlie"
    

Mencatat tindakan penegakan kebijakan ke dalam log

Setiap log permintaan memberikan detail tentang kebijakan keamanan yang diterapkan dan apakah permintaan diizinkan (ALLOW) atau ditolak (DENY).

Untuk mengaktifkan logging, pastikan logConfig.enable ditetapkan ke true di layanan Anda. Layanan yang tidak mengaktifkan log tidak mencatat peristiwa kebijakan keamanan ke dalam log.

Jika klien berada di luar Amerika Serikat dan kebijakan keamanan yang disebut deny-non-us-clients berlaku yang menolak permintaan yang berasal dari luar Amerika Serikat, berikut adalah entri log untuk permintaan yang ditolak:

enforcedSecurityPolicy:
  name: deny-non-us-clients
  outcome: DENY

Layanan yang tidak melampirkan kebijakan Cloud Armor berisi no_policy sebagai nilai enforcedSecurityPolicy.name dan outcome ALLOW. Misalnya, entri log permintaan untuk layanan tanpa kebijakan yang dilampirkan memiliki nilai berikut:

enforcedSecurityPolicy:
  name: no_policy
  outcome: ALLOW

Memahami klasifikasi GeoIP

Media CDN mengandalkan sumber data klasifikasi IP internal Google untuk mendapatkan lokasi (region, negara bagian, provinsi, atau kota) dari alamat IP. Jika Anda bermigrasi dari, atau membagi traffic antara, beberapa penyedia, terkadang sejumlah kecil alamat IP dapat dikaitkan dengan lokasi yang berbeda.

  • Cloud Armor menggunakan kode region ISO 3166-1 alpha 2 untuk mengaitkan klien dengan lokasi geografis.
  • Misalnya, US untuk Amerika Serikat, atau AU untuk Australia.
  • Dalam beberapa kasus, region sesuai dengan negara, tetapi tidak selalu demikian. Misalnya, kode US mencakup semua negara bagian Amerika Serikat, satu distrik, dan enam area terpencil.
  • Untuk mengetahui informasi selengkapnya, lihat unicode_region_subtag di Standar Teknis Unicode.
  • Untuk klien yang lokasinya tidak dapat diperoleh, origin.region_code ditetapkan ke ZZ.

Anda dapat menambahkan data geografis ke header respons ke endpoint Media CDN (dengan routing.routeRules[].headerActions[].responseHeadersToAdd[]) atau menampilkan data geografis yang diberikan ke Cloud Function untuk memvalidasi perbedaan antara sumber data geoIP selama integrasi dan pengujian awal.

Selain itu, log permintaan Media CDN menyertakan clientRegion dan data khusus klien lainnya yang dapat Anda validasi berdasarkan sumber data yang ada.

Langkah berikutnya