Configurazione dei Controlli di servizio VPC

Controlli di servizio VPC è una funzionalità di Google Cloud che consente di configurare un perimetro sicuro per evitare l'esfiltrazione di dati. Questa guida mostra come utilizzare i Controlli di servizio VPC con Cloud Functions per aumentare la sicurezza delle tue funzioni.

Per le limitazioni con questa integrazione, consulta la documentazione relativa ai Controlli di servizio VPC.

Configurazione a livello di organizzazione

Per utilizzare i Controlli di servizio VPC con Cloud Functions, puoi configurare un perimetro di servizio a livello di organizzazione. Configurando i criteri dell'organizzazione appropriati, puoi assicurarti che i controlli dei Controlli di servizio VPC vengano applicati durante l'utilizzo di Cloud Functions e che gli sviluppatori possano eseguire il deployment solo di servizi conformi con i Controlli di servizio VPC. Scopri di più sull'ereditarietà e sulle violazioni quando imposti un criterio dell'organizzazione.

Configura un perimetro dei Controlli di servizio VPC

Per configurare un perimetro di servizio, devi disporre dei ruoli Visualizzatore organizzazione (roles/resourcemanager.organizationViewer) ed Editor Gestore contesto accesso (roles/accesscontextmanager.policyEditor).

Segui la guida rapida di Controlli di servizio VPC per:

  1. Crea un perimetro di servizio.

  2. Aggiungi uno o più progetti al perimetro.

  3. Limita l'API Cloud Functions (1ª generazione) o entrambe le API Cloud Functions e l'API Cloud Run Admin (2ª generazione).

Dopo aver configurato il perimetro di servizio, tutte le chiamate all'API con restrizioni vengono controllate per garantire che le chiamate provengano dall'interno dello stesso perimetro.

(Facoltativo) Abilita l'accesso perimetrale per le macchine di sviluppo

Poiché i controlli dei Controlli di servizio VPC vengono applicati all'API Cloud Functions, le chiamate all'API Cloud Functions non andranno a buon fine a meno che non provengano dall'interno del perimetro di servizio. Quindi, per gestire le funzioni con l'API Cloud Functions, l'interfaccia utente di Cloud Functions nella console Google Cloud o Google Cloud CLI, scegli una delle seguenti opzioni:

  • Utilizza una macchina all'interno del perimetro dei Controlli di servizio VPC. Ad esempio, puoi utilizzare una VM di Compute Engine o una macchina on-premise connessa alla tua rete VPC tramite VPN.

  • Concedi agli sviluppatori delle funzioni l'accesso al perimetro. Ad esempio, puoi creare livelli di accesso che consentono l'accesso perimetrale in base all'indirizzo IP o all'identità dell'utente. Per ulteriori informazioni, consulta Consentire l'accesso alle risorse protette dall'esterno di un perimetro.

Configura i criteri dell'organizzazione

Per gestire i criteri dell'organizzazione, devi disporre del ruolo Amministratore criteri organizzazione (roles/orgpolicy.policyAdmin).

Per rispettare i Controlli di servizio VPC e proteggerti dall'esfiltrazione di dati, configura i seguenti criteri dell'organizzazione che controllano le impostazioni di rete consentite per Cloud Functions nel perimetro di servizio.

Limita impostazioni di traffico in entrata consentite

Il criterio dell'organizzazione cloudfunctions.allowedIngressSettings controlla le impostazioni in entrata che gli sviluppatori sono autorizzati a utilizzare per Cloud Functions. Imposta questo criterio dell'organizzazione in modo che gli sviluppatori impongano di utilizzare il valore ALLOW_INTERNAL_ONLY:

Console

  1. Vai alla pagina del criterio Impostazioni di traffico in entrata consentite nella console Google Cloud:

    Vai al criterio dell'organizzazione

  2. Fai clic su Gestisci criterio.

  3. Nella pagina Modifica criterio, seleziona Personalizza.

  4. In Applicazione dei criteri, seleziona Sostituisci.

  5. In Valori del criterio, seleziona Personalizzato.

  6. In Tipo di criterio, seleziona Consenti.

  7. In Valori personalizzati, inserisci ALLOW_INTERNAL_ONLY.

  8. Fai clic su Imposta criterio.

gcloud

Utilizza il comando gcloud resource-manager org-policies allow:

gcloud resource-manager org-policies allow \
  cloudfunctions.allowedIngressSettings ALLOW_INTERNAL_ONLY \
  --organization ORGANIZATION_ID

dove ORGANIZATION_ID è l'ID organizzazione.

Una volta attivato questo criterio dell'organizzazione, tutte le funzioni devono utilizzare il valore ALLOW_INTERNAL_ONLY per le impostazioni di traffico in entrata. Ciò significa che le funzioni HTTP possono accettare solo il traffico proveniente da una rete VPC all'interno del perimetro di servizio. I deployment delle funzioni che specificano un valore diverso non riusciranno.

Richiedi connettore VPC

Il criterio dell'organizzazione cloudfunctions.requireVPCConnector consente di stabilire se per le funzioni è necessario un connettore di accesso VPC serverless. Imposta questo criterio dell'organizzazione per applicare questo vincolo:

Console

  1. Vai alla pagina del criterio Richiedi connettore VPC nella console Google Cloud:

    Vai al criterio dell'organizzazione

  2. Fai clic su Gestisci criterio.

  3. Nella pagina Modifica criterio, seleziona Personalizza.

  4. In Applicazione, seleziona On.

  5. Fai clic su Imposta criterio.

gcloud

Utilizza il comando gcloud resource-manager org-policies enable-enforce:

gcloud resource-manager org-policies enable-enforce \
  cloudfunctions.requireVPCConnector \
  --organization ORGANIZATION_ID

dove ORGANIZATION_ID è l'ID organizzazione.

Una volta attivato questo criterio dell'organizzazione, tutte le funzioni devono utilizzare un connettore di accesso VPC serverless. I deployment delle funzioni che non specificano un connettore non andranno a buon fine.

Limita le impostazioni in uscita del connettore VPC consentito

Il criterio dell'organizzazione cloudfunctions.allowedVpcConnectorEgressSettings controlla le impostazioni del traffico in uscita che gli sviluppatori sono autorizzati a utilizzare per Cloud Functions. Imposta questo criterio dell'organizzazione per consentire solo il valore ALL_TRAFFIC:

Console

  1. Vai alla pagina del criterio Impostazioni di traffico in uscita del connettore VPC consentite nella console Google Cloud:

    Vai al criterio dell'organizzazione

  2. Fai clic su Gestisci criterio.

  3. Nella pagina Modifica criterio, seleziona Personalizza.

  4. In Applicazione dei criteri, seleziona Sostituisci.

  5. In Valori del criterio, seleziona Personalizzato.

  6. In Tipo di criterio, seleziona Consenti.

  7. In Valori personalizzati, inserisci ALL_TRAFFIC.

  8. Fai clic su Imposta criterio.

gcloud

Utilizza il comando gcloud resource-manager org-policies allow:

gcloud resource-manager org-policies allow \
  cloudfunctions.allowedVpcConnectorEgressSettings ALL_TRAFFIC \
  --organization ORGANIZATION_ID

dove ORGANIZATION_ID è l'ID organizzazione.

Una volta attivato questo criterio dell'organizzazione, tutte le funzioni devono utilizzare il valore ALL_TRAFFIC per le impostazioni in uscita. Ciò significa che le funzioni devono instradare tutto il traffico in uscita attraverso la rete VPC. I deployment delle funzioni che specificano un valore diverso non andranno a buon fine.

Combinato con il criterio dell'organizzazione cloudfunctions.requireVPCConnector, questo obbliga tutto il traffico in uscita ad attraversare la rete VPC in cui è soggetto alle regole di firewall e di routing configurate.

Configurazione a livello di progetto

Per i singoli progetti all'interno del perimetro di servizio, devi eseguire una configurazione aggiuntiva per utilizzare i Controlli di servizio VPC.

Configura reti VPC

Per accedere alle API e ai servizi Google riducendo i rischi di esfiltrazione di dati, le richieste devono essere inviate all'intervallo IP virtuale limitato (VIP), 199.36.153.4/30 (restricted.googleapis.com).

Per ogni rete VPC in un progetto, segui questi passaggi per bloccare il traffico in uscita, tranne quello verso l'intervallo VIP limitato:

  1. Configura le regole firewall per impedire ai dati di uscire dalla rete VPC:

    • Crea una regola di negazione in uscita che blocca tutto il traffico in uscita.

    • Crea una regola di autorizzazione in uscita che consenta il traffico verso 199.36.153.4/30 sulla porta TCP 443. Assicurati che abbia una priorità prima della regola di negazione del traffico in uscita che hai creato per consentire il traffico in uscita solo verso l'intervallo VIP limitato.

  2. Configura DNS per risolvere *.googleapis.com in restricted.googleapis.com.

  3. Configura il DNS con un record A che mappa *.cloudfunctions.net all'intervallo IP 199.36.153.4/30. Puoi farlo con Cloud DNS:

    gcloud dns managed-zones create ZONE_NAME \
    --visibility=private \
    --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/networks/VPC_NAME \
    --description=none \
    --dns-name=cloudfunctions.net
    
    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
    gcloud dns record-sets transaction add --name=*.cloudfunctions.net. \
    --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
    --zone=ZONE_NAME \
    --ttl=300
    
    gcloud dns record-sets transaction execute --zone=ZONE_NAME
    
  4. Abilita l'accesso privato Google per la subnet del connettore VPC.

A questo punto, le richieste provenienti dall'interno della rete VPC:

  • non possono uscire dalla rete VPC, impedendo il traffico in uscita al di fuori del perimetro di servizio.
  • possono raggiungere solo le API e i servizi Google che controllano i Controlli di servizio VPC, impedendo l'esfiltrazione tramite le API di Google.

Concedi all'account di servizio Cloud Build l'accesso al perimetro dei Controlli di servizio VPC

Cloud Functions usa Cloud Build per creare il codice sorgente in un container eseguibile. Per utilizzare Cloud Functions con i Controlli di servizio VPC, devi configurare il tuo account di servizio Cloud Build (predefinito o personalizzato) in modo che abbia accesso al perimetro di servizio.

Trovare il nome dell'account di servizio

Se utilizzi l'account di servizio Cloud Build predefinito, il nome è il seguente:

  1. Utilizza la pagina IAM nella console Google Cloud per trovare l'account di servizio Cloud Build.

    Apri IAM

  2. Assicurati che nel menu a discesa dei progetti sia visualizzato il progetto corretto.

  3. Cerca cloudbuild.gserviceaccount.com. L'indirizzo email nel modulo PROJECT_NUMBER@cloudbuild.gserviceaccount.com è il nome dell'account di servizio.

Se hai un account di servizio Cloud Build personalizzato, utilizza invece questo nome.

Concedi all'account di servizio l'accesso al perimetro di servizio

Una volta ottenuto il nome dell'account di servizio, segui la guida su Limitare l'accesso per utente o account di servizio per creare un livello di accesso per l'account di servizio. Poi, consulta Aggiunta di un livello di accesso a un perimetro esistente per aggiungere il livello di accesso al perimetro di servizio.

Esegui il deployment di funzioni conformi ai Controlli di servizio VPC

Dopo aver configurato i Controlli di servizio VPC per Cloud Functions, devi assicurarti che tutte le funzioni di cui è stato eseguito il deployment all'interno del perimetro di servizio siano conformi ai criteri dell'organizzazione specificati. Ciò significa che:

  • Tutte le funzioni devono utilizzare un connettore di accesso VPC serverless. Per ulteriori informazioni, consulta Connessione a una rete VPC.
  • Tutte le funzioni devono consentire solo il traffico proveniente da sorgenti interne. Per ulteriori informazioni, consulta le impostazioni in entrata.
  • Tutte le funzioni devono instradare tutto il traffico in uscita attraverso la rete VPC. Per ulteriori informazioni, consulta Impostazioni per il traffico in uscita.

I deployment delle funzioni che non soddisfano questi criteri non riusciranno.

Controlla le funzioni esistenti per garantire la conformità ai Controlli di servizio VPC

Dopo aver configurato i Controlli di servizio VPC, le nuove funzioni create nei progetti all'interno del perimetro di servizio vengono controllate automaticamente per verificarne la conformità. Tuttavia, per evitare interruzioni dei carichi di lavoro esistenti, le funzioni esistenti continuano a funzionare e potrebbero non essere conformi ai criteri dell'organizzazione.

Ti consigliamo di controllare le funzioni esistenti e di aggiornare o eseguire nuovamente il deployment delle funzioni in base alle necessità. Per facilitare questo processo, puoi creare uno script che utilizzi l'API Cloud Functions per elencare le funzioni ed evidenziare quelle che non specificano le impostazioni di rete corrette.

Utilizzo dei Controlli di servizio VPC con funzioni esterne a un perimetro

Le sezioni precedenti si applicano allo scenario in cui esegui il deployment di Cloud Functions all'interno di un perimetro di servizio dei Controlli di servizio VPC.

Se devi eseguire il deployment di una funzione all'esterno di un perimetro di servizio, ma la funzione richiede l'accesso alle risorse all'interno di un perimetro, utilizza la seguente configurazione:

  1. Concedi all'account di servizio Cloud Build l'accesso al perimetro dei Controlli di servizio VPC.
  2. Concedi all'account di servizio di runtime della funzione l'accesso al perimetro. Puoi farlo creando un livello di accesso e aggiungendolo al perimetro di servizio oppure creando un criterio in entrata sul perimetro.
  3. Connetti la funzione a una rete VPC.
  4. Instrada tutto il traffico in uscita dalla funzione attraverso la rete VPC. Per ulteriori informazioni, consulta Impostazioni per il traffico in uscita.

Dopo aver completato questa configurazione, la funzione potrà raggiungere le risorse protette dal perimetro.