Sviluppa applicazioni in un ambiente Google Cloud vincolato

Spesso i nostri documenti sono scritti per aiutarti a rendere operativo un prodotto o una funzionalità, ma alcuni potrebbero non funzionare correttamente se la tua organizzazione applica vincoli di sicurezza. Ad esempio, la tua azienda potrebbe implementare alcuni dei vincoli di sicurezza del Cloud Foundation Toolkit, i progetti per la sicurezza di Google Cloud oppure creare un proprio progetto.

Questo articolo ti aiuta a risolvere gli errori che potresti riscontrare in un'organizzazione che utilizza vincoli di sicurezza.

Risolvere i problemi relativi ai vincoli di sicurezza

Il team delle operazioni IT o della sicurezza può abilitare vincoli di sicurezza attraverso i criteri dell'organizzazione. Questi vincoli limitano il modo in cui possono essere utilizzate le risorse della tua organizzazione.

Quando effettui una richiesta API che restituisce un errore, la risposta dell'API dovrebbe comunicarti se questo è dovuto a violazioni delle norme. La risposta dovrebbe spiegare il vincolo che viene violato. I seguenti passaggi per la risoluzione dei problemi sono utili per determinare e comprendere se si verifica una violazione:

  1. Esamina il messaggio di errore della risposta dell'API. Riesci a identificare il vincolo di sicurezza violato dal deployment?

    L'esempio seguente indica che il problema è il vincolo sql.restrictPublicIp:

    Organization Policy check failure
    The external IP of this instance violates the constraints/sql.restrictPublicIp enforced
    
  2. Se sei consapevole della violazione dei criteri, aggiorna la configurazione del deployment delle risorse in modo che funzioni nel rispetto dei vincoli.

    Nell'esempio precedente di limitazione degli indirizzi IP pubblici esterni, configura l'istanza Cloud SQL per utilizzare un indirizzo IP privato interno.

  3. Se hai dubbi sul motivo per cui viene applicato il vincolo o su cosa fare, collabora con il team di sicurezza per capire dove viene applicato il criterio nella gerarchia della tua organizzazione e le soluzioni alternative suggerite.

    Verifica se nella tua organizzazione sono condivisi modelli di deployment, come i modelli Terraform. Questi modelli devono descrivere in dettaglio come è stata configurata l'infrastruttura Google Cloud e limitare il deployment della tua applicazione.

Problemi comuni relativi ai vincoli di sicurezza

Quando esegui il deployment delle applicazioni in Google Cloud, potresti riscontrare un errore come nell'esempio seguente:

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

In questo esempio, non puoi configurare un'istanza Cloud SQL per utilizzare un indirizzo IP pubblico esterno. È in corso l'applicazione di un vincolo di sicurezza da un criterio applicato al tuo ambiente.

I seguenti vincoli di sicurezza comuni possono essere abilitati e dettagliati in una risposta di errore dell'API durante lo sviluppo delle applicazioni.

Compute Engine

Nome vincolo Perché è implementato Soluzione alternativa suggerita
constraints/compute.disableNestedVirtualization Impedisce l'installazione di un hypervisor compatibile con KVM nella VM. Questo comportamento potrebbe introdurre rischi per la sicurezza senza patch e gestione adeguate. Configura la tua VM per disabilitare la virtualizzazione nidificata con accelerazione hardware.

Per impostazione predefinita, è attiva per tutte le VM di Compute Engine in esecuzione su Intel Haswell o su piattaforme CPU più recenti.
constraints/compute.requireShieldedVm Richiede che nuove istanze VM utilizzino immagini disco schermate con le opzioni Avvio protetto, vTPM e monitoraggio dell'integrità abilitate. Queste opzioni impediscono la manomissione della VM e l'accesso o la modifica dei dati. Non abilitare le Shielded VM quando crei una VM.

Per creare un cluster GKE, devi abilitare i nodi GKE schermati.

Attualmente Dataflow non supporta i worker Shielded VM.
constraints/compute.disableSerialPortAccess Rimuovi i vettori di sicurezza per interagire con una VM o visualizzare l'output diagnostica che potrebbe essere utilizzato per formare un attacco. Non abilitare l'accesso alla porta seriale quando crei una VM.
constraints/compute.disableGuestAttributesAccess Riduci al minimo la quantità di informazioni sull'host e sulla piattaforma sottostanti che potrebbero essere utilizzate in modo illecito da un'app dannosa. Non utilizzare l'API Compute Engine per leggere gli attributi guest delle VM Compute Engine.
constraints/compute.vmExternalIpAccess Impedisce l'esecuzione delle applicazioni con un indirizzo IP esterno e l'accesso da Internet. Disabilita l'accesso IP esterno per le tue VM. Puoi usare solo un indirizzo IP privato interno.

GKE può utilizzare cluster privati senza indirizzi IP pubblici.

Dataprep e Dataflow non supportano attualmente gli indirizzi IP privati.

Rete virtuale e indirizzi IP

Nome vincolo Perché è implementato Soluzione alternativa suggerita
constraints/compute.skipDefaultNetworkCreation Assicurati che possano essere creati solo VPC (Virtual Private Cloud) gestiti dall'azienda e che vengano applicati il traffico di rete o le regole di filtro. Connetti le tue applicazioni ai VPC esistenti nella tua organizzazione. Per i nuovi progetti non viene eseguito il deployment dei VPC predefiniti creati automaticamente.
constraints/compute.restrictXpnProjectLienRemoval Impedisci l'eliminazione accidentale di un VPC condiviso quando le risorse di altri progetti si basano sui servizi di rete che fornisce. Non provare a eliminare un VPC condiviso. Assicurati di scegliere come target la risorsa corretta per l'eliminazione.
constraints/sql.restrictPublicIp Impedisci l'esecuzione delle istanze Cloud SQL con un indirizzo IP esterno e accessibili da internet. Non configurare la tua istanza Cloud SQL per utilizzare un indirizzo IP pubblico esterno.

Configura invece la tua istanza Cloud SQL in modo che utilizzi un indirizzo IP privato interno.

Identità e autenticazione

Nome vincolo Perché è implementato Soluzione alternativa suggerita
constraints/iam.disableServiceAccountKeyCreation Le chiavi degli account di servizio possono rappresentare un rischio per la sicurezza se vengono esposte, quindi evita l'esportazione. Esegui l'autenticazione utilizzando un' alternativa più sicura alle chiavi degli account di servizio.
constraints/storage.uniformBucketLevelAccess Riduci al minimo il rischio di applicazione di autorizzazioni errate o incoerenti ai bucket di archiviazione consentendo solo l'utilizzo di Identity and Access Management (IAM). Abilita l'accesso uniforme a livello di bucket per proteggere il tuo bucket Cloud Storage.
constraints/iam.allowedPolicyMemberDomains Limita l'accesso alle risorse di Google Cloud solo ai domini approvati. Utilizza un account all'interno di uno dei domini approvati. Esistono altri problemi noti per questo vincolo.

Esempi di errori di risposta dell'API

Nell'esempio precedente di limitazione degli indirizzi IP pubblici esterni con Cloud SQL, una violazione dei criteri determina la restituzione di un errore dell'API. Gli esempi più dettagliati riportati di seguito mostrano la risposta dell'API che indica il vincolo che causa la mancata riuscita della richiesta. Osserva le risposte dell'API per comprendere perché i deployment delle applicazioni non vanno a buon fine.

Errore di Cloud SQL con Google Cloud CLI:

$ gcloud alpha sql instances create mysql-node --project my-sql-project

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

Errore di Cloud SQL con Terraform:

$ terraform apply plan.out

[...]
module.mysql-db.google_sql_database_instance.default: Creating...

Error: Error, failed to create instance backend01-db-1c81e0e3: googleapi:
Error 400: Invalid request: Organization Policy check failure: the external IP
of this instance violates the constraints/sql.restrictPublicIp enforced at the
123456789 project., invalid

Elenca i criteri dell'organizzazione applicati al tuo progetto

Il progetto può ereditare i criteri dal livello di cartella o organizzazione. A seconda dei tuoi ruoli di accesso, potresti non avere visibilità sui criteri applicati ai livelli superiori della gerarchia per vedere dove viene applicato il vincolo violato.

Per visualizzare le eccezioni o i criteri applicati al progetto, utilizza il comando gcloud alpha resource-manager org-policies list e specifica l'ID progetto con il parametro --project:

gcloud alpha resource-manager org-policies list --project <project-id>

Per ulteriori informazioni su un criterio applicato, utilizza il comando gcloud alpha resource-manager org-policies describe. Fornisci il nome del criterio da descrivere e il tuo ID progetto con il parametro --project:

gcloud alpha resource-manager org-policies describe <policy-name> --project <project-id>

Passaggi successivi

Se non riesci a determinare dove viene applicato un criterio e come aggirare un vincolo di sicurezza, contatta il team delle operazioni IT o di sicurezza. Ogni organizzazione applica criteri e progetti personalizzati per il proprio ambiente.

Per ulteriori informazioni su tutti i controlli che possono essere applicati nella tua organizzazione, consulta l'elenco dei vincoli dei criteri dell'organizzazione.