Google consiglia di utilizzare i metodi firewallPolicies
per configurare
i criteri Cloud Next Generation Firewall. Questo documento ti guida nella migrazione delle configurazioni Terraform per utilizzare i metodi firewallPolicies anziché i metodi organizationSecurityPolicies.
I metodi firewallPolicies
forniscono opzioni di gestione dell'organizzazione con controlli granulari. Ti consigliamo i metodi firewallPolicies
per la gestione delle risorse utilizzando Terraform. Questo documento presuppone che tu conosca le best practice di Terraform e le operazioni di base di Terraform.
Le policy firewall consentono di raggruppare diverse regole firewall che possono negare o consentire esplicitamente le connessioni. Per ulteriori informazioni sulle policy firewall, consulta Policy firewall.
Vantaggi della migrazione ai metodi firewallPolicies
I metodi firewallPolicies
offrono un'esperienza firewall coerente in tutta la
gerarchia delle risorseGoogle Cloud e offrono numerosi vantaggi operativi.
Maggiore sicurezza dell'organizzazione: i metodi
firewallPolicies
applicano la sicurezza dell'organizzazione utilizzando controlli avanzati delle autorizzazioni di Identity and Access Management (IAM).Facilità di operazioni: i metodi
firewallPolicies
supportano l'utilizzo di funzionalità avanzate, come oggetti di nome di dominio completo (FQDN), oggetti di geolocalizzazione, rilevamento delle minacce, prevenzione delle intrusioni e gruppi di indirizzi, per facilitare e rendere più efficienti le operazioni.
Come funziona la migrazione
Prima di iniziare il processo di migrazione, devi completare i seguenti passaggi, descritti nella sezione Prima di iniziare:
- Assicurati di utilizzare la versione 4.0.0 o successive del provider Terraform per Google Cloud.
- Assicurati che lo stato di Terraform corrisponda alla configurazione attuale.
- Identifica le risorse che rientrano nell'ambito della migrazione, inclusi norme, regole e associazioni.
- Prepara i comandi per importare le nuove risorse
firewallPolicies
nello stato Terraform manualmente o utilizzando uno script automatizzato. - Esamina le procedure di backup e ripristino consigliate per la tua versione di Terraform e crea un backup del tuo stato Terraform attuale.
Il processo di riconfigurazione di Terraform per la migrazione delle risorse
organizationSecurityPolicies
prevede i seguenti passaggi:
Rimuovi le risorse esistenti dallo stato Terraform. Rimuovi le risorse
organizationSecurityPolicies
esistenti dallo stato di Terraform.Aggiorna la configurazione Terraform. Modifica i file di configurazione di Terraform per sostituire il tipo di risorsa esistente, i nomi e gli attributi con il nuovo tipo di risorsa, i nuovi nomi e i nuovi attributi.
Importa nuove risorse nello stato di Terraform. Importa le nuove risorse
firewallPolicies
nello stato di Terraform.
Prima di iniziare
Questa sezione spiega i prerequisiti per il processo di migrazione.
Assicurati che il provider Terraform sia supportato
Assicurati di utilizzare la versione 4.0.0 o successive del provider Terraform per Google Cloud, che include le seguenti risorse del registro Terraform:
- google_compute_firewall_policy
- google_compute_firewall_policy_association
- google_compute_firewall_policy_rule
Assicurati che lo stato di Terraform sia aggiornato
Esegui il seguente comando Terraform per verificare che lo stato di Terraform corrisponda alla configurazione attuale.
terraform plan
Per evitare incongruenze, ti consigliamo di applicare eventuali modifiche o azioni in attesa prima di procedere con la procedura di migrazione.
Identifica le risorse di cui eseguire la migrazione
Esegui il seguente comando Terraform per generare un elenco di risorse che rientrano nell'ambito della migrazione, incluse norme, regole e associazioni.
terraform state list | grep ^google_compute_organization_security_policy
L'output è simile al seguente:
google_compute_organization_security_policy.policy google_compute_organization_security_policy_association.association["folders/45678"] google_compute_organization_security_policy_rule.rule["allow-inbound-ssh"] google_compute_organization_security_policy_rule.rule["deny-all-egress"]
Hai bisogno di queste risorse per eseguire la migrazione ai metodi firewallPolicies
. Salvali
per un secondo momento.
Preparare i comandi di importazione utilizzando uno script automatico
Per evitare errori o configurazioni mancanti durante la migrazione, ti consigliamo di utilizzare
uno script automatizzato per generare i comandi necessari per importare
le risorse firewallPolicies
nello stato Terraform.
Esegui il seguente script Terraform per svolgere queste attività:
- Genera nuovi indirizzi delle risorse da quelli esistenti.
- Recupera gli identificatori di risorsa (o ID risorsa) dagli indirizzi delle risorse esistenti.
- Genera identificatori di importazione (o ID importazione) dagli ID risorsa.
- Visualizza i comandi di importazione per tutte le nuove risorse
firewallPolicies
.
terraform state list | grep ^google_compute_organization_security_policy | while read -r resource_address; do # Generate the new resource address for google_compute_firewall_policy new_address=$(echo "$resource_address" | sed 's/google_compute_organization_security_policy/google_compute_firewall_policy/') # Get the full resource ID from terraform state and remove quotes resource_id=$(echo "$resource_address.id" | terraform console | tr -d '"') # Use awk to parse the resource_id and generate the correct import identifier import_id=$(echo "$resource_id" | awk -F'/' ' /association/ { split($0, a, "/association/"); assoc_name = a[2]; gsub(/\//, "%2F", assoc_name); print $4 "/" assoc_name; next } /priority/ { print $4 "/" $6; next } { print $4 } ') # Print the final import command echo "terraform import '$new_address' '$import_id'" done
Per importare le risorse, devi utilizzare l'output di questo script. Salva l'output per un secondo momento.
Preparare manualmente i comandi di importazione
Se l'approccio automatizzato non è fattibile, puoi generare i comandi per
importare manualmente le risorse firewallPolicies
. Puoi utilizzare il comando
terraform console
per ottenere gli identificatori (ID) delle risorse.
Il seguente comando Terraform mostra l'ID risorsa della risorsa google_compute_organization_security_policy.policy
:
echo google_compute_organization_security_policy.policy.id | terraform console
L'output è simile al seguente:
"locations/global/securityPolicies/12345"
Allo stesso modo, ottieni gli ID risorsa per le altre risorse identificate nella sezione Identifica le risorse di cui eseguire la migrazione.
In alternativa, puoi utilizzare il seguente comando Terraform per ottenere gli ID risorsa di tutte le risorse identificate insieme:
terraform state list | grep ^google_compute_organization_security_policy | while read -r line; do echo "$line".id | terraform console; done
L'output è simile al seguente:
"locations/global/securityPolicies/12345" "locations/global/securityPolicies/12345/association/locations/global/securityPolicies/23456-folders/56789" "locations/global/securityPolicies/12345/priority/1000" "locations/global/securityPolicies/12345/priority/65535"
Per importare le risorse firewallPolicies
, devi disporre dei relativi ID di importazione. Gli ID
di importazione sono costituiti da un identificatore numerico chiamato numero di norma, un nome
di associazione e un numero di priorità della regola, come descritto in questa sezione.
L'identificatore numerico dopo il terzo carattere barra (/) è il numero di policy, che rappresenta l'ID importazione per le policy. La seguente tabella mostra un esempio di ID risorsa e ID importazione per un criterio.
ID risorsa ID importazione "locations/global/securityPolicies/12345"
12345
Il numero di polizza insieme al nome dell'associazione rappresenta l'ID importazione per le associazioni. Un nome di associazione è la parte dell'ID risorsa visualizzata dopo l'elemento
/association/
.Sostituisci qualsiasi carattere barra (/) nel nome dell'associazione con
%2F
per consentire al comandoterraform import
di interpretare il nome dell'associazione come una singola entità. La seguente tabella mostra esempi di ID risorsa e ID importazione per le associazioni.ID risorsa ID importazione "locations/global/securityPolicies/12345/association/assoc-name"
12345/assoc-name
"locations/global/securityPolicies/12345/association/locations/global/securityPolicies/23456-folders/56789"
12345/locations%2Fglobal%2FsecurityPolicies%2F23456-folders%2F56789
Il numero di policy insieme al numero di priorità della regola rappresenta l'ID importazione per le regole. La seguente tabella mostra un esempio di ID risorsa e ID importazione per una regola.
ID risorsa ID importazione "locations/global/securityPolicies/12345/priority/1000"
12345/1000
Per importare le risorse firewallPolicies
, devi disporre dei nomi delle istanze delle risorse aggiornati. Genera i nomi delle istanze delle risorse sostituendo il prefisso
google_compute_organization_security_policy
con google_compute_firewall_policy
per tutte le risorse identificate nella sezione Identifica le risorse da migrare. Il seguente elenco mostra un esempio dei nomi delle istanze di risorse aggiornate:
google_compute_firewall_policy.policy google_compute_firewall_policy_association.association["folders/45678"] google_compute_firewall_policy_rule.rule["allow-inbound-ssh"] google_compute_firewall_policy_rule.rule["deny-all-egress"]
Combina i nomi delle istanze delle risorse con gli ID importazione associati per ottenere
i comandi terraform import
. Il seguente elenco mostra un esempio dei
comandi terraform import
:
terraform import 'google_compute_firewall_policy.policy' '12345' terraform import 'google_compute_firewall_policy_association.association["folders/23456"]' '12345/locations%2Fglobal%2FsecurityPolicies%2F23456-folders%2F56789' terraform import 'google_compute_firewall_policy_rule.rule["allow-inbound-ssh"]' '12345/1000' terraform import 'google_compute_firewall_policy_rule.rule["deny-all-egress"]' '12345/65535'
Salva questi comandi di importazione per riferimento futuro.
Eseguire il backup dello stato di Terraform
Prima di procedere con il processo di migrazione, ti consigliamo di creare un backup dello stato di Terraform. Utilizza il seguente comando Terraform per creare
un backup nel file terraform.tfstate.backup
.
terraform state pull > terraform.tfstate.backup
Se modifichi lo stato di Terraform in modo non intenzionale, puoi utilizzare il file di backup terraform.tfstate.backup
per ripristinare lo stato originale di Terraform utilizzando il seguente comando:
terraform state push terraform.tfstate.backup
Esegui la migrazione delle risorse organizationSecurityPolicies
Questa sezione spiega la procedura per eseguire la migrazione delle configurazioni Terraform
dai metodi organizationSecurityPolicies
ai metodi firewallPolicies
.
Rimuovi le risorse esistenti dallo stato Terraform
Per rimuovere le risorse organizationSecurityPolicies
trovate nella sezione
Identifica le risorse da migrare dallo stato di Terraform, esegui il seguente comando Terraform.
terraform state list | grep ^google_compute_organization_security_policy | while read -r resource; do terraform state rm "$resource" done
Aggiorna la configurazione Terraform
Per aggiornare il file di configurazione Terraform, individua le definizioni delle risorse che hai trovato nella sezione Identificare le risorse da migrare. Utilizza il seguente comando per trovare le definizioni.
grep -r google_compute_organization_security_policy .
Ad esempio, il file di configurazione Terraform definisce il criterio
google_compute_organization_security_policy.policy
nel seguente modo:
resource "google_compute_organization_security_policy" "policy" { … }
Utilizza la seguente tabella per modificare la definizione di una risorsa policy di sicurezza dell'organizzazione per creare una nuova risorsa policy firewall gerarchica.
Risorsa Terraform esistente | Nuova risorsa Terraform | |
---|---|---|
Nome risorsa | google_compute_organization_security_policy | google_compute_firewall_policy |
Nome del campo nel criterio | display_name |
short_name |
Utilizza la seguente tabella per modificare la definizione di una risorsa di associazione di policy di sicurezza dell'organizzazione per creare una nuova risorsa di associazione di policy firewall gerarchica.
Risorsa Terraform esistente | Nuova risorsa Terraform | |
---|---|---|
Nome risorsa | google_compute_organization_security_policy_association | google_compute_firewall_policy_association |
Nome del campo nell'associazione | policy_id |
firewall_policy |
Nome del campo nell'associazione | attachment_id |
attachment_target |
Utilizza la seguente tabella per modificare la definizione di una risorsa regola dei criteri di sicurezza dell'organizzazione per creare una nuova risorsa regola dei criteri firewall gerarchici.
Risorsa Terraform esistente | Nuova risorsa Terraform | |
---|---|---|
Nome risorsa | google_compute_organization_security_policy_rule | google_compute_firewall_policy_rule |
Nome del campo nella regola | policy_id (ID criterio di sicurezza) |
firewall_policy |
Nome del campo rimosso dalla regola | versioned_expr |
— (il campo non esiste) |
Definizione dell'oggetto match :
Rimuovi il set config e modifica layer4_config in layer4_configs |
match { config { src_ip_ranges = SRC_IP_RANGES dest_ip_ranges = DEST_IP_RANGES layer4_config { ip_protocol = IP_PROTOCOL ports = [PORT1, PORT2] } layer4_config { ip_protocol = IP_PROTOCOL } } } |
match { src_ip_ranges = SRC_IP_RANGES dest_ip_ranges = DEST_IP_RANGES layer4_configs { ip_protocol = IP_PROTOCOL ports = [PORT1, PORT2] } layer4_configs { ip_protocol = IP_PROTOCOL } } |
Nome del campo nella regola | layer4_config |
layer4_configs |
Puoi utilizzare il seguente comando Terraform per verificare se la configurazione Terraform modificata è valida:
terraform validate
Importa le risorse nello stato di Terraform
Per importare le risorse firewallPolicies
nel file di configurazione Terraform,
esegui i comandi di importazione Terraform che hai generato nella sezione
Prepara i comandi di importazione utilizzando uno script automatizzato
o Prepara i comandi di importazione manualmente.
Dopo aver importato le risorse firewallPolicies
, Terraform vi accede utilizzando
i metodi firewallPolicies.
Verifica la configurazione di Terraform e correggi le discrepanze
Esegui il seguente comando Terraform per verificare la presenza di azioni.
terraform plan
Poiché la migrazione non modifica le risorse Google Cloud sottostanti, il piano creato da Terraform non deve contenere azioni.
Ad esempio, nel seguente output ottenuto eseguendo il comando terraform plan
, le azioni di Terraform indicano che name
nella risorsa google_compute_firewall_policy_association
deve essere aggiornato.
Terraform will perform the following actions: # google_compute_firewall_policy_association.association["folders/23456"] must be replaced -/+ resource "google_compute_firewall_policy_association" "association" { ~ firewall_policy = "12345" -> "locations/global/firewallPolicies/12345" ~ id = "locations/global/firewallPolicies/12345/associations/locations%2Fglobal%2FsecurityPolicies%2F12345-folders%2F23456" -> (known after apply) ~ name = "locations/global/securityPolicies/12345-folders/23456" -> "locations/global/firewallPolicies/12345-folders/23456" # forces replacement + short_name = (known after apply) # (1 unchanged attribute hidden) }
In questo caso, devi verificare e aggiornare il file di configurazione Terraform in modo che l'attributo name
sia coerente con il nome già installato.
Puoi configurare Terraform in modo che modifichi il valore name
previsto nella risorsa google_compute_firewall_policy_association
con il suo valore originale locations/global/securityPolicies/12345-folders/23456
sostituendo il campo name
nella configurazione nel seguente modo:
name = "${replace(local.policy_id, "firewallPolicies", "securityPolicies")}-${each.value}"
La modifica precedente utilizza la funzione di sostituzione per aggiornare il valore di
local.policy_id
a securityPolicies
anziché firewallPolicies
. Poiché
Terraform ora prevede locations/global/securityPolicies/12345-folders/23456
per l'attributo name
, l'esecuzione di terraform plan
non mostra più l'azione di Terraform
relativa all'attributo name
.
Se il comando terraform plan
non indica modifiche o azioni Terraform, la migrazione è completata.
Passaggi successivi
- Scopri di più sui metodi firewallPolicies.