Sviluppa applicazioni in un ambiente Google Cloud limitato

I nostri documenti sono spesso 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 toolkit di Cloud Foundation, i progetti di sicurezza di Google Cloud o crearne di nuovi.

Questo articolo aiuta a risolvere gli errori di deployment delle applicazioni che potresti visualizzare in un'organizzazione che utilizza vincoli di sicurezza.

Risolvere i problemi relativi ai vincoli di sicurezza

Il team operativo o di sicurezza IT può abilitare i vincoli di sicurezza tramite i criteri dell'organizzazione. Questi vincoli limitano il modo in cui è possibile utilizzare le risorse dell'organizzazione.

Quando effettui una richiesta API che restituisce un errore, la risposta dell'API deve indicarti se è dovuta a violazioni delle norme. La risposta dovrebbe spiegare il vincolo che viene violato. I seguenti passaggi per la risoluzione dei problemi ti aiutano a determinare e capire se si verifica una violazione:

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

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

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

    Nell'esempio precedente, relativo alla limitazione degli indirizzi IP pubblici esterni, configura la tua istanza Cloud SQL in modo che utilizzi un indirizzo IP privato interno.

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

    Controlla se nella tua organizzazione sono condivisi modelli di deployment, ad esempio Terraform. Questi modelli devono specificare come è stata configurata l'infrastruttura Google Cloud e limitare il deployment dell'applicazione.

Problemi comuni relativi ai vincoli di sicurezza

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

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. Viene applicato 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 del vincolo Perché è implementato Soluzione consigliata
constraints/compute.disableNestedVirtualization Impedisci l'installazione di un hypervisor compatibile con KVM all'interno della VM. Questo comportamento potrebbe introdurre rischi per la sicurezza senza adeguate patch e gestione. Configura la tua VM per disabilitare la virtualizzazione nidificata con accelerazione hardware.

Per impostazione predefinita, è attivo per tutte le VM di Compute Engine in esecuzione su Intel Haswell o su piattaforme CPU più recenti.
constraints/compute.requestShieldedVm Richiede nuove istanze VM per utilizzare immagini del disco schermato 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 VM schermate quando crei una VM.

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

Dataflow al momento non supporta i worker delle Shielded VM.
constraints/compute.disableSerialPortAccess Rimuovere i vettori di sicurezza per interagire con una VM o visualizzare l'output di 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 tue VM Compute Engine.
constraints/compute.vmExternalIpAccess Impedisci l'esecuzione delle applicazioni con un indirizzo IP esterno e l'accesso a Internet. Disabilita l'accesso IP esterno per le tue VM. Puoi utilizzare solo un indirizzo IP privato interno.

GKE può utilizzare cluster privati senza indirizzi IP pubblici.

Dataprep e Dataflow al momento non supportano indirizzi IP privati.

Rete virtuale e indirizzi IP

Nome del vincolo Perché è implementato Soluzione consigliata
constraints/compute.skipDefaultNetworkCreation Assicurati che sia possibile creare solo VPC (Virtual Private Cloud) gestito dall'azienda e che vengano applicati le regole per il filtro o il traffico di rete. Connetti le tue applicazioni ai VPC esistenti nella tua organizzazione. Il deployment dei VPC creati automaticamente non viene eseguito per i nuovi progetti.
constraints/compute.restrictXpnProjectLienRemoval Impedisci l'eliminazione accidentale di un VPC condiviso quando le risorse in 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 accessibile da Internet. Non configurare l'istanza Cloud SQL in modo che utilizzi un indirizzo IP pubblico esterno.

Configura invece l'istanza Cloud SQL in modo che utilizzi un indirizzo IP privato interno.

Identità e autenticazione

Nome del vincolo Perché è implementato Soluzione consigliata
constraints/iam.disableServiceAccountKeyCreation Le chiavi degli account di servizio possono rappresentare un rischio per la sicurezza se esposte, quindi impedisci che vengano esportate. Esegui l'autenticazione utilizzando un' alternativa più sicura alle chiavi degli account di servizio.
constraints/storage.uniformBucketLevelAccess Riduci al minimo il rischio di applicare autorizzazioni errate o incoerenti ai bucket di archiviazione consentendo l'utilizzo solo 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 che fa parte di uno dei domini approvati. Esistono altri problemi noti per questo vincolo.

Errori di risposta dell'API di esempio

Nell'esempio precedente relativo alla limitazione degli indirizzi IP pubblici esterni con Cloud SQL, una violazione dei criteri causa la restituzione dell'API da parte di un errore. I seguenti esempi più dettagliati mostrano la risposta dell'API che indica il vincolo che causa la mancata riuscita della richiesta. Analizza le tue risposte API per capire 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 dalla cartella o dall'organizzazione. A seconda dei tuoi ruoli di accesso, potresti non avere visibilità su quali criteri vengono applicati a livelli superiori nella gerarchia per vedere dove viene applicato il vincolo.

Per visualizzare i criteri o le eccezioni applicati per il tuo progetto, utilizza il comando gcloud alpha resource-manager org-policies list e specifica il tuo 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-manager-manager-policies describe. Indica il nome del criterio da descrivere e l'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 a risolvere il problema relativo a un vincolo di sicurezza, contatta il team tecnico o delle operazioni IT. Ogni organizzazione applica criteri e progetti personalizzati per il proprio ambiente.

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