Questo tutorial descrive come verificare che la tua Infrastructure as Code (IaC) non violi i criteri dell'organizzazione o i rilevatori di Security Health Analytics.
Obiettivi
- Crea una postura di sicurezza.
- Eseguire il deployment della postura su un progetto.
- Controlla la presenza di violazioni in un file Terraform di esempio.
- Correggi le violazioni nel file Terraform e controlla di nuovo il file per verificare la correzione.
Prima di iniziare
Configurare le autorizzazioni
-
Assicurati di disporre dei seguenti ruoli nell'organizzazione: Project Creator and Security Posture Admin
Verifica i ruoli
-
Nella console Google Cloud, vai alla pagina IAM.
Vai a IAM - Seleziona l'organizzazione.
-
Nella colonna Entità, individua la riga contenente il tuo indirizzo email.
Se il tuo indirizzo email non è in questa colonna, significa che non disponi di alcun ruolo.
- Nella colonna Ruolo per la riga contenente il tuo indirizzo email, controlla se l'elenco dei ruoli include quelli richiesti.
Concedi i ruoli
-
Nella console Google Cloud, vai alla pagina IAM.
Vai a IAM - Seleziona l'organizzazione.
- Fai clic su Concedi l'accesso.
- Nel campo Nuove entità, inserisci il tuo indirizzo email.
- Nell'elenco Seleziona un ruolo, scegli un ruolo.
- Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ciascun ruolo aggiuntivo.
- Fai clic su Salva.
-
Configura Cloud Shell
-
Nella console Google Cloud, attiva Cloud Shell.
Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.
- Trova l'ID organizzazione:
gcloud organizations list
prepara l'ambiente
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Crea un progetto Google Cloud:
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_ID
con un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_ID
con il nome del tuo progetto Google Cloud.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Security posture service and Security Command Center management.
gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Crea un progetto Google Cloud:
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_ID
con un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_ID
con il nome del tuo progetto Google Cloud.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Security posture service and Security Command Center management.
gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - Copia l'ID progetto:
gcloud projects describe PROJECT_ID
- Inizializza Terraform:
terraform init
Crea ed esegui il deployment di una postura
In Cloud Shell, avvia l'editor di Cloud Shell. Per avviare l'editor, fai clic su Apri editor sulla barra degli strumenti della finestra di Cloud Shell.
Crea un file YAML denominato
example-standard.yaml
.Incolla il seguente codice nel file:
name: organizations/ORGANIZATION_ID/locations/global/postures/example-standard state: ACTIVE policySets: - policySetId: policySet1 policies: - constraint: orgPolicyConstraintCustom: customConstraint: actionType: ALLOW condition: "resource.initialNodeCount == 3" description: Set initial node count to be exactly 3. displayName: fixedNodeCount methodTypes: - CREATE name: organizations/ORGANIZATION_ID/customConstraints/custom.fixedNodeCount resourceTypes: - container.googleapis.com/NodePool policyRules: - enforce: true policyId: fixedNodeCount - constraint: securityHealthAnalyticsCustomModule: config: customOutput: {} description: Set MTU for a network to be exactly 1000. predicate: expression: "!(resource.mtu == 1000)" recommendation: Only create networks whose MTU is 1000. resourceSelector: resourceTypes: - compute.googleapis.com/Network severity: HIGH displayName: fixedMTU moduleEnablementState: ENABLED policyId: fixedMTU - constraint: securityHealthAnalyticsModule: moduleEnablementState: ENABLED moduleName: BUCKET_POLICY_ONLY_DISABLED policyId: bucket_policy_only_disabled - constraint: securityHealthAnalyticsModule: moduleEnablementState: ENABLED moduleName: BUCKET_LOGGING_DISABLED policyId: bucket_logging_disabled
Sostituisci
ORGANIZATION_ID
con l'ID organizzazione.In Cloud Shell, crea la postura:
gcloud scc postures create organizations/ORGANIZATION_ID/locations/global/postures/example-standard --posture-from-file=example-standard.yaml
Copia l'ID revisione postura generato dal comando.
Esegui il deployment della postura nel progetto:
gcloud scc posture-deployments create organizations/ORGANIZATION_ID/locations/global/postureDeployments/example-standard \ --posture-name=organizations/ORGANIZATION_ID/locations/global/postures/example-standard \ --posture-revision-id="POSTURE_REVISION_ID" \ --target-resource=projects/PROJECT_ID
Sostituisci quanto segue:
ORGANIZATION_ID
: l'ID della tua organizzazione.POSTURE REVISION_ID
: l'ID revisione della postura che hai copiato.PROJECT_ID
: il tuo ID progetto.
Crea il file Terraform ed esegui la convalida
In Cloud Shell, avvia l'editor di Cloud Shell.
Crea un file Terraform denominato
main.tf
.Incolla il seguente codice nel file:
terraform { required_providers { google = { source = "hashicorp/google" } } } provider "google" { region = "us-central1" zone = "us-central1-c" } resource "google_compute_network" "example_network"{ name = "example-network-1" delete_default_routes_on_create = false auto_create_subnetworks = false routing_mode = "REGIONAL" mtu = 100 project = "PROJECT_ID" } resource "google_container_node_pool" "example_node_pool" { name = "example-node-pool-1" cluster = "example-cluster-1" project = "PROJECT_ID" initial_node_count = 2 node_config { preemptible = true machine_type = "e2-medium" } } resource "google_storage_bucket" "example_bucket" { name = "example-bucket-1" location = "EU" force_destroy = true project = "PROJECT_ID" uniform_bucket_level_access = false }
Sostituisci
PROJECT_ID
con l'ID del progetto che hai creato.In Cloud Shell, crea il file del piano Terraform e convertilo nel formato JSON:
terraform plan -out main.plan terraform show -json main.plan > mainplan.json
Crea il report di convalida IaC per
mainplan.json
:gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
Questo comando restituisce un report di convalida IaC che descrive le seguenti violazioni:
- Il
mtu
diexample_network
non è 1000. - Il valore di
initial_node_count
perexample_node_pool
non è 3. - Per
example_bucket
non è abilitato l'accesso uniforme a livello di bucket. - Il logging non è abilitato per
example_bucket
.
- Il
Risolvi le violazioni
In Cloud Shell, avvia l'editor di Cloud Shell.
Aggiorna il file
main.tf
apportando le seguenti modifiche:terraform { required_providers { google = { source = "hashicorp/google" } } } provider "google" { region = "us-central1" zone = "us-central1-c" } resource "google_compute_network" "example_network"{ name = "example-network-1" delete_default_routes_on_create = false auto_create_subnetworks = false routing_mode = "REGIONAL" mtu = 1000 project = "PROJECT_ID" } resource "google_container_node_pool" "example_node_pool" { name = "example-node-pool-1" cluster = "example-cluster-1" project = "PROJECT_ID" initial_node_count = 3 node_config { preemptible = true machine_type = "e2-medium" } } resource "google_storage_bucket" "example_bucket" { name = "example-bucket-1" location = "EU" force_destroy = true project = "PROJECT_ID" uniform_bucket_level_access = true logging { log_bucket = "my-unique-logging-bucket" // Create a separate bucket for logs log_object_prefix = "tf-logs/" // Optional prefix for better structure } }
Sostituisci
PROJECT_ID
con l'ID del progetto che hai creato.In Cloud Shell, crea il file del piano Terraform e convertilo in formato JSON:
terraform plan -out main.plan terraform show -json main.plan > mainplan.json
Ricrea il report di convalida IaC per
mainplan.json
:gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
Esegui la pulizia
Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
Elimina un progetto Google Cloud:
gcloud projects delete PROJECT_ID
Passaggi successivi
- Consulta Convalida il tuo IaC in base ai criteri della tua organizzazione.
- Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Visita il nostro Cloud Architecture Center.