Sviluppa applicazioni in un ambiente Google Cloud limitato

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

I nostri documenti sono spesso scritti per aiutarti a rendere operativo un prodotto o una funzionalità, ma alcuni documenti potrebbero non funzionare correttamente se la tua organizzazione applica vincoli di sicurezza. Ad esempio, la tua azienda potrebbe implementare alcuni dei vincoli di sicurezza forniti dal toolkit di Cloud Foundation, i progetti di sicurezza di Google Cloud o crearne di propri.

Questo articolo ti 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 tuo team IT o il team per la sicurezza può attivare i vincoli di sicurezza tramite i criteri dell'organizzazione. Questi vincoli limitano il modo in cui è possibile utilizzare le risorse dell'organizzazione.

Quando fai una richiesta API che restituisce un errore, la risposta API dovrebbe comunicarti se è stata causata da 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 relativo alla risposta dell'API. Sapresti identificare il vincolo di sicurezza che viola il tuo deployment?

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

    Organization Policy check failure
    The external IP of this instance violates the constraints/sql.restrictPublicIp enforced
    
  2. Se conosci la violazione del criterio, aggiorna la configurazione del deployment delle risorse in modo che funzioni in base ai vincoli.

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

  3. Se non sai perché viene applicato il vincolo o cosa fare, contatta il team di sicurezza per capire dove viene applicato il criterio nella gerarchia della tua organizzazione e le soluzioni alternative suggerite.

    Controlla se nella tua organizzazione sono condivisi eventuali modelli di deployment, come i modelli Terraform. Questi modelli devono specificare in che modo l'infrastruttura Google Cloud è stata configurata e limitare il deployment della tua 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 a un criterio applicato all'ambiente.

I seguenti vincoli di sicurezza comuni possono essere abilitati e dettagliati in una risposta di errore dell'API mentre sviluppi le tue applicazioni.

Compute Engine

Nome vincolo Perché è implementata Soluzione consigliata
vincoli/compute.disableNestedVirtualization Impedisci l'installazione di un hypervisor compatibile con KVM all'interno della VM. Questo comportamento potrebbe introdurre rischi per la sicurezza senza l'applicazione di patch e gestione adeguate. 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.
vincoli/compute.requireShieldedVm Richiede nuove istanze VM per utilizzare le immagini disco schermate con l'avvio protetto, le opzioni vTPM e il monitoraggio dell'integrità abilitate. Queste opzioni impediscono la manomissione della VM e l'accesso o la modifica dei dati. Non attivare le VM schermate quando crei una VM.

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

Dataflow non supporta i worker Shielded VM.
vincoli/compute.disableSerialPortAccess Rimuovi i vettori di sicurezza per interagire con una VM o visualizzare l'output diagnostico 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 di Compute Engine.
constraints/compute.vmExternalIpAccess Impedisci alle applicazioni di essere eseguite con un indirizzo IP esterno e accessibile da Internet. Disabilita l'accesso IP esterno per le tue VM. Puoi utilizzare solo un indirizzo IP privato interno.

GKE può utilizzare i cluster privati senza indirizzi IP pubblici.

Dataprep e Dataflow al momento non supportano gli indirizzi IP privati.

Rete virtuale e indirizzi IP

Nome vincolo Perché è implementata Soluzione consigliata
vincoli/compute.skipDefaultNetworkCreation Assicurati che sia possibile creare solo VPC (Virtual Private Cloud) gestiti dall'azienda e che vengano applicate le regole di filtro o il traffico di rete. Connetti le tue applicazioni ai VPC esistenti nella tua organizzazione. Per i nuovi progetti non viene eseguito il deployment dei VPC creati automaticamente.
constraints/compute.restrictXpnProjectLienRemove 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 di istanze Cloud SQL con un indirizzo IP esterno e accessibile da Internet. Non configurare l'istanza Cloud SQL per utilizzare un indirizzo IP pubblico esterno.

Invece, configura l'istanza Cloud SQL in modo che utilizzi un indirizzo IP privato interno.

Identità e autenticazione

Nome vincolo Perché è implementata Soluzione consigliata
constraints/iam.disableServiceAccountKeyCreation Se esposte, le chiavi degli account di servizio possono rappresentare un rischio per la sicurezza, impedisci quindi l'esportazione. Utilizza un'altra forma di autenticazione anziché un account di servizio.
vincoli/storage.uniformbucketLevelAccess Riduci al minimo il rischio di applicazione di 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 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 relativo alla limitazione degli indirizzi IP pubblici esterni con Cloud SQL, una violazione dei criteri ha determinato la restituzione di un errore nell'API. I seguenti esempi più dettagliati mostrano la risposta API che indica quale vincolo causa l'esito negativo della richiesta. Guarda le tue risposte all'API per capire perché il deployment delle applicazioni non riesce.

Errore di Cloud SQL con l'interfaccia a riga di comando di Google Cloud:

$ 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 potrebbe ereditare i criteri dal livello di cartella o organizzazione. A seconda dei tuoi ruoli di accesso, potresti non avere visibilità su quali criteri vengono applicati ai livelli superiori nella gerarchia per vedere dove viene applicato il vincolo.

Per vedere 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 resource-manager org-scribe. 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 operativo o il team per la sicurezza. Ogni organizzazione applica criteri e progetti personalizzati in base al proprio ambiente.

Per scoprire di più su tutti i controlli che potrebbero essere applicati nella tua organizzazione, consulta l'elenco dei vincoli dei criteri dell'organizzazione.