Sviluppare applicazioni in un ambiente Google Cloud vincolato

Le nostre documentazioni sono spesso scritte per aiutarti a configurare e utilizzare un prodotto o una funzionalità, ma alcune 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, dei blueprint di sicurezza di Google Cloud o crearne di propri.

Questo articolo ti aiuta a risolvere i problemi di deployment delle applicazioni che potresti riscontrare in un'organizzazione che utilizza vincoli di sicurezza.

Risolvere i problemi relativi alle limitazioni di sicurezza

Il team di operazioni IT o di sicurezza può attivare i vincoli di sicurezza tramite le norme 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 indicarti se si tratta di violazioni delle norme. La risposta deve spiegare la limitazione che viene violata. 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 quale vincolo di sicurezza viola il tuo deployment?

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

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

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

  3. Se non sai perché viene applicato il vincolo o cosa fare, collabora con il tuo 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 modelli di deployment, ad esempio modelli Terraform. Questi modelli devono descrivere in dettaglio la configurazione dell'infrastruttura Google Cloud e limitare il deployment dell'applicazione.

Problemi comuni relativi alle limitazioni di sicurezza

Quando esegui il deployment delle applicazioni in Google Cloud, potresti riscontrare un errore come quello riportato di seguito:

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 attivati e descritti 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 all'interno della VM. Questo comportamento potrebbe comportare rischi per la sicurezza senza patch e gestione adeguate. Configura la VM per disattivare la virtualizzazione nidificata con accelerazione hardware.

Per impostazione predefinita, è attivato per tutte le VM Compute Engine in esecuzione su piattaforme CPU Intel Haswell o successive.
constraints/compute.requireShieldedVm Richiede che le nuove istanze VM utilizzino immagini disco schermate in cui siano abilitate le opzioni di avvio protetto, monitoraggio dell'integrità e vTPM. Queste opzioni impediscono la manomissione della VM e l'accesso o la modifica dei dati. Non attivare le VM isolate quando crei una VM.

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

Al momento, Dataflow non supporta i worker VM protetti.
constraints/compute.disableSerialPortAccess Rimuovi i vettori di sicurezza per interagire con una VM o visualizzare l'output di diagnostica che potrebbe essere utilizzato per formare un attacco. Non attivare l'accesso alla porta seriale quando crei una VM.
constraints/compute.disableGuestAttributesAccess Riduci al minimo la quantità di informazioni sull'host e sulla piattaforma di base che potrebbero essere utilizzate in modo improprio da un'app dannosa. Non utilizzare l'API Compute Engine per leggere gli attributi guest delle VM Compute Engine.
constraints/compute.vmExternalIpAccess Impedire l'esecuzione di applicazioni con un indirizzo IP esterno e accessibili da internet. Disattiva l'accesso all'IP esterno per le VM. Puoi utilizzare solo un indirizzo IP privato interno.

GKE può utilizzare cluster privati senza indirizzi IP pubblici.

Al momento, Dataprep e Dataflow non supportano gli indirizzi IP privati.

Indirizzi IP e rete virtuale

Nome vincolo Perché è implementato Soluzione alternativa suggerita
constraints/compute.skipDefaultNetworkCreation Assicurati che sia possibile creare solo Virtual Private Cloud (VPC) gestiti dall'azienda e che vengano applicate regole di filtro o di traffico di rete. Collega le tue applicazioni alle VPC esistenti della tua organizzazione. Le VPC create automaticamente per impostazione predefinita non vengono implementate per i nuovi progetti.
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 tentare di eliminare una rete VPC condivisa. Assicurati di scegliere come target la risorsa corretta per l'eliminazione.
constraints/sql.restrictPublicIp Impedisci alle istanze Cloud SQL di funzionare con un indirizzo IP esterno e di essere accessibili da internet. Non configurare l'istanza Cloud SQL in modo che utilizzi un indirizzo IP pubblico esterno.

In alternativa, configura l'istanza Cloud SQL in modo da utilizzare 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 esposte, quindi impediscine l'esportazione. Effettua l'autenticazione utilizzando un' alternativa più sicura alle chiavi degli account di servizio.
constraints/storage.uniformBucketLevelAccess Riduci al minimo il rischio che vengano applicate autorizzazioni errate o incoerenti ai bucket di archiviazione consentendo solo l'utilizzo di Identity and Access Management (IAM). Attiva l'accesso uniforme a livello di bucket per proteggere il tuo bucket Cloud Storage.
constraints/iam.allowedPolicyMemberDomains Limita l'accesso alle risorse Google Cloud solo ai domini approvati. Utilizza un account all'interno di uno dei domini approvati. Esistono altri problemi noti relativi a questo vincolo.

Esempi di errori di risposta dell'API

Nell'esempio precedente di limitazione degli indirizzi IP pubblici esterni con Cloud SQL, una violazione delle norme fa sì che l'API restituisca un errore. I seguenti esempi più dettagliati mostrano la risposta dell'API che indica quale vincolo causa l'errore della richiesta. Esamina le tue risposte API per comprendere il motivo degli errori di implementazione delle applicazioni.

Errore 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 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 a livello di cartella o organizzazione. A seconda dei tuoi ruoli di accesso, potresti non avere visibilità sulle norme applicate ai livelli superiori della gerarchia per sapere dove viene applicato il vincolo violato.

Per visualizzare le norme o le eccezioni applicate al progetto, utilizza il comando gcloud org-policies list:

gcloud org-policies list --project=PROJECT_ID

Sostituisci PROJECT_ID con il progetto per cui vuoi visualizzare le norme applicate.

Per ulteriori informazioni su un criterio applicato, usa il comando gcloud org-policies describe. Fornisci il nome della norma da descrivere e il tuo ID progetto con il parametro --project:

gcloud org-policies describe POLICY_NAME \
  --project=PROJECT_ID

Sostituisci quanto segue:

  • POLICY_NAME: il nome dei criteri dell'organizzazione

  • PROJECT_ID: il progetto per cui vuoi visualizzare le norme applicate

Passaggi successivi

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

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