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)
Kemampuan ini memungkinkan Anda membatasi download konten untuk pengguna di lokasi tertentu tempat Anda memiliki batasan pemberian lisensi konten, hanya mengizinkan alamat IP perusahaan untuk mengakses endpoint pengujian atau penyiapan, dan menolak daftar alamat IP klien yang buruk.
Anda dapat mendekorasi permintaan yang diizinkan oleh Google Cloud Armor dengan menyisipkan header kustom dengan nama dan nilai yang dapat dikonfigurasi.
Integrasi Google Cloud Armor dengan Google Threat Intelligence memungkinkan Anda mengontrol traffic dari alamat IP dan domain berbahaya yang diketahui, sehingga memberikan perlindungan tingkat lanjut terhadap ancaman.
Kebijakan keamanan Google Cloud Armor berlaku untuk semua konten yang disajikan dari Media CDN, termasuk konten yang di-cache dan cache tidak ditemukan.
Kebijakan keamanan Google Cloud Armor dikonfigurasi per layanan Media CDN—semua permintaan yang ditujukan untuk alamat IP (atau nama host) layanan tersebut akan menerapkan kebijakan keamanan secara konsisten. Layanan yang berbeda dapat menerapkan kebijakan keamanan yang berbeda, dan Anda dapat membuat beberapa layanan untuk wilayah geografis 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 Google Cloud Armor.
Media CDN tidak mempertimbangkan header referer
selama
evaluasi aturan kebijakan keamanan edge pemfilteran header Layer 7 jika header tersebut
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 Google Cloud Armor ke layanan Media CDN, pastikan hal berikut:
- Pahami Google Cloud Armor.
- Memiliki layanan Media CDN yang sudah 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 memberi otorisasi, 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 Google Cloud Armor terdiri dari beberapa aturan, dengan
setiap aturan menentukan serangkaian kriteria yang cocok (ekspresi) untuk permintaan,
dan tindakan. Misalnya, ekspresi dapat berisi logika pencocokan untuk
klien yang berada di India, dengan tindakan terkaitnya adalah allow
. Jika
permintaan tidak cocok dengan aturan, Google 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. Aturan 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 digeolokasikan ke 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
:
gcloud compute security-policies create block-australia \ --type="CLOUD_ARMOR_EDGE" --project="PROJECT_ID"
Tindakan ini akan membuat kebijakan dengan aturan izin 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
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 memiliki prioritas terendah, mengizinkan semua traffic yang tidak cocok dengan aturan (atau aturan) yang memiliki prioritas lebih tinggi.
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 Google Cloud Armor adalah sekumpulan aturan yang cocok dengan atribut Lapisan 7 untuk melindungi aplikasi atau layanan yang menghadap eksternal. 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 Google Cloud Armor.
Aturan kebijakan keamanan Google Cloud Armor terdiri dari kondisi kecocokan dan tindakan yang harus dilakukan saat kondisi tersebut terpenuhi.
gcloud
Untuk membuat aturan kebijakan keamanan, gunakan
perintah gcloud compute security-policies rules create PRIORITY
.
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 Google Cloud Armor yang ada ke layanan Media CDN, gunakan perintah gcloud edge-cache services update
:
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 Google Cloud Armor. Atau, Anda dapat memperbarui beberapa aturan secara atomik dalam kebijakan keamanan.
gcloud
Gunakan perintah gcloud compute security-policies rules update
:
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 memperbarui 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 (describe) layanan tersebut.
gcloud
Untuk melihat kebijakan Google Cloud Armor yang dilampirkan ke layanan Media CDN, gunakan perintah gcloud edge-cache services describe
:
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 perintah gcloud edge-cache services update
:
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 dicatat.
Permintaan yang diizinkan atau ditolak oleh kebijakan pemfilteran dicatat ke
Logging. Untuk memfilter permintaan yang ditolak, Kueri logging berikut 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 Google Cloud Armor untuk menampilkan kode status tertentu sebagai tindakan yang terkait dengan aturan tertentu. Dalam sebagian besar kasus, sebaiknya
menampilkan kode status HTTP 403 DENY
untuk menandakan dengan jelas bahwa klien diblokir oleh aturan.
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 tempat Anda memiliki lisensi konten atau mekanisme pembayaran.
Misalnya, Anda mungkin hanya ingin mengizinkan klien yang berada 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 Google 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.
Anda biasanya mengonfigurasi ini ke traffic default deny
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 merepresentasikan
default deny
. Mesin aturan menolak semua klien yang aturan prioritas lebih tinggi tidak dievaluasi sebagai benar (true). - Anda dapat menggabungkan beberapa aturan dengan 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, outputnya 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 menyetel header respons kustom
dengan variabel header {region_code}
. Header ini dapat diperiksa menggunakan
JavaScript dan ditampilkan kepada klien.
Contoh: Memblokir traffic dari IP berbahaya yang diketahui
Ekspresi bahasa aturan kustom Google Cloud Armor berikut memblokir traffic dari alamat IP yang diidentifikasi sebagai berbahaya:
evaluateThreatIntelligence('iplist-known-malicious-ips')
Ekspresi ini mengarahkan Google Cloud Armor untuk memeriksa permintaan masuk berdasarkan daftar alamat IP berbahaya yang diketahui dan terus diperbarui oleh Google, serta 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 menurut alamat IP dan rentang IP
Dengan menggunakan bahasa aturan kustom Google 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 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 izinkan daftar tetap geografi
Jika memiliki daftar kode negara, Anda dapat menggunakan operator boolean OR ||
untuk menggabungkan kondisi kecocokan.
Dengan menggunakan bahasa aturan kustom Google Cloud Armor, ekspresi berikut mengizinkan pengguna yang diidentifikasi berasal dari Australia atau Selandia Baru:
origin.region_code == "AU" || origin.region_code == "NZ"
Hal ini juga dapat digabungkan dengan ekspresi origin.ip
atau inIpRange(origin.ip,
'...')
untuk mengizinkan penguji, partner, dan rentang IP perusahaan Anda,
meskipun mereka tidak berasal dari salah satu wilayah geografis yang ditentukan.
Ada jumlah subekspresi yang didokumentasikan untuk setiap aturan dengan ekspresi kustom. Jika Anda perlu menggabungkan lebih banyak subekspresi, tentukan beberapa aturan dalam satu kebijakan.
Contoh: Memblokir klien dari sekumpulan negara tertentu
Contoh yang kurang umum adalah memblokir klien dari sekumpulan negara tertentu, tetapi mengizinkan permintaan dari semua negara lainnya.
Untuk melakukannya, Anda membuat kebijakan yang memblokir negara dan semua klien yang wilayahnya tidak dapat ditentukan, lalu beralih ke aturan izin default untuk semua permintaan lainnya.
Contoh berikut menjelaskan kebijakan yang memblokir klien dari Kanada, serta klien 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 untuk konten yang di-cache dengan header tertentu
Kebijakan keamanan edge berlaku untuk semua permintaan yang menargetkan layanan Media CDN mana pun yang kebijakannya dilampirkan. Penerapan kebijakan ini dilakukan sebelum pencarian cache apa pun. 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 mana yang diterapkan dan apakah permintaan diizinkan (ALLOW
) atau ditolak (DENY
).
Untuk mengaktifkan logging, pastikan logConfig.enable
disetel ke true
di layanan Anda. Layanan yang tidak mengaktifkan log tidak mencatat peristiwa kebijakan keamanan.
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 tanpa kebijakan Google Cloud Armor yang dilampirkan berisi no_policy
sebagai
nilai enforcedSecurityPolicy.name
dan outcome
ALLOW
. Misalnya, entri log permintaan untuk layanan tanpa kebijakan terlampir 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 melakukan migrasi dari, atau membagi traffic di antara beberapa penyedia, sejumlah kecil alamat IP terkadang dapat dikaitkan dengan lokasi yang berbeda.
- Google Cloud Armor menggunakan kode wilayah ISO 3166-1 alpha 2 untuk mengaitkan klien dengan lokasi geografis.
- Misalnya,
US
untuk Amerika Serikat, atauAU
untuk Australia. - Dalam beberapa kasus, wilayah 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 dalam Standar Teknis Unicode.
- Untuk klien yang lokasinya tidak dapat ditentukan,
origin.region_code
ditetapkan keZZ
.
Anda dapat menambahkan
data geografis ke header respons
ke endpoint Media CDN (dengan
routing.routeRules[].headerActions[].responseHeadersToAdd[]
) atau mencerminkan
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 mencakup clientRegion
dan data khusus klien lainnya yang dapat Anda validasi terhadap sumber data yang ada.
Langkah berikutnya
- Pelajari cara menggunakan permintaan bertanda tangan untuk mengizinkan konten berdasarkan per pengguna.
- Tinjau referensi aturan Google Cloud Armor untuk memahami cara aturan pencocokan IP dan geografis dapat dinyatakan dan digabungkan.
- Buka dokumentasi logging untuk memahami cara membuat kueri log permintaan dan memeriksa permintaan mana yang telah diblokir.