Media CDN utilizza i criteri di sicurezza di Google Cloud Armor per impedire che il traffico indesiderato raggiunga i suoi servizi. Puoi consentire o negare le richieste in base a quanto segue:
- Indirizzi e intervalli IPv4 e IPv6 (CIDR)
- Codice paese (area geografica)
- Filtro di livello 7
Queste funzionalità consentono di limitare i download di contenuti agli utenti in località specifiche in cui sono previste limitazioni relative alle licenze dei contenuti, di consentire solo agli indirizzi IP aziendali di accedere agli endpoint di test o di gestione temporanea e di negare un elenco di indirizzi IP client non validi noti.
Puoi decorare le richieste consentite da Google Cloud Armor inserendo intestazioni personalizzate con nomi e valori configurabili.
I criteri di sicurezza di Google Cloud Armor si applicano a tutti i contenuti pubblicati da Media CDN, inclusi i contenuti e i fallimenti della cache.
I criteri di sicurezza di Google Cloud Armor vengono configurati in base al servizio Media CDN: per tutte le richieste destinate all'indirizzo IP (o ai nomi host) di quel servizio, il criterio di sicurezza viene applicato in modo coerente. A servizi diversi possono essere applicati criteri di sicurezza diversi ed è possibile creare più servizi per aree geografiche diverse in base alle esigenze.
Per una protezione più granulare dei contenuti a livello di utente, ti consigliamo di utilizzare URL e cookie firmati insieme a un criterio Google Cloud Armor.
Media CDN non prende in considerazione l'intestazione referer
durante la valutazione delle regole dei criteri di sicurezza perimetrale del filtro dell'intestazione di livello 7 se è impostata su uno qualsiasi dei seguenti valori:
- Più URL
- Un URL relativo
- Un URL assoluto valido contenente informazioni sugli utenti o un componente di frammenti
Configurazione dei criteri di sicurezza
Segui le istruzioni riportate di seguito per configurare un criterio di sicurezza.
Prima di iniziare
Per collegare un criterio di sicurezza Google Cloud Armor a un servizio Media CDN, verifica quanto segue:
- Conosci Google Cloud Armor.
- Avere un servizio Media CDN esistente a cui vuoi applicare il criterio.
- (Facoltativo, ma consigliato) abilita il logging sul servizio Media CDN per identificare le richieste bloccate.
Devi inoltre disporre delle seguenti autorizzazioni di Identity and Access Management per autorizzare, creare e collegare criteri di sicurezza a un servizio Media CDN:
compute.securityPolicies.addAssociation
compute.securityPolicies.create
compute.securityPolicies.delete
compute.securityPolicies.get
compute.securityPolicies.list
compute.securityPolicies.update
compute.securityPolicies.use
Gli utenti che devono collegare un certificato esistente a un servizio Media CDN richiedono solo le seguenti autorizzazioni IAM:
compute.securityPolicies.get
compute.securityPolicies.list
compute.securityPolicies.use
Il ruolo roles/networkservices.edgeCacheUser
include tutte queste autorizzazioni.
Crea un criterio di sicurezza
I criteri di sicurezza di Google Cloud Armor sono composti da diverse regole e ciascuna regola
definisce un insieme di criteri di corrispondenza (un'espressione) per una richiesta
e un'azione. Ad esempio, un'espressione può contenere logica di corrispondenza per
i clienti che si trovano in India, con l'azione associata allow
. Se una richiesta non corrisponde alla regola, Google Cloud Armor continua a valutare la regola successiva fino a quando non vengono tentati tutti i tentativi.
I criteri di sicurezza hanno una regola predefinita con un'azione allow
. La regola predefinita consente le richieste che non corrispondono alle regole precedenti. Puoi passare a una regola deny
quando vuoi allow
solo le richieste che corrispondono alle regole precedenti e rifiutare tutte le altre.
L'esempio seguente mostra come creare una regola che blocchi tutti i client che si trovano geograficamente in Australia con un errore HTTP 403 e consenta tutte le altre richieste.
gcloud
Per creare un nuovo criterio di tipo CLOUD_ARMOR_EDGE
, utilizza il comando gcloud compute security-policies create
:
gcloud compute security-policies create block-australia \ --type="CLOUD_ARMOR_EDGE" --project="PROJECT_ID"
Viene creato un criterio con una regola di autorizzazione predefinita alla priorità più bassa (priority: 2147483647
):
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/securityPolicies/block-australia].
Dopodiché puoi aggiungere una regola con una priorità più alta:
gcloud compute security-policies rules create 1000 \ --security-policy=block-australia --description "block AU" \ --expression="origin.region_code == 'AU'" --action="deny-403"
L'output è il seguente:
Updated [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/securityPolicies/block-australia].
Terraform
Se controlli il criterio, puoi vedere le due regole: la prima blocca
le richieste provenienti dall'Australia (origin.region_code == 'AU'
) e la
seconda regola con priorità più bassa, consente tutto il traffico che non corrisponde alla regola (o alle regole) con priorità più alta.
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
Aggiungi regole a un criterio di sicurezza
I criteri di sicurezza di Google Cloud Armor sono insiemi di regole corrispondenti agli attributi di livello 7 per proteggere le applicazioni o i servizi rivolti all'esterno. Ogni regola viene valutata in base al traffico in entrata.
Questi attributi possono essere utilizzati per le richieste HTTP nei criteri di sicurezza:
request.headers
, request.method
, request.path
, request.scheme
e
request.query
. Per ulteriori informazioni sulla scrittura di espressioni per le regole dei criteri di sicurezza, consulta la documentazione di riferimento sul linguaggio delle regole personalizzate di Google Cloud Armor.
Una regola del criterio di sicurezza di Google Cloud Armor è composta da una condizione di corrispondenza e da un'azione da eseguire quando questa condizione è soddisfatta.
gcloud
Per creare una regola per un criterio di sicurezza, utilizza il comando gcloud compute security-policies rules create PRIORITY
.
Sostituisci PRIORITY
con la priorità della regola nel criterio:
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
Collega un criterio a un servizio
gcloud
Per collegare un criterio Google Cloud Armor esistente a un
servizio Media CDN, utilizza il
comando gcloud edge-cache services update
:
gcloud edge-cache services update MY_SERVICE \ --edge-security-policy=SECURITY_POLICY
Aggiorna una regola in un criterio di sicurezza
Utilizza queste istruzioni per aggiornare una singola regola in un criterio di sicurezza di Google Cloud Armor. In alternativa, puoi aggiornare atomicamente più regole in un criterio di sicurezza.
gcloud
Usa il comando 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 ]
Ad esempio, il seguente comando aggiorna una regola con priorità 1111 per consentire il traffico dall'intervallo di indirizzi 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"
Per aggiornare la priorità di una regola, devi utilizzare l'API REST. Per ulteriori
informazioni, consulta il
metodo securityPolicies.patchRule
.
Visualizza un allegato ai criteri
Per esaminare quale criterio è associato a un servizio esistente, ispeziona (descrivi) il servizio.
gcloud
Per visualizzare il criterio Google Cloud Armor collegato a un
servizio Media CDN, utilizza il
comando gcloud edge-cache services describe
:
gcloud edge-cache services describe MY_SERVICE
Il campo edgeSecurityPolicy
del servizio descrive il criterio allegato:
name: "MY_SERVICE" edgeSecurityPolicy: "SECURITY_POLICY
Rimuovere un criterio
Per rimuovere un criterio esistente, aggiorna il servizio associato e passa una stringa vuota come criterio.
gcloud
Usa il comando gcloud edge-cache services update
:
gcloud edge-cache services update MY_SERVICE
--edge-security-policy=""
Il campo edgeSecurityPolicy
ora è omesso dall'output del comando gcloud edge-cache services describe MY_SERVICE
.
Esempi
Considera i seguenti casi d'uso di esempio dettagliati.
Esempio: identificare le richieste bloccate
Per registrare le richieste bloccate, devi aver abilitato il logging per un determinato servizio di cache perimetrale.
Le richieste consentite o rifiutate da un criterio di filtro vengono registrate in Logging. Per filtrare in base alle richieste rifiutate, la seguente
query di logging
per la configurazione prod-video-service
avrebbe il seguente aspetto:
resource.type="edge_cache_service" jsonPayload.statusDetails="denied_by_security_policy"
Esempio: personalizzare i codici di risposta
Le regole di Google Cloud Armor possono essere configurate in modo che restituiscano un codice di stato specifico come azione associata a una determinata regola. Nella maggior parte dei casi, è preferibile restituire un codice HTTP 403 (deny-403
) per indicare chiaramente che il client è stato bloccato dalla regola.
I codici di stato supportati sono:
- HTTP 403 (non consentito)
- HTTP 404 (non trovato)
- HTTP 502 (Gateway non valido)
L'esempio seguente mostra come configurare il codice di stato restituito:
Per specificare uno degli elementi [allow | deny-403 | deny-404 | deny-502]
come azione
associata alla regola, esegui questo comando. In questo esempio, la regola viene configurata in modo che restituisca un errore HTTP 502.
gcloud compute security-policies rules create 1000 \ --security-policy=block-australia --description "block AU" \ --expression="origin.region_code == 'AU'" --action="deny-502"
Ogni regola in un criterio di sicurezza può definire una risposta al codice di stato diversa.
Esempio: rifiutare i client all'esterno di un paese, ad eccezione degli indirizzi IP consentiti
Un caso comune nella pubblicazione di contenuti multimediali è il rifiuto delle connessioni dai client che si trovano al di fuori della regione per la quale disponi di licenze per i contenuti o meccanismi di pagamento.
Ad esempio, potresti voler consentire solo i clienti che si trovano in India, nonché tutti gli indirizzi IP presenti nella lista consentita, inclusi quelli dei partner per i contenuti e i tuoi dipendenti, che rientrano nell'intervallo 192.0.2.0/24
e rifiutare tutti gli altri.
Utilizzando il linguaggio personalizzato di Google Cloud Armor, la seguente espressione raggiunge questo obiettivo:
origin.region_code == "IN" || inIpRange(origin.ip, '192.0.2.0/24')
Questa espressione è configurata come regola allow
, con una regola deny
predefinita configurata in modo da corrispondere a tutti gli altri client. I criteri di sicurezza hanno sempre una regola predefinita.
In genere, la configuri in modo da default deny
il traffico che non
consenti esplicitamente. In altri casi, puoi scegliere di bloccare una parte del traffico e
default allow
tutto il resto del traffico.
Nell'output del criterio di sicurezza, tieni presente quanto segue:
- La regola con priorità più alta (
priority: 0
) consente il traffico dall'India OR dall'elenco definito di indirizzi IP. - La regola con priorità più bassa rappresenta un
default deny
. Il motore delle regole nega a tutti i client che le regole con priorità più elevata non restituiscono true. - Puoi combinare più regole utilizzando gli boolean operators.
Il criterio consente il traffico dai client in India, consente i client da un intervallo IP definito e nega tutto il traffico.
Quando visualizzi i dettagli del criterio, l'output è simile al seguente:
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
Puoi anche impostare un'intestazione della risposta personalizzata con la variabile di intestazione {region_code}
. Questa intestazione può essere controllata
con JavaScript e riflessa al client.
Esempio: bloccare i client dannosi in base all'indirizzo e agli intervalli IP
Utilizzando il linguaggio personalizzato di Google Cloud Armor, la seguente espressione raggiunge questo obiettivo:
inIpRange(origin.ip, '192.0.2.2/32') || inIpRange(origin.ip, '192.0.2.170/32')
Puoi bloccare intervalli IP fino a una maschera /8
in IPv4 e /32
in IPv6. Un caso comune per le piattaforme di streaming è il blocco degli intervalli IP in uscita di proxy o provider VPN per ridurre al minimo la circonvenzione delle licenze dei contenuti:
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')
Sono supportati entrambi gli intervalli di indirizzi IPv4 e IPv6.
Esempio: consentire solo un elenco fisso di aree geografiche
Se hai un elenco di codici paese, puoi utilizzare l'operatore booleano O ||
per
combinare le condizioni di corrispondenza.
Se utilizzi il linguaggio personalizzato di Google Cloud Armor, la seguente espressione consente agli utenti identificati come provenienti da Australia o Nuova Zelanda:
origin.region_code == "AU" || origin.region_code == "NZ"
Inoltre, è possibile combinare questa opzione con le espressioni origin.ip
o inIpRange(origin.ip,
'...')
per consentire ai tester, ai partner e ai tuoi intervalli IP aziendali, anche se non si trovano in una delle aree geografiche specificate.
È disponibile il numero documentato di sottoespressioni per ogni regola con un'espressione personalizzata. Per combinare più sottoespressioni, definisci più regole all'interno di un singolo criterio.
Esempio: bloccare i clienti di un insieme specifico di paesi
Un esempio meno comune potrebbe essere il blocco dei clienti da un determinato insieme di paesi, ma altrimenti consentire le richieste da tutti gli altri paesi.
Per farlo, devi creare un criterio che blocca sia il paese sia tutti i clienti per cui non è possibile determinare la loro regione e poi applicare una regola di autorizzazione predefinita per tutte le altre richieste.
L'esempio seguente descrive un criterio che blocca i client dal Canada, nonché tutti i client la cui località è sconosciuta, ma consente tutto il resto del traffico:
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
Esempio: rifiutare le richieste di contenuti memorizzati nella cache con intestazioni specifiche
Un criterio di sicurezza perimetrale si applica a tutte le richieste destinate a qualsiasi servizio Media CDN a cui il criterio è associato. L'applicazione dei criteri avviene prima di qualsiasi ricerca nella cache. Le richieste non consentite dal criterio di sicurezza perimetrale vengono rifiutate con il codice di stato configurato.
La seguente espressione trova corrispondenze con le richieste dall'indirizzo IP 1.2.3.4
che contengono la stringa user1
nell'intestazione user-agent
:
inIpRange(origin.ip, '1.2.3.4/32') && request.headers['user-agent'].contains('user1')
Il comando seguente aggiunge la regola di filtro 105
al criterio di sicurezza perimetrale my-edge-policy
, collegato a un servizio 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"
Misure di applicazione di Logging
Ogni log delle richieste fornisce dettagli sul criterio di sicurezza applicato e se la richiesta è stata consentita (ALLOW
) o rifiutata (DENY
).
Per abilitare il logging, assicurati che logConfig.enable
sia impostato su true
nel tuo servizio. I servizi senza log abilitati non registrano gli eventi dei criteri di sicurezza.
Quando un client si trova al di fuori degli Stati Uniti ed è in vigore un criterio di sicurezza denominato deny-non-us-clients
che nega le richieste provenienti da paesi diversi dagli Stati Uniti, questa è la voce di log per una richiesta rifiutata:
enforcedSecurityPolicy: name: deny-non-us-clients outcome: DENY
I servizi a cui non è collegato alcun criterio Google Cloud Armor contengono no_policy
come valore di enforcedSecurityPolicy.name
e un outcome
pari a ALLOW
. Ad esempio, una voce di log delle richieste per un servizio senza un criterio associato ha i seguenti valori:
enforcedSecurityPolicy: name: no_policy outcome: ALLOW
Informazioni sulle classificazioni GeoIP
Media CDN si basa sulle origini dati di classificazione IP interne di Google per ricavare una località (regione, stato, provincia o città) da un indirizzo IP. Se stai eseguendo la migrazione o suddividi il traffico da più provider, a volte un numero ridotto di indirizzi IP potrebbe essere associato a località diverse.
- Google Cloud Armor utilizza i codici regione ISO 3166-1 alpha 2 per associare un client a una posizione geografica.
- Ad esempio,
US
per gli Stati Uniti oAU
per l'Australia. - In alcuni casi, una regione corrisponde a un paese, ma non sempre. Ad esempio, il codice
US
include tutti gli stati degli Stati Uniti, un distretto e sei aree periferiche. - Per ulteriori informazioni, consulta unicode_region_subtag nell'Unicode Technical Standard.
- Per i client in cui non è possibile ricavare la località, il
origin.region_code
è impostato suZZ
.
Puoi aggiungere dati geografici alle intestazioni delle risposte a un endpoint Media CDN (con routing.routeRules[].headerActions[].responseHeadersToAdd[]
) o riflettere i dati geografici forniti a una funzione Cloud Functions per convalidare eventuali differenze tra le origini dati geoIP durante l'integrazione e i test iniziali.
Inoltre, i log delle richieste di Media CDN includono clientRegion
e altri dati specifici del client che puoi convalidare in base alle origini dati esistenti.
Passaggi successivi
- Scopri come utilizzare le richieste firmate per autorizzare i contenuti in base ai singoli utenti.
- Consulta il riferimento sulle regole di Google Cloud Armor per capire come le regole di corrispondenza geografica e per IP possono essere espresse e combinate insieme.
- Consulta la documentazione di logging per capire come eseguire query sui log delle richieste e verificare quali richieste sono state bloccate.