Migrar recursos do Terraform de organizationSecurityPolicies para firewallPolicies

O Google recomenda o uso dos métodos firewallPolicies para configurar políticas do Cloud Next Generation Firewall. Este documento orienta você na migração das suas configurações do Terraform para usar os firewallPolicies em vez dos organizationSecurityPolicies.

Os métodos firewallPolicies oferecem opções de gerenciamento organizacional com controles detalhados. Recomendamos os métodos firewallPolicies para gerenciamento de recursos usando o Terraform. Este documento pressupõe que você esteja familiarizado com as práticas recomendadas e as operações básicas do Terraform.

As políticas de firewall permitem agrupar várias regras de firewall que podem negar ou permitir conexões explicitamente. Para mais informações sobre políticas de firewall, consulte Políticas e regras de firewall.

Benefícios da migração para métodos firewallPolicies

Os métodos firewallPolicies oferecem uma experiência de firewall consistente em toda a Cloud de Confiance hierarquia de recursos e oferecem vários benefícios operacionais.

  • Segurança organizacional aprimorada: os métodos firewallPolicies aplicam a segurança da organização usando controles avançados de permissão do Identity and Access Management (IAM) .

  • Facilidade de operações: os métodos firewallPolicies oferecem suporte ao uso de recursos avançados , como objetos de nome de domínio totalmente qualificado (FQDN), objetos de geolocalização , detecção de ameaças, prevenção de invasões e grupos de endereços, para facilitar e aumentar a eficiência operacional.

Como a migração funciona

Antes de iniciar o processo de migração, conclua as etapas a seguir, descritas na seção Antes de começar:

  • Verifique se você está usando a versão 6.16.0 ou mais recente do provedor do Terraform para Cloud de Confiance.
  • Verifique se o estado do Terraform corresponde à configuração atual.
  • Identifique os recursos que estão no escopo da migração, incluindo políticas, regras e associações.
  • Prepare comandos para importar os novos recursos firewallPolicies para o estado do Terraform manualmente ou usando um script automatizado.
  • Analise os procedimentos recomendados de backup e recuperação para sua versão do Terraform e crie um backup do estado atual do Terraform.

O processo de reconfiguração do Terraform para migrar os recursos organizationSecurityPolicies inclui estas etapas:

  1. Remova os recursos atuais do estado do Terraform. Remova os recursos organizationSecurityPolicies atuais do estado do Terraform.

  2. Atualize a configuração do Terraform. Edite os arquivos de configuração do Terraform para substituir o tipo, os nomes e os atributos de recursos atuais pelo novo tipo, nomes e atributos de recursos.

  3. Importe novos recursos para o estado do Terraform. Importe os novos recursos firewallPolicies para o estado do Terraform.

Antes de começar

Esta seção explica os pré-requisitos para o processo de migração.

Verifique se o provedor do Terraform é compatível

Recomendamos o uso da versão 6.16.0 ou mais recente do provedor do Terraform para Cloud de Confiance para a migração. Versões anteriores podem falhar na importação em determinadas configurações, como aquelas com barras nos nomes de associação.

Após a migração, use a versão 4.0.0 ou mais recente, que inclui os seguintes recursos do registro do Terraform:

Verifique se o estado do Terraform está atualizado

Execute o comando do Terraform a seguir para verificar se o estado do Terraform corresponde à configuração atual.

terraform plan

Para evitar inconsistências, recomendamos que você aplique as mudanças ou ações pendentes antes de prosseguir com o processo de migração.

Identificar os recursos que serão migrados

Execute o comando do Terraform a seguir para gerar uma lista de recursos que estão no escopo da migração, incluindo políticas, regras e associações.

terraform state list | grep ^google_compute_organization_security_policy

O resultado será assim:

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"]

Você precisa desses recursos para migrar para os métodos firewallPolicies. Salve-os para mais tarde.

Preparar comandos de importação usando um script automatizado

Para evitar erros ou configurações perdidas durante a migração, recomendamos o uso de um script automatizado para gerar os comandos necessários para importar os recursos firewallPolicies para o estado do Terraform.

Execute o script do Terraform a seguir para realizar essas tarefas:

  • Gerar novos endereços de recursos dos endereços de recursos atuais.
  • Receber identificadores de recursos (ou IDs de recursos) dos endereços de recursos atuais.
  • Gerar identificadores de importação (ou IDs de importação) dos IDs de recursos.
  • Mostrar os comandos de importação para todos os novos recursos 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

Você precisa da saída desse script para importar os recursos. Salve a saída para mais tarde.

Preparar comandos de importação manualmente

Se a abordagem automatizada não for viável, você poderá gerar os comandos para importar os recursos firewallPolicies manualmente. Você pode usar o comando terraform console para receber os identificadores (IDs) dos recursos.

O comando do Terraform a seguir mostra o ID do recurso google_compute_organization_security_policy.policy:

echo google_compute_organization_security_policy.policy.id | terraform console

O resultado será assim:

"locations/global/securityPolicies/12345"

Da mesma forma, receba os IDs de recursos para os outros recursos identificados na seção Identificar recursos a serem migrados.

Como alternativa, você pode usar o comando do Terraform a seguir para receber os IDs de recursos de todos os recursos identificados juntos:

terraform state list | grep ^google_compute_organization_security_policy | while read -r line; do echo "$line".id | terraform console; done

O resultado será assim:

"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"

Para importar os recursos firewallPolicies, você precisa dos IDs de importação deles. Os IDs de importação são compostos por um identificador numérico chamado número de política, um nome de associação e um número de prioridade de regra, conforme descrito nesta seção.

  • O identificador numérico após o terceiro caractere de barra (/) é o número da política, que representa o ID de importação das políticas. A tabela a seguir mostra um exemplo de ID de recurso e um ID de importação para uma política.

    Código do recurso ID de importação
    "locations/global/securityPolicies/12345" 12345
  • O número da política e o nome da associação representam o ID de importação das associações. Um nome de associação é a parte do ID do recurso mostrado após o elemento /association/.

    Substitua qualquer caractere de barra (/) no nome da associação por %2F para permitir que o comando terraform import interprete o nome da associação como uma única entidade. A tabela a seguir mostra exemplos de ID de recurso e ID de importação para associações.

    Código do recurso ID de importação
    "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
  • O número da política e o número de prioridade da regra representam o ID de importação das regras. A tabela a seguir mostra um exemplo de ID de recurso e um ID de importação para uma regra.

    Código do recurso ID de importação
    "locations/global/securityPolicies/12345/priority/1000" 12345/1000

Para importar os recursos firewallPolicies, você precisa dos nomes de instância de recursos atualizados. Gere os nomes de instância de recursos substituindo o prefixo google_compute_organization_security_policy por google_compute_firewall_policy para todos os recursos identificados na seção Identificar recursos a serem migrados. A lista a seguir mostra um exemplo dos nomes de instância de recursos atualizados:

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"]

Combine os nomes de instância de recursos com os IDs de importação associados para receber os comandos terraform import. A lista a seguir mostra um exemplo dos comandos 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'

Salve esses comandos de importação para referência futura.

Fazer backup do estado do Terraform

Antes de prosseguir com o processo de migração, recomendamos que você crie um backup do estado do Terraform. Use o comando do Terraform a seguir para criar um backup no arquivo terraform.tfstate.backup.

terraform state pull > terraform.tfstate.backup

Se você mudar o estado do Terraform de maneiras não intencionais, poderá usar o arquivo de backup terraform.tfstate.backup para restaurar o estado original do Terraform usando o comando a seguir:

terraform state push terraform.tfstate.backup

Migrar recursos organizationSecurityPolicies

Esta seção explica o procedimento para migrar as configurações do Terraform dos métodos organizationSecurityPolicies para os métodos firewallPolicies.

Remover os recursos atuais do estado do Terraform

Para remover os recursos organizationSecurityPolicies encontrados na Identificar recursos a serem migrados seção do estado do Terraform, execute o comando do Terraform a seguir.

terraform state list | grep ^google_compute_organization_security_policy | while read -r resource; do
  terraform state rm "$resource"
done

Atualizar a configuração do Terraform

Para atualizar o arquivo de configuração do Terraform, encontre as definições dos recursos encontrados na seção Identificar recursos a serem migrados. Use o comando a seguir para encontrar as definições.

grep -r google_compute_organization_security_policy .

Por exemplo, o arquivo de configuração do Terraform define a política google_compute_organization_security_policy.policy da seguinte maneira:

resource "google_compute_organization_security_policy" "policy" {
  …
  }

Use a tabela a seguir para editar a definição de um recurso de política de segurança da organização para criar um novo recurso de política de firewall hierárquica.

Recurso do Terraform atual Novo recurso do Terraform
Nome do recurso google_compute_organization_security_policy google_compute_firewall_policy
Nome do campo na política display_name short_name

Use a tabela a seguir para editar a definição de um recurso de associação de política de segurança da organização para criar um novo recurso de associação de política de firewall hierárquica.

Recurso do Terraform atual Novo recurso do Terraform
Nome do recurso google_compute_organization_security_policy_association google_compute_firewall_policy_association
Nome do campo na associação policy_id firewall_policy
Nome do campo na associação attachment_id attachment_target

Use a tabela a seguir para editar a definição de um recurso de regra de política de segurança da organização para criar um novo recurso de regra de política de firewall hierárquica.

Recurso do Terraform atual Novo recurso do Terraform
Nome do recurso google_compute_organization_security_policy_rule google_compute_firewall_policy_rule
Nome do campo na regra policy_id (ID da política de segurança) firewall_policy
Nome do campo removido da regra versioned_expr — (o campo não existe)
Definição do objeto match: remova o conjunto config e mude layer4_config para 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 do campo na regra layer4_config layer4_configs

Você pode usar o comando do Terraform a seguir para verificar se a configuração modificada do Terraform é válida:

terraform validate

Importar recursos para o estado do Terraform

Para importar recursos firewallPolicies para o arquivo de configuração do Terraform, execute os comandos de importação do Terraform gerados na seção Preparar comandos de importação usando um script automatizado ou Preparar comandos de importação manualmente.

Depois de importar os recursos firewallPolicies, o Terraform vai acessá-los usando os métodos firewallPolicies.

Verificar a configuração do Terraform e corrigir discrepâncias

Execute o comando do Terraform a seguir para verificar se há ações.

terraform plan

Como a migração não muda nenhum recurso subjacente Cloud de Confiance , o plano criado pelo Terraform não pode conter ações.

Por exemplo, na saída a seguir, obtida pela execução do comando terraform plan, as ações do Terraform indicam que o name no recurso google_compute_firewall_policy_association precisa ser atualizado.

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)
  }

Nesse caso, é necessário verificar e atualizar o arquivo de configuração do Terraform para que o atributo name seja consistente com o nome já instalado.

Você pode configurar o Terraform para mudar o name esperado no recurso google_compute_firewall_policy_association para o valor original locations/global/securityPolicies/12345-folders/23456 substituindo o campo name na configuração da seguinte maneira:

name = "${replace(local.policy_id, "firewallPolicies", "securityPolicies")}-${each.value}"

A mudança anterior usa a função de substituição para atualizar o valor de local.policy_id para securityPolicies em vez de firewallPolicies. Como o Terraform agora espera locations/global/securityPolicies/12345-folders/23456 para o atributo name, a execução de terraform plan não mostra mais a ação do Terraform relacionada ao atributo name.

Se o comando terraform plan não indicar mudanças ou ações do Terraform, a migração estará concluída.

A seguir