Esegui la migrazione delle risorse Terraform da organizationSecurityPolicies a firewallPolicies

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:

  1. Rimuovi le risorse esistenti dallo stato Terraform. Rimuovi le risorse organizationSecurityPolicies esistenti dallo stato di Terraform.

  2. 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.

  3. 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:

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 comando terraform 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