Google recomienda usar los métodos firewallPolicies
para configurar políticas del Firewall de nueva generación de Cloud. En este documento, se explica cómo migrar tus configuraciones de Terraform para usar los métodos de firewallPolicies en lugar de los métodos de organizationSecurityPolicies.
Los métodos firewallPolicies
proporcionan opciones de administración de la organización con controles detallados. Recomendamos los métodos firewallPolicies
para la administración de recursos con Terraform. En este documento, se supone que conoces las prácticas recomendadas y las operaciones básicas de Terraform.
Las políticas de firewall te permiten agrupar varias reglas de firewall que pueden rechazar o permitir las conexiones de forma explícita. Para obtener más información sobre las políticas de firewall, consulta Políticas de firewall.
Beneficios de migrar a los métodos de firewallPolicies
Los métodos de firewallPolicies
ofrecen una experiencia de firewall coherente en toda la jerarquía de recursos deGoogle Cloud y ofrecen varios beneficios operativos.
Seguridad mejorada de la organización: Los métodos de
firewallPolicies
aplican seguridad a la organización con controles avanzados de permisos de Identity and Access Management (IAM).Facilidad de operaciones: Los métodos
firewallPolicies
admiten el uso de funciones avanzadas, como objetos de nombre de dominio completamente calificados (FQDN), objetos de ubicación geográfica, detección de amenazas, prevención de intrusiones y grupos de direcciones, para facilitar y optimizar las operaciones.
Cómo funciona la migración
Antes de comenzar el proceso de migración, debes completar los siguientes pasos, que se describen en la sección Antes de comenzar:
- Asegúrate de usar la versión 4.0.0 o una posterior del proveedor de Terraform para Google Cloud.
- Asegúrate de que el estado de Terraform coincida con la configuración actual.
- Identifica los recursos que se encuentran dentro del alcance de la migración, incluidas las políticas, las reglas y las asociaciones.
- Prepara comandos para importar los nuevos recursos
firewallPolicies
al estado de Terraform de forma manual o con una secuencia de comandos automatizada. - Revisa los procedimientos recomendados de copia de seguridad y recuperación para tu versión de Terraform, y crea una copia de seguridad de tu estado actual de Terraform.
El proceso de reconfiguración de Terraform para migrar los recursos de organizationSecurityPolicies
incluye los siguientes pasos:
Quita los recursos existentes del estado de Terraform. Quita los recursos
organizationSecurityPolicies
existentes del estado de Terraform.Actualiza la configuración de Terraform. Edita los archivos de configuración de Terraform para reemplazar el tipo, los nombres y los atributos de recursos existentes por los nuevos.
Importa recursos nuevos al estado de Terraform. Importa los nuevos recursos de
firewallPolicies
al estado de Terraform.
Antes de comenzar
En esta sección, se explican los requisitos previos para el proceso de migración.
Asegúrate de que el proveedor de Terraform sea compatible
Asegúrate de usar la versión 4.0.0 o una posterior del proveedor de Terraform paraGoogle Cloud, que incluye los siguientes recursos del registro de Terraform:
- google_compute_firewall_policy
- google_compute_firewall_policy_association
- google_compute_firewall_policy_rule
Asegúrate de que el estado de Terraform esté actualizado
Ejecuta el siguiente comando de Terraform para verificar que el estado de Terraform coincida con la configuración actual.
terraform plan
Para evitar incoherencias, te recomendamos que apliques los cambios o las acciones pendientes antes de continuar con el proceso de migración.
Identifica los recursos que se migrarán
Ejecuta el siguiente comando de Terraform para generar una lista de los recursos que se encuentran dentro del alcance de la migración, incluidas las políticas, las reglas y las asociaciones.
terraform state list | grep ^google_compute_organization_security_policy
El resultado es similar a este:
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"]
Necesitas estos recursos para migrar a los métodos de firewallPolicies
. Guárdalas para más adelante.
Prepara comandos de importación con una secuencia de comandos automatizada
Para evitar errores o configuraciones perdidas durante la migración, te recomendamos que uses una secuencia de comandos automatizada para generar los comandos necesarios para importar los recursos de firewallPolicies
al estado de Terraform.
Ejecuta la siguiente secuencia de comandos de Terraform para realizar estas tareas:
- Genera direcciones de recursos nuevas a partir de las existentes.
- Obtén los identificadores de recursos (o IDs de recursos) de las direcciones de recursos existentes.
- Genera identificadores de importación (o IDs de importación) a partir de los IDs de recursos.
- Muestra los comandos de importación para todos los recursos
firewallPolicies
nuevos.
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
Necesitas el resultado de esta secuencia de comandos para importar los recursos. Guarda el resultado para usarlo más adelante.
Prepara comandos de importación de forma manual
Si el enfoque automatizado no es factible, puedes generar los comandos para importar los recursos de firewallPolicies
de forma manual. Puedes usar el comando terraform console
para obtener los identificadores (IDs) de los recursos.
El siguiente comando de Terraform muestra el ID del recurso google_compute_organization_security_policy.policy
:
echo google_compute_organization_security_policy.policy.id | terraform console
El resultado es similar a este:
"locations/global/securityPolicies/12345"
Del mismo modo, obtén los IDs de recurso de los otros recursos que identificaste en la sección Identifica los recursos que se migrarán.
Como alternativa, puedes usar el siguiente comando de Terraform para obtener los IDs de todos los recursos identificados juntos:
terraform state list | grep ^google_compute_organization_security_policy | while read -r line; do echo "$line".id | terraform console; done
El resultado es similar a este:
"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 los recursos de firewallPolicies
, necesitas sus IDs de importación. Los IDs de importación se componen de un identificador numérico llamado número de política, un nombre de asociación y un número de prioridad de regla, como se describe en esta sección.
El identificador numérico que se encuentra después del tercer carácter de barra diagonal (/) es el número de política, que representa el ID de importación de las políticas. En la siguiente tabla, se muestra un ejemplo de un ID de recurso y un ID de importación para una política.
ID de recurso ID de importación "locations/global/securityPolicies/12345"
12345
El número de política junto con el nombre de la asociación representa el ID de importación de las asociaciones. Un nombre de asociación es la parte del ID del recurso que se muestra después del elemento
/association/
.Reemplaza cualquier carácter de barra diagonal (/) en el nombre de la asociación por
%2F
para permitir que el comandoterraform import
interprete el nombre de la asociación como una sola entidad. En la siguiente tabla, se muestran ejemplos de ID de recurso y de importación para las asociaciones.ID de recurso ID de importación "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
El número de política junto con el número de prioridad de la regla representan el ID de importación de las reglas. En la siguiente tabla, se muestra un ejemplo de un ID de recurso y un ID de importación para una regla.
ID de recurso ID de importación "locations/global/securityPolicies/12345/priority/1000"
12345/1000
Para importar los recursos firewallPolicies
, necesitas los nombres de instancias de recursos actualizados. Genera los nombres de las instancias de recursos reemplazando el prefijo google_compute_organization_security_policy
por google_compute_firewall_policy
para todos los recursos que identificaste en la sección Identifica los recursos que se migrarán. En la siguiente lista, se muestra un ejemplo de los nombres de instancias de recursos actualizados:
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 los nombres de las instancias de recursos con los IDs de importación asociados para obtener los comandos terraform import
. En la siguiente lista, se muestra un ejemplo de los 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'
Guarda estos comandos de importación para consultarlos más adelante.
Crea una copia de seguridad del estado de Terraform
Antes de continuar con el proceso de migración, te recomendamos que crees una copia de seguridad del estado de Terraform. Usa el siguiente comando de Terraform para crear una copia de seguridad en el archivo terraform.tfstate.backup
.
terraform state pull > terraform.tfstate.backup
Si cambias el estado de Terraform de formas no deseadas, puedes usar el archivo de copia de seguridad terraform.tfstate.backup
para restablecer el estado original de Terraform con el siguiente comando:
terraform state push terraform.tfstate.backup
Migra recursos de organizationSecurityPolicies
En esta sección, se explica el procedimiento para migrar tus configuraciones de Terraform de los métodos organizationSecurityPolicies
a los métodos firewallPolicies
.
Quita recursos existentes del estado de Terraform
Para quitar los recursos organizationSecurityPolicies
que se encuentran en la sección Identifica los recursos que se migrarán del estado de Terraform, ejecuta el siguiente comando de Terraform.
terraform state list | grep ^google_compute_organization_security_policy | while read -r resource; do terraform state rm "$resource" done
Actualiza la configuración de Terraform
Para actualizar tu archivo de configuración de Terraform, busca las definiciones de los recursos que encontraste en la sección Identifica los recursos que se migrarán. Usa el siguiente comando para encontrar las definiciones.
grep -r google_compute_organization_security_policy .
Por ejemplo, el archivo de configuración de Terraform define la política google_compute_organization_security_policy.policy
de la siguiente manera:
resource "google_compute_organization_security_policy" "policy" { … }
Usa la siguiente tabla para editar la definición de un recurso de política de seguridad de la organización y crear un nuevo recurso de política jerárquica de firewall.
Recurso de Terraform existente | Nuevo recurso de Terraform | |
---|---|---|
Nombre del recurso | google_compute_organization_security_policy | google_compute_firewall_policy |
Nombre del campo en la política | display_name |
short_name |
Usa la siguiente tabla para editar la definición de un recurso de asociación de política de seguridad de la organización y crear un nuevo recurso de asociación de política jerárquica de firewall.
Recurso de Terraform existente | Nuevo recurso de Terraform | |
---|---|---|
Nombre del recurso | google_compute_organization_security_policy_association | google_compute_firewall_policy_association |
Nombre del campo en la asociación | policy_id |
firewall_policy |
Nombre del campo en la asociación | attachment_id |
attachment_target |
Usa la siguiente tabla para editar la definición de un recurso de regla de política de seguridad de la organización y crear un nuevo recurso de regla de política de firewall jerárquica.
Recurso de Terraform existente | Nuevo recurso de Terraform | |
---|---|---|
Nombre del recurso | google_compute_organization_security_policy_rule | google_compute_firewall_policy_rule |
Nombre del campo en la regla | policy_id (ID de política de seguridad) |
firewall_policy |
Nombre del campo quitado de la regla | versioned_expr |
— (el campo no existe) |
Definición del objeto match :
Quita el conjunto config y cambia layer4_config a 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 } } |
Nombre del campo en la regla | layer4_config |
layer4_configs |
Puedes usar el siguiente comando de Terraform para verificar si la configuración modificada de Terraform es válida:
terraform validate
Importa recursos al estado de Terraform
Para importar recursos de firewallPolicies
a tu archivo de configuración de Terraform, ejecuta los comandos de importación de Terraform que generaste en la sección Prepara los comandos de importación con una secuencia de comandos automatizada o Prepara los comandos de importación de forma manual.
Después de importar los recursos de firewallPolicies
, Terraform accede a ellos con los métodos de firewallPolicies.
Verifica tu configuración de Terraform y corrige las discrepancias
Ejecuta el siguiente comando de Terraform para verificar si hay acciones.
terraform plan
Dado que la migración no cambia ningún recurso Google Cloud subyacente, el plan que crea Terraform no debe contener ninguna acción.
Por ejemplo, en el siguiente resultado que se obtiene al ejecutar el comando terraform plan
, las acciones de Terraform indican que se debe actualizar el name
en el recurso google_compute_firewall_policy_association
.
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) }
En este caso, debes verificar y actualizar el archivo de configuración de Terraform de modo que el atributo name
sea coherente con el nombre que ya está instalado.
Puedes configurar Terraform para que cambie el name
esperado en el recurso google_compute_firewall_policy_association
a su valor original locations/global/securityPolicies/12345-folders/23456
reemplazando el campo name
en la configuración de la siguiente manera:
name = "${replace(local.policy_id, "firewallPolicies", "securityPolicies")}-${each.value}"
El cambio anterior usa la función de reemplazo para actualizar el valor de local.policy_id
a securityPolicies
en lugar de firewallPolicies
. Dado que Terraform ahora espera locations/global/securityPolicies/12345-folders/23456
para el atributo name
, ejecutar terraform plan
ya no muestra la acción de Terraform relacionada con el atributo name
.
Si el comando terraform plan
no indica ningún cambio ni acciones de Terraform, la migración se completó.
¿Qué sigue?
- Obtén más información sobre los métodos de firewallPolicies.