A Google recomenda a utilização dos métodos firewallPolicies
para configurar as políticas de firewall de nova geração da nuvem. Este documento explica como migrar as suas configurações do Terraform para usar os métodos firewallPolicies em vez dos métodos organizationSecurityPolicies.
Os métodos firewallPolicies
oferecem opções de gestão organizacional com controlos detalhados. Recomendamos os firewallPolicies
métodos de gestão de recursos através do Terraform. Este documento pressupõe que tem familiaridade com as práticas recomendadas do Terraform e as operações básicas do Terraform.
As políticas de firewall permitem-lhe agrupar várias regras de firewall que podem negar ou permitir explicitamente ligações. Para mais informações acerca das políticas de firewall, consulte o artigo Políticas de firewall.
Vantagens da migração para os métodos firewallPolicies
Os métodos firewallPolicies
oferecem uma experiência de firewall consistente em toda a hierarquia de recursos e oferecem várias vantagens operacionais.Google Cloud
Segurança da organização melhorada: os métodos
firewallPolicies
aplicam a segurança da organização através de controlos avançados de autorização da gestão de identidade e de acesso (IAM).Facilidade de operações: os métodos
firewallPolicies
suportam a utilização de funcionalidades avançadas, como objetos de nome de domínio totalmente qualificado (FQDN), objetos de geolocalização, deteção de ameaças, prevenção de intrusões e grupos de endereços, para facilitar e tornar mais eficientes as operações.
Como funciona a migração
Antes de iniciar o processo de migração, tem de concluir os seguintes passos, descritos na secção Antes de começar:
- Certifique-se de que está a usar a versão 4.0.0 ou posterior do fornecedor Terraform para Google Cloud.
- Certifique-se de que o estado do Terraform corresponde à configuração atual.
- Identifique os recursos que estão no âmbito 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 através de um script automatizado. - Reveja os procedimentos de cópia de segurança e recuperação recomendados para a sua versão do Terraform e crie uma cópia de segurança do estado atual do Terraform.
O processo de reconfiguração do Terraform para migrar os recursos organizationSecurityPolicies
inclui estes passos:
Remova os recursos existentes do estado do Terraform. Remova os recursos
organizationSecurityPolicies
existentes do estado do Terraform.Atualize a configuração do Terraform. Edite os ficheiros de configuração do Terraform para substituir o tipo de recurso, os nomes e os atributos existentes pelo novo tipo de recurso, nomes e atributos.
Importe novos recursos para o estado do Terraform. Importe os novos recursos
firewallPolicies
para o estado do Terraform.
Antes de começar
Esta secção explica os pré-requisitos para o processo de migração.
Certifique-se de que o fornecedor do Terraform é suportado
Certifique-se de que está a usar a versão 4.0.0 ou posterior do fornecedor Terraform para Google Cloud, que inclui os seguintes recursos do registo Terraform:
- google_compute_firewall_policy
- google_compute_firewall_policy_association
- google_compute_firewall_policy_rule
Certifique-se de que 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 aplique as alterações ou as ações pendentes antes de avançar com o processo de migração.
Identifique os recursos a migrar
Execute o seguinte comando do Terraform para gerar uma lista de recursos que estão no âmbito da migração, incluindo políticas, regras e associações.
terraform state list | grep ^google_compute_organization_security_policy
O resultado é semelhante ao seguinte:
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"]
Precisa destes recursos para migrar para os métodos firewallPolicies
. Guardá-los
para mais tarde.
Prepare comandos de importação com um script automatizado
Para evitar erros ou configurações em falta durante a migração, recomendamos que use 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 estas tarefas:
- Gerar novas moradas de recursos a partir das moradas de recursos existentes.
- Obtenha identificadores de recursos (ou IDs de recursos) a partir dos endereços de recursos existentes.
- Gerar identificadores de importação (ou IDs de importação) a partir dos IDs de recursos.
- Apresentar 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
Precisa do resultado deste script para importar os recursos. Guarde o resultado para mais tarde.
Prepare comandos de importação manualmente
Se a abordagem automática não for viável, pode gerar os comandos para importar os recursos firewallPolicies
manualmente. Pode usar o comando terraform console
para obter os identificadores (IDs) dos recursos.
O seguinte comando do Terraform apresenta o ID do recurso do recurso google_compute_organization_security_policy.policy
:
echo google_compute_organization_security_policy.policy.id | terraform console
O resultado é semelhante ao seguinte:
"locations/global/securityPolicies/12345"
Da mesma forma, obtenha os IDs dos recursos que identificou na secção Identifique os recursos a migrar.
Em alternativa, pode usar o seguinte comando do Terraform para obter os IDs dos recursos de todos os recursos identificados em conjunto:
terraform state list | grep ^google_compute_organization_security_policy | while read -r line; do echo "$line".id | terraform console; done
O resultado é semelhante ao seguinte:
"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
, precisa dos respetivos IDs de importação. Os IDs de importação são compostos por um identificador numérico denominado número de apólice, um nome de associação e um número de prioridade da regra, conforme descrito nesta secção.
O identificador numérico após o terceiro caráter de barra (/) é o número de apólice, que representa o ID de importação das políticas. A tabela seguinte mostra um exemplo de um ID do recurso e um ID de importação para uma política.
ID do recurso ID de importação "locations/global/securityPolicies/12345"
12345
O número da política, juntamente com o nome da associação, representa o ID de importação das associações. O nome de uma associação é a parte do ID do recurso apresentada após o elemento
/association/
.Substitua qualquer caráter 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 seguinte mostra exemplos de ID do recurso e ID de importação para associações.ID 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 de apólice, juntamente com o número de prioridade da regra, representa o ID de importação das regras. A tabela seguinte mostra um exemplo de um ID do recurso e um ID de importação para uma regra.
ID do recurso ID de importação "locations/global/securityPolicies/12345/priority/1000"
12345/1000
Para importar os recursos firewallPolicies
, precisa dos respetivos nomes de instâncias de recursos 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 que identificou na secção Identifique os recursos a migrar. A lista seguinte mostra um exemplo dos nomes das 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 seguinte 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'
Guarde estes comandos de importação para referência futura.
Faça uma cópia de segurança do estado do Terraform
Antes de avançar com o processo de migração, recomendamos que crie uma cópia de segurança do estado do Terraform. Use o seguinte comando do Terraform para criar uma cópia de segurança no ficheiro terraform.tfstate.backup
.
terraform state pull > terraform.tfstate.backup
Se alterar o estado do Terraform de formas não intencionais, pode usar o ficheiro de cópia de segurança terraform.tfstate.backup
para restaurar o estado original do Terraform com o seguinte comando:
terraform state push terraform.tfstate.backup
Migre recursos do organizationSecurityPolicies
Esta secção explica o procedimento para migrar as suas configurações do Terraform dos métodos organizationSecurityPolicies
para os métodos firewallPolicies
.
Remova recursos existentes do estado do Terraform
Para remover os recursos organizationSecurityPolicies
encontrados na secção Identifique recursos a 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
Atualize a configuração do Terraform
Para atualizar o ficheiro de configuração do Terraform, encontre as definições dos recursos que encontrou na secção Identifique recursos a migrar. Use o seguinte comando para encontrar as definições.
grep -r google_compute_organization_security_policy .
Por exemplo, o ficheiro de configuração do Terraform define a política
google_compute_organization_security_policy.policy
da seguinte forma:
resource "google_compute_organization_security_policy" "policy" { … }
Use a tabela seguinte 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 existente | 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 seguinte para editar a definição de um recurso de associação de políticas de segurança da organização para criar um novo recurso de associação de políticas de firewall hierárquicas.
Recurso do Terraform existente | 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 seguinte 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 existente | 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 altere 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 |
Pode usar o seguinte comando do Terraform para verificar se a configuração do Terraform modificada é válida:
terraform validate
Importe recursos para o estado do Terraform
Para importar recursos firewallPolicies
para o seu ficheiro de configuração do Terraform,
execute os comandos de importação do Terraform que gerou na secção
Prepare comandos de importação com um script automatizado
ou Prepare comandos de importação manualmente.
Depois de importar os recursos firewallPolicies
, o Terraform acede aos mesmos através dos métodos firewallPolicies.
Valide a configuração do Terraform e corrija as discrepâncias
Execute o seguinte comando do Terraform para verificar se existem ações.
terraform plan
Uma vez que a migração não altera os Google Cloud recursos subjacentes, o plano criado pelo Terraform não pode conter ações.
Por exemplo, no seguinte resultado obtido através da execução do comando terraform plan
, as ações do Terraform indicam que o name
no recurso google_compute_firewall_policy_association
tem de 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) }
Neste caso, tem de validar e atualizar o ficheiro de configuração do Terraform de modo que o atributo name
seja consistente com o nome que já está instalado.
Pode configurar o Terraform para alterar o name
esperado no recurso
google_compute_firewall_policy_association
para o respetivo valor original locations/global/securityPolicies/12345-folders/23456
substituindo o campo name
na configuração da seguinte forma:
name = "${replace(local.policy_id, "firewallPolicies", "securityPolicies")}-${each.value}"
A alteração anterior usa a função de substituição para atualizar o valor de
local.policy_id
para securityPolicies
em vez de firewallPolicies
. Uma vez que o Terraform espera agora locations/global/securityPolicies/12345-folders/23456
para o atributo name
, a execução de terraform plan
já não mostra a ação do Terraform relacionada com o atributo name
.
Se o comando terraform plan
não indicar alterações nem ações do Terraform, a migração está concluída.
O que se segue?
- Saiba mais acerca dos métodos firewallPolicies.