O Google recomenda usar os métodos firewallPolicies
para configurar políticas do
Cloud Next Generation Firewall. Este documento orienta você na migração das configurações do Terraform para usar os métodos firewallPolicies em vez dos métodos organizationSecurityPolicies.
Os métodos firewallPolicies
oferecem opções de gerenciamento organizacional com controles refinados. Recomendamos os métodos firewallPolicies
para gerenciamento de recursos usando o Terraform. Este documento pressupõe que você conhece 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 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
hierarquia de recursosGoogle Cloud e vários benefícios operacionais.
Segurança organizacional avançada: 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
são compatíveis com o 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 funciona a migração
Antes de iniciar o processo de migração, conclua as etapas a seguir, descritas na seção Antes de começar:
- Use a versão 4.0.0 ou mais recente do provedor Terraform para Google Cloud.
- Verifique se o estado do Terraform corresponde à configuração atual.
- Identifique os recursos 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. - Revise 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 do
organizationSecurityPolicies
inclui estas etapas:
Remova os recursos atuais do estado do Terraform. Remova os recursos
organizationSecurityPolicies
atuais do estado do Terraform.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 pelos novos.
Importe novos recursos para o estado do Terraform. Importe os novos recursos
firewallPolicies
para o estado do Terraform.
Antes de começar
Nesta seção, explicamos os pré-requisitos para o processo de migração.
Verificar se o provedor do Terraform é compatível
Use a versão 4.0.0 ou mais recente do provedor do Terraform para Google Cloud, que inclui os seguintes recursos do registro do Terraform:
- google_compute_firewall_policy
- google_compute_firewall_policy_association
- google_compute_firewall_policy_rule
Verificar se o estado do Terraform está atualizado
Execute o seguinte comando do Terraform 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 seguinte comando do Terraform para gerar uma lista de recursos 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 usar
um script automatizado para gerar os comandos necessários para importar
os recursos firewallPolicies
para o estado do Terraform.
Execute o seguinte script do Terraform para realizar essas tarefas:
- Gere novos endereços de recursos com base nos atuais.
- Extraia os identificadores (ou IDs) dos recursos dos endereços atuais.
- Gere identificadores de importação (ou IDs de importação) com base nos IDs de recursos.
- Mostre 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, gere os comandos para importar os recursos firewallPolicies
manualmente. Use 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, obtenha os IDs dos outros recursos identificados na seção Identificar recursos para migrar.
Como alternativa, use o seguinte comando do Terraform para receber os IDs de todos os recursos identificados:
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 da política, um nome de associação e um número de prioridade da 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 ID de importação para uma política.
ID do recurso ID da 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 mostrada após o elemento
/association/
.Substitua qualquer caractere de barra (/) no nome da associação por
%2F
para permitir que o comandoterraform 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.ID do recurso ID da 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 ID de importação para uma regra.
ID do recurso ID da importação "locations/global/securityPolicies/12345/priority/1000"
12345/1000
Para importar os recursos firewallPolicies
, você precisa dos nomes de instância de recurso atualizados. Gere os nomes das instâncias 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 para migrar. A lista a seguir mostra um exemplo dos nomes de instâncias 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 das instâncias de recursos com os IDs de importação associados para obter
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 seguinte comando do Terraform 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, use o arquivo de backup
terraform.tfstate.backup
para restaurar o estado original do Terraform com o comando a seguir:
terraform state push terraform.tfstate.backup
Migrar organizationSecurityPolicies
recursos
Esta seção explica o procedimento para migrar suas configurações do Terraform
dos métodos organizationSecurityPolicies
para os métodos firewallPolicies
.
Remover recursos atuais do estado do Terraform
Para remover os recursos organizationSecurityPolicies
encontrados na seção
Identificar recursos para migrar do
estado do Terraform, execute o seguinte comando do Terraform.
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 que você encontrou na seção Identificar recursos para migrar. 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 e criar um 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 e 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 e criar um recurso de regra de política hierárquica de firewall.
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 |
Use 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 seu 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 do firewallPolicies
, o Terraform acessa esses recursos usando os métodos firewallPolicies.
Verificar a configuração do Terraform e corrigir discrepâncias
Execute o seguinte comando do Terraform para verificar se há ações.
terraform plan
Como a migração não muda nenhum recurso Google Cloud subjacente, o plano criado pelo Terraform não pode conter ações.
Por exemplo, na saída a seguir, obtida ao executar o 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, verifique e atualize o arquivo de configuração do Terraform para que o atributo name
seja consistente com o nome já instalado.
É possível 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 "replace" 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 nenhuma mudança ou ação do Terraform, a migração estará concluída.
A seguir
- Saiba mais sobre os métodos firewallPolicies.