Controlli preventivi per configurazioni delle risorse accettabili

Last reviewed 2023-12-20 UTC

Ti consigliamo di definire vincoli dei criteri che impongano configurazioni delle risorse accettabili e impediscano configurazioni rischiose. Il blueprint utilizza una combinazione di vincoli dei criteri dell'organizzazione e convalida dell'infrastruttura come codice (IaC) nella pipeline. Questi controlli impediscono la creazione di risorse che non rispettano le linee guida dei tuoi criteri. L'applicazione di questi controlli all'inizio della progettazione e della creazione dei carichi di lavoro ti aiuta a evitare di dover eseguire in un secondo momento attività di correzione.

Vincoli dei criteri dell'organizzazione

Il servizio Criteri dell'organizzazione applica vincoli per garantire che determinate configurazioni delle risorse non possano essere create nella tua organizzazione Google Cloud, nemmeno da un utente con un ruolo IAM sufficientemente privilegiato.

Il blueprint applica i criteri al nodo dell'organizzazione in modo che questi controlli vengano ereditati da tutte le cartelle e da tutti i progetti all'interno dell'organizzazione. Questo insieme di criteri è progettato per impedire determinate configurazioni ad alto rischio, come l'esposizione di una VM alla rete internet pubblica o la concessione dell'accesso pubblico ai bucket di archiviazione, a meno che non consenta deliberatamente un'eccezione al criterio.

La tabella seguente illustra i limiti dei criteri dell'organizzazione implementati nel blueprint:

Vincolo dei criteri dell'organizzazione Descrizione

compute.disableNestedVirtualization

La virtualizzazione nidificata sulle VM di Compute Engine può aggirare il monitoraggio e altri strumenti di sicurezza per le VM se non è configurata correttamente. Questo vincolo impedisce la creazione di virtualizzazione nidificata.

compute.disableSerialPortAccess

I ruoli IAM come compute.instanceAdmin consentono l'accesso privilegiato alla porta seriale di un'istanza utilizzando le chiavi SSH. Se la chiave SSH è esposta, un malintenzionato potrebbe accedere alla porta seriale e bypassare i controlli di rete e firewall. Questo vincolo impedisce l'accesso alla porta seriale.

compute.disableVpcExternalIpv6

Le subnet IPv6 esterne possono essere esposte ad accessi internet non autorizzati se sono configurate in modo errato. Questo vincolo impedisce la creazione di subnet IPv6 esterne.

compute.requireOsLogin

Il comportamento predefinito di impostazione delle chiavi SSH nei metadati può consentire l'accesso remoto non autorizzato alle VM se le chiavi sono esposte. Questo vincolo impone l'utilizzo di OS Login anziché di chiavi SSH basate su metadati.

compute.restrictProtocolForwardingCreationForTypes

L'inoltro del protocollo VM per gli indirizzi IP esterni può comportare un traffico in uscita su internet non autorizzato se l'inoltro non è configurato correttamente. Questo vincolo consente di inoltrare il protocollo VM solo per gli indirizzi interni.

compute.restrictXpnProjectLienRemoval

L'eliminazione di un progetto host VPC condiviso può causare interruzioni in tutti i progetti di servizio che utilizzano risorse di rete. Questo vincolo impedisce l'eliminazione accidentale o dannosa dei progetti host con VPC condiviso impedendo la rimozione del blocco su questi progetti.

compute.setNewProjectDefaultToZonalDNSOnly

Un'impostazione precedente per il DNS interno globale (a livello di progetto) non è consigliata perché riduce la disponibilità del servizio. Questo vincolo impedisce l'utilizzo dell'impostazione precedente.

compute.skipDefaultNetworkCreation

In ogni nuovo progetto che attiva l'API Compute Engine vengono create una rete VPC predefinita e regole firewall VPC predefinite eccessivamente permissive. Questo vincolo ignora la creazione della rete predefinita e delle regole firewall VPC predefinite.

compute.vmExternalIpAccess

Per impostazione predefinita, viene creata una VM con un indirizzo IPv4 esterno che può comportare l'accesso non autorizzato a internet. Questo vincolo configura una lista consentita vuota di indirizzi IP esterni che la VM può utilizzare e nega tutti gli altri.

essentialcontacts.allowedContactDomains

Per impostazione predefinita, Contatti necessari può essere configurato per inviare notifiche sul tuo dominio a qualsiasi altro dominio. Questo vincolo impone che solo gli indirizzi email dei domini approvati possano essere impostati come destinatari per i Contatti necessari.

iam.allowedPolicyMemberDomains

Per impostazione predefinita, i criteri di autorizzazione possono essere concessi a qualsiasi Account Google, inclusi gli account non gestiti e quelli appartenenti a organizzazioni esterne. Questo vincolo garantisce che i criteri di autorizzazione nella tua organizzazione possano essere concessi solo agli account gestiti del tuo dominio. Se vuoi, puoi consentire domini aggiuntivi.

iam.automaticIamGrantsForDefaultServiceAccounts

Per impostazione predefinita, ai service account predefiniti vengono concessi automaticamente ruoli eccessivamente permissivi. Questo vincolo impedisce le concessioni automatiche dei ruoli IAM agli account di servizio predefiniti.

iam.disableServiceAccountKeyCreation

Le chiavi dei service account sono credenziali permanenti ad alto rischio e, nella maggior parte dei casi, è possibile utilizzare un'alternativa più sicura alle account di servizio account. Questo vincolo impedisce la creazione di chiavi dell'account di servizio.

iam.disableServiceAccountKeyUpload

Il caricamento del materiale delle chiavi dell'account di servizio può aumentare il rischio se il materiale delle chiavi viene esposto. Questo vincolo impedisce il caricamento delle chiavi degli account di servizio.

sql.restrictAuthorizedNetworks

Le istanze Cloud SQL possono essere esposte all'accesso non autenticato a internet se sono configurate per utilizzare reti autorizzate senza un proxy di autenticazione Cloud SQL. Questa norma impedisce la configurazione delle reti autorizzate per l'accesso al database e forza l'utilizzo del proxy di autenticazione Cloud SQL.

sql.restrictPublicIp

Le istanze Cloud SQL possono essere esposte all'accesso a internet non autenticato se vengono create con indirizzi IP pubblici. Questo vincolo impedisce l'utilizzo di indirizzi IP pubblici nelle istanze Cloud SQL.

storage.uniformBucketLevelAccess

Per impostazione predefinita, è possibile accedere agli oggetti in Cloud Storage tramite gli elenchi di controllo dell'accesso (ACL) legacy anziché tramite IAM, il che può comportare controlli dell'accesso incoerenti ed esposizione accidentale in caso di configurazione errata. L'accesso ACL precedente non è interessato dal vincolo iam.allowedPolicyMemberDomains. Questo vincolo impone che l'accesso possa essere configurato solo tramite l'accesso uniforme a livello di bucket di IAM, non tramite gli ACL precedenti.

storage.publicAccessPrevention

I bucket Cloud Storage possono essere esposti all'accesso a internet non autenticato se sono configurati in modo errato. Questo vincolo impedisce gli ACL e le autorizzazioni IAM che consentono di accedere a allUsers e allAuthenticatedUsers.

Queste norme sono un punto di partenza consigliato per la maggior parte dei clienti e per la maggior parte degli scenari, ma potrebbe essere necessario modificare i vincoli delle norme dell'organizzazione per supportare determinati tipi di carichi di lavoro. Ad esempio, un carico di lavoro che utilizza un bucket Cloud Storage come backend per Cloud CDN per ospitare risorse pubbliche è bloccato da storage.publicAccessPrevention o un'app Cloud Run rivolta al pubblico che non richiede autenticazione è bloccata da iam.allowedPolicyMemberDomains. In questi casi, modifica il criterio dell'organizzazione a livello di cartella o progetto per consentire un'eccezione specifica. Puoi anche aggiungere condizionalmente vincoli ai criteri dell'organizzazione definendo un tag che concede un'eccezione o l'applicazione dei criteri, quindi applicandolo ai progetti e alle cartelle.

Per vincoli aggiuntivi, consulta i vincoli disponibili e i vincoli personalizzati.

Convalida pre-deployment dell'infrastruttura come codice

Il blueprint utilizza un approccio GitOps per gestire l'infrastruttura, il che significa che tutte le modifiche dell'infrastruttura vengono implementate tramite l'infrastruttura come codice (IaC) con controllo della versione e possono essere convalidate prima del deployment.

I criteri applicati nel blueprint definiscono le configurazioni delle risorse accettabili che possono essere implementate dalla pipeline. Se il codice inviato al tuo repository GitHub non supera i controlli dei criteri, non viene dispiegato nessuna risorsa.

Per informazioni su come vengono utilizzate le pipeline e su come vengono applicati i controlli tramite l'automazione CI/CD, consulta la metodologia di deployment.

Passaggi successivi