Media CDN menggunakan kebijakan keamanan Google Cloud Armor untuk mencegah hal-hal yang tidak diinginkan traffic untuk menjangkau layanannya. Anda dapat mengizinkan atau menolak permintaan berdasarkan berikut ini:
- Alamat dan rentang IPv4 dan IPv6 (CIDR)
- Kode negara (geografi)
- Pemfilteran lapisan 7
Dengan kemampuan ini, Anda dapat membatasi download konten untuk pengguna di lokasi yang tidak memiliki batasan pemberian lisensi konten, hanya izinkan akses perusahaan untuk mengakses endpoint pengujian atau staging, dan menolak daftar buruk.
Anda dapat mendekorasi permintaan yang diizinkan Google Cloud Armor dengan memasukkan {i>header<i} dengan nama dan nilai yang dapat dikonfigurasi.
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 sesuai Layanan Media CDN—semua permintaan yang ditujukan untuk Alamat IP (atau nama host) menerapkan kebijakan keamanan secara konsisten. Layanan yang berbeda dapat menerapkan kebijakan keamanan yang berbeda, dan Anda juga dapat membuat beberapa layanan untuk wilayah geografis yang berbeda sesuai kebutuhan.
Untuk perlindungan konten yang lebih mendetail di tingkat per pengguna, sebaiknya menggunakan URL bertanda tangan dan cookie yang ditandatangani di bersama dengan kebijakan Google Cloud Armor.
Media CDN tidak mempertimbangkan header referer
selama
evaluasi aturan atas 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 memasang kebijakan keamanan Google Cloud Armor ke Media CDN pastikan hal berikut:
- Kenali Google Cloud Armor.
- Memiliki layanan Media CDN yang ada di mana Anda ingin menerapkan kebijakan.
- Opsional, tetapi direkomendasikan: aktifkan logging di Media CDN sehingga Anda dapat mengidentifikasi permintaan yang diblokir.
Anda juga memerlukan izin Identity and Access Management berikut untuk memberi otorisasi, membuat, dan pasang 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 Media CDN layanan hanya memerlukan izin IAM berikut:
compute.securityPolicies.get
compute.securityPolicies.list
compute.securityPolicies.use
Peran roles/networkservices.edgeCacheUser
mencakup semua
izin akses.
Membuat kebijakan keamanan
Kebijakan keamanan Google Cloud Armor terdiri dari beberapa aturan, dengan
setiap aturan yang menentukan kumpulan kriteria yang cocok (ekspresi) untuk permintaan,
dan tindakan. Misalnya, ekspresi dapat berisi logika yang cocok untuk
klien yang berlokasi di India, dengan tindakan terkait adalah allow
. Jika
permintaan tidak cocok dengan aturan, Google Cloud Armor terus mengevaluasi
aturan berikutnya, sampai semua aturan dicoba.
Kebijakan keamanan memiliki aturan default dengan tindakan allow
. Default
aturan mengizinkan permintaan yang tidak cocok dengan aturan sebelumnya. Ini dapat diubah menjadi
deny
aturan saat Anda ingin allow
hanya meminta permintaan yang cocok dengan aturan sebelumnya
dan menolak yang lainnya.
Contoh berikut menunjukkan cara membuat aturan yang memblokir semua klien geolokasi ke Australia dengan HTTP 403, dan mengizinkan semua permintaan lain.
gcloud
Untuk membuat kebijakan baru jenis 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 izinkan default pada nilai terendah
prioritas (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
Saat memeriksa kebijakan, Anda akan melihat dua aturan: aturan pertama memblokir
permintaan yang berasal dari Australia (origin.region_code == 'AU'
) dan
kedua, aturan prioritas terendah, mengizinkan semua traffic yang tidak cocok dengan
aturan prioritas (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 Google Cloud Armor adalah seperangkat aturan yang sesuai dengan Atribut Lapisan 7 untuk melindungi aplikasi atau lingkungan eksternal layanan IT perusahaan mereka. Setiap aturan dievaluasi sehubungan dengan traffic yang masuk.
Atribut berikut dapat digunakan untuk permintaan HTTP di kebijakan keamanan:
request.headers
, request.method
, request.path
, request.scheme
, dan
request.query
. Untuk informasi selengkapnya tentang penulisan ekspresi untuk keamanan
aturan kebijakan, lihat
Referensi bahasa aturan kustom Google Cloud Armor.
Aturan kebijakan keamanan Google Cloud Armor terdiri dari kondisi pencocokan dan tindakan yang akan diambil ketika kondisi itu terpenuhi.
gcloud
Untuk membuat aturan untuk kebijakan keamanan, gunakan
gcloud compute security-policies rules create PRIORITY
baris perintah.
Ganti PRIORITY
dengan prioritas aturan di
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 memasang kebijakan Google Cloud Armor yang ada ke
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 di Google Cloud Armor kebijakan keamanan. Atau, Anda dapat memperbarui beberapa aturan secara atomik dalam kebijakan keamanan kami.
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 izinkan lalu lintas 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 selengkapnya
informasi tersebut, lihat
Metode securityPolicies.patchRule
.
Melihat lampiran kebijakan
Untuk meninjau kebijakan yang disertakan ke layanan yang ada, periksa (jelaskan) layanan tersebut.
gcloud
Untuk melihat kebijakan Google Cloud Armor yang terlampir pada
Media CDN, gunakan
Perintah gcloud edge-cache services describe
:
gcloud edge-cache services describe MY_SERVICE
Kolom edgeSecurityPolicy
layanan menjelaskan
kebijakan terlampir:
name: "MY_SERVICE" edgeSecurityPolicy: "SECURITY_POLICY
Menghapus kebijakan
Untuk menghapus kebijakan yang ada, perbarui layanan terkait dan teruskan layanan kosong {i>string<i} 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
gcloud edge-cache services describe MY_SERVICE
perintah.
Contoh
Pertimbangkan contoh kasus penggunaan terperinci berikut.
Contoh: Mengidentifikasi permintaan yang diblokir
Anda harus mengaktifkan logging untuk Edge tertentu Layanan cache agar permintaan yang diblokir dicatat dalam log.
Permintaan yang diizinkan atau ditolak oleh kebijakan pemfilteran dicatat ke
Pembuatan Log. Untuk memfilter permintaan yang ditolak, hal-hal berikut
Kueri logging
untuk konfigurasi prod-video-service
akan terlihat seperti ini:
resource.type="edge_cache_service" jsonPayload.statusDetails="denied_by_security_policy"
Contoh: Menyesuaikan kode respons
Aturan Google Cloud Armor dapat dikonfigurasi untuk menampilkan kode status tertentu
sebagai tindakan yang terkait dengan aturan tertentu. Dalam kebanyakan kasus, yang terbaik adalah
tampilkan kode HTTP 403 (deny-403
) untuk
menandakan dengan jelas bahwa klien
diblokir oleh aturan.
Kode status yang didukung adalah:
- HTTP 403 (Terlarang)
- HTTP 404 (Tidak Ditemukan)
- HTTP 502 (Gateway Buruk)
Contoh berikut menunjukkan cara mengonfigurasi kode status yang ditampilkan:
Untuk menentukan salah satu [allow | deny-403 | deny-404 | deny-502]
sebagai tindakan
yang terkait dengan aturan, jalankan perintah berikut. Contoh ini mengonfigurasi
aturan untuk mengembalikan 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 suatu negara, kecuali untuk alamat IP yang diizinkan
Kasus umum dalam penayangan media adalah menolak koneksi dari klien yang di luar wilayah tempat Anda memiliki lisensi konten atau mekanisme pembayaran.
Misalnya, Anda mungkin ingin hanya mengizinkan klien yang berlokasi di India,
semua alamat IP yang ada dalam daftar yang diizinkan, termasuk alamat IP partner konten
dan karyawan Anda sendiri, dalam rentang 192.0.2.0/24
, serta menolak semua yang lainnya.
Menggunakan Aturan kustom Google Cloud Armor bahasa, ekspresi berikut mencapai hasil ini:
origin.region_code == "IN" || inIpRange(origin.ip, '192.0.2.0/24')
Ekspresi ini dikonfigurasi sebagai aturan allow
, dengan deny
default
aturan yang dikonfigurasi agar
cocok dengan semua klien lainnya. Kebijakan keamanan
selalu memiliki aturan default.
Anda biasanya mengonfigurasi ini ke default deny
traffic yang tidak Anda
secara eksplisit
diizinkan. Dalam kasus lain, Anda dapat memilih
untuk memblokir beberapa lalu lintas dan
default allow
semua traffic lainnya.
Dalam output kebijakan keamanan, perhatikan hal-hal berikut:
- Aturan prioritas tertinggi (
priority: 0
) mengizinkan traffic dari India OR dari daftar alamat IP yang ditentukan. - Aturan prioritas terendah mewakili
default deny
. Mesin aturan menolak semua klien bahwa aturan dengan prioritas yang lebih tinggi tidak bernilai benar. - Anda dapat menggabungkan beberapa aturan dengan menggunakan operator boolean.
Kebijakan ini mengizinkan traffic dari klien di India, memungkinkan klien dari rentang IP yang ditentukan, dan menolak semua traffic lainnya.
Saat Anda melihat detail kebijakan, output-nya 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}
. {i>Header<i} ini dapat
diperiksa menggunakan
JavaScript dan direfleksikan ke klien.
Contoh: Memblokir klien berbahaya berdasarkan alamat IP dan rentang IP
Menggunakan Aturan kustom Google Cloud Armor bahasa, ekspresi berikut mencapai hasil 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. J
kasus umum untuk platform streaming adalah memblokir rentang IP keluar proxy
atau penyedia VPN untuk meminimalkan pengelakan pemberian 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 geografi yang tetap
Jika memiliki daftar kode negara, Anda dapat menggunakan operator OR boolean ||
untuk
menggabungkan kondisi pencocokan.
Menggunakan Aturan kustom Google Cloud Armor bahasa, ekspresi berikut memungkinkan pengguna yang diidentifikasi berasal dari Australia atau Selandia Baru:
origin.region_code == "AU" || origin.region_code == "NZ"
Opsi ini juga dapat digabungkan dengan ekspresi origin.ip
atau inIpRange(origin.ip,
'...')
untuk memungkinkan penguji, partner, dan rentang IP perusahaan Anda.
meskipun jika mereka tidak berasal dari salah satu wilayah geografis yang ditentukan.
Ada jumlah subekspresi yang terdokumentasi untuk setiap aturan dengan ekspresi kustom. Jika Anda perlu menggabungkan lebih banyak subekspresi, menentukan banyak aturan dalam satu kebijakan.
Contoh: Memblokir klien dari sekumpulan negara tertentu
Contoh yang kurang umum mungkin adalah memblokir klien dari sejumlah negara, tetapi jika tidak mengizinkan permintaan dari semua negara lain.
Untuk melakukannya, buat kebijakan yang memblokir negara dan setiap negara klien di mana region mereka tidak dapat ditentukan, lalu beralih ke aturan default untuk semua permintaan lainnya.
Contoh berikut menjelaskan kebijakan yang memblokir klien dari Kanada, serta seperti klien dengan lokasi tidak diketahui, tetapi mengizinkan semua traffic lain:
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 kebijakan terlampir. Penegakan kebijakan ini dilakukan sebelum cache apa pun pencarian. Permintaan yang tidak diizinkan oleh kebijakan keamanan edge ditolak dengan kode status yang dikonfigurasi.
Ekspresi berikut cocok dengan 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
telah diterapkan dan apakah permintaan diizinkan (ALLOW
) atau ditolak (DENY
).
Untuk mengaktifkan logging, pastikan logConfig.enable
ditetapkan ke true
di
layanan. Layanan yang tidak mengaktifkan log tidak akan mencatat peristiwa kebijakan keamanan ke dalam log.
Ketika klien berada di luar Amerika Serikat dan
kebijakan keamanan yang disebut
deny-non-us-clients
diberlakukan yang menolak permintaan yang berasal dari luar
AS, ini adalah entri log untuk permintaan yang ditolak:
enforcedSecurityPolicy: name: deny-non-us-clients outcome: DENY
Layanan tanpa kebijakan Google Cloud Armor yang terlampir berisi no_policy
sebagai
nilai enforcedSecurityPolicy.name
dan outcome
dari ALLOW
. Sebagai
misalnya, entri log permintaan untuk layanan tanpa
kebijakan terlampir memiliki nilai berikut:
enforcedSecurityPolicy: name: no_policy outcome: ALLOW
Memahami klasifikasi GeoIP
Media CDN mengandalkan klasifikasi IP internal Google sumber data untuk mendapatkan lokasi (wilayah, negara bagian, provinsi, atau kota) dari IP alamat IPv6 Jika Anda bermigrasi dari, atau membagi traffic antara, beberapa penyedia layanan, sejumlah kecil alamat IP terkadang mungkin dikaitkan dengan lokasi yang berbeda.
- Google Cloud Armor menggunakan ISO 3166-1 alpha 2 kode wilayah untuk mengaitkan klien dengan lokasi geografis.
- Misalnya,
US
untuk Amerika Serikat, atauAU
untuk Australia. - Dalam beberapa kasus, wilayah sesuai dengan negara, tetapi tidak selalu
ini masalahnya atau bukan. Misalnya, kode
US
mencakup semua negara bagian Amerika Serikat Negara bagian, satu distrik, dan enam area terpencil. - Untuk informasi selengkapnya, lihat unicode_region_subtag dalam Unicode Technical Standard.
- Untuk klien yang tidak dapat mengetahui lokasi,
origin.region_code
disetel keZZ
.
Anda dapat menambahkan
data geografis ke header respons
ke endpoint Media CDN (dengan
routing.routeRules[].headerActions[].responseHeadersToAdd[]
) atau mencerminkan
data geografis yang disediakan ke Cloud
Fungsi untuk memvalidasi setiap 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 terhadap data yang sudah ada
sumber.
Langkah selanjutnya
- Pelajari cara menggunakan permintaan yang ditandatangani untuk mengotorisasi konten per pengguna.
- Tinjau referensi aturan Google Cloud Armor untuk memahami bagaimana IP dan aturan pencocokan geografis dapat dinyatakan dan digabungkan menjadi satu.
- Buka dokumentasi logging untuk memahami cara membuat kueri log permintaan dan memeriksa permintaan mana yang telah diblokir.