Google recomienda usar los métodos firewallPolicies
para configurar las políticas de cortafuegos de nueva generación de Cloud. En este documento se explica cómo migrar las configuraciones de Terraform para usar los métodos firewallPolicies en lugar de los métodos organizationSecurityPolicies.
Los métodos de firewallPolicies
ofrecen opciones de gestión de organizaciones con controles detallados. Te recomendamos los firewallPolicies
métodos de gestión de recursos con Terraform. En este documento se da por supuesto que conoces las prácticas recomendadas de Terraform y las operaciones básicas de Terraform.
Las políticas de cortafuegos te permiten agrupar varias reglas de cortafuegos que pueden denegar o permitir conexiones de forma explícita. Para obtener más información sobre las políticas de cortafuegos, consulta Políticas de cortafuegos.
Ventajas de migrar a los métodos de firewallPolicies
Los métodos firewallPolicies
proporcionan una experiencia de firewall coherente en toda la jerarquía de recursosGoogle Cloud y ofrecen varias ventajas operativas.
Seguridad de la organización mejorada: los
firewallPolicies
métodos aplican la seguridad de la organización mediante controles de permisos avanzados de Gestión de Identidades y Accesos (IAM).Facilidad de las operaciones: los métodos
firewallPolicies
admiten el uso de funciones avanzadas, como objetos de nombres de dominio completos (FQDN), objetos de geolocalización, 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 empezar el proceso de migración, debes completar los siguientes pasos, que se describen en la sección Antes de empezar:
- Asegúrate de que estás usando 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 están en el ámbito de la migración, incluidas las políticas, las reglas y las asociaciones.
- Prepara los comandos para importar los nuevos recursos de
firewallPolicies
al estado de Terraform manualmente o mediante una secuencia de comandos automatizada. - Consulta los procedimientos de copia de seguridad y recuperación recomendados 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:
Elimina los recursos del estado de Terraform. Elimina los recursos
organizationSecurityPolicies
del estado de Terraform.Actualiza la configuración de Terraform. Edita los archivos de configuración de Terraform para sustituir el tipo, los nombres y los atributos de recursos por los nuevos.
Importa recursos nuevos al estado de Terraform. Importa los nuevos recursos
firewallPolicies
al estado de Terraform.
Antes de empezar
En esta sección se explican los requisitos previos del proceso de migración.
Comprobar que el proveedor de Terraform sea compatible
Asegúrate de que estás usando la versión 4.0.0 o una posterior del proveedor de Terraform para Google 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 comprobar que el estado de Terraform coincide 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.
Identificar los recursos que se van a migrar
Ejecuta el siguiente comando de Terraform para generar una lista de recursos que estén en el ámbito de la migración, incluidas las políticas, las reglas y las asociaciones.
terraform state list | grep ^google_compute_organization_security_policy
El resultado debería ser similar al siguiente:
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 firewallPolicies
. Guárdalos para más tarde.
Preparar 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 nuevas direcciones de recursos a partir de las que ya tienes.
- 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 recurso.
- Muestra los comandos de importación de 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 la salida para más adelante.
Preparar comandos de importación manualmente
Si no puedes usar el método automático, puedes generar los comandos para importar los recursos de firewallPolicies
manualmente. Puedes usar el comando terraform console
para obtener los identificadores (IDs) de los recursos.
El siguiente comando de Terraform muestra el ID de recurso del recurso google_compute_organization_security_policy.policy
:
echo google_compute_organization_security_policy.policy.id | terraform console
El resultado debería ser similar al siguiente:
"locations/global/securityPolicies/12345"
Del mismo modo, obtenga los IDs de los demás recursos que haya identificado en la sección Identificar los recursos que se van a migrar.
También puedes usar el siguiente comando de Terraform para obtener los IDs de recursos de todos los recursos identificados a la vez:
terraform state list | grep ^google_compute_organization_security_policy | while read -r line; do echo "$line".id | terraform console; done
El resultado debería ser similar al siguiente:
"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, tal como se describe en esta sección.
El identificador numérico que aparece después de la tercera barra (/) es el número de póliza, que representa el ID de importación de las pólizas. En la siguiente tabla se muestra un ejemplo de ID de recurso y de ID de importación de una política.
ID de recurso Import ID "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. El nombre de una asociación es la parte del ID de recurso que se muestra después del elemento
/association/
.Sustituye cualquier barra diagonal (/) del nombre de la asociación por
%2F
para 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 e ID de importación de asociaciones.ID de recurso Import ID "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 representa el ID de importación de las reglas. En la siguiente tabla se muestra un ejemplo de ID de recurso y de ID de importación de una regla.
ID de recurso Import ID "locations/global/securityPolicies/12345/priority/1000"
12345/1000
Para importar los recursos de firewallPolicies
, necesitas los nombres de instancia de recurso actualizados. Genera los nombres de las instancias de recursos sustituyendo el prefijo
google_compute_organization_security_policy
por google_compute_firewall_policy
en todos los recursos que hayas identificado en la sección Identificar los recursos que se van a migrar. En la siguiente lista se muestra un ejemplo de los nombres de las instancias de recursos actualizadas:
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 instancia de los 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 de 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.
Crear 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 forma no intencionada, puedes usar el archivo de copia de seguridad terraform.tfstate.backup
para restaurar el estado original de Terraform con el siguiente comando:
terraform state push terraform.tfstate.backup
Migrar recursos de organizationSecurityPolicies
En esta sección se explica el procedimiento para migrar las configuraciones de Terraform de los métodos organizationSecurityPolicies
a los métodos firewallPolicies
.
Eliminar recursos del estado de Terraform
Para eliminar los recursos organizationSecurityPolicies
que se encuentran en la sección Identificar recursos que migrar 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
Actualizar la configuración de Terraform
Para actualizar el archivo de configuración de Terraform, busca las definiciones de los recursos que has encontrado en la sección Identificar recursos que migrar. 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 una organización y crear un recurso de política de cortafuegos jerárquica.
Recurso de Terraform actual | Nuevo recurso de Terraform | |
---|---|---|
Nombre del recurso | google_compute_organization_security_policy | google_compute_firewall_policy |
Nombre del campo de la política | display_name |
short_name |
Usa la siguiente tabla para editar la definición de un recurso de asociación de políticas de seguridad de una organización y crear un recurso de asociación de políticas de cortafuegos jerárquicas.
Recurso de Terraform actual | Nuevo recurso de Terraform | |
---|---|---|
Nombre del recurso | google_compute_organization_security_policy_association | google_compute_firewall_policy_association |
Nombre del campo de la asociación. | policy_id |
firewall_policy |
Nombre del campo de 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 una organización y crear un recurso de regla de política de cortafuegos jerárquica.
Recurso de Terraform actual | Nuevo recurso de Terraform | |
---|---|---|
Nombre del recurso | google_compute_organization_security_policy_rule | google_compute_firewall_policy_rule |
Nombre del campo de la regla | policy_id (ID de la política de seguridad) |
firewall_policy |
Nombre del campo eliminado de la regla | versioned_expr |
— (el campo no existe) |
Definición del objeto match :
Elimina 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 de la regla | layer4_config |
layer4_configs |
Puedes usar el siguiente comando de Terraform para verificar si la configuración de Terraform modificada es válida:
terraform validate
Importar 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 has generado en la sección Preparar comandos de importación con una secuencia de comandos automatizada o Preparar comandos de importación manualmente.
Después de importar los recursos firewallPolicies
, Terraform accede a ellos mediante los métodos firewallPolicies.
Verificar la configuración de Terraform y corregir las discrepancias
Ejecuta el siguiente comando de Terraform para comprobar si hay alguna acción.
terraform plan
Como la migración no cambia ningún recurso subyacente, el plan que crea Terraform no debe contener ninguna acción. Google Cloud
Por ejemplo, en el siguiente resultado obtenido al ejecutar el comando terraform plan
, las acciones de Terraform indican que el name
del recurso google_compute_firewall_policy_association
debe actualizarse.
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 para que el atributo name
sea coherente con el nombre que ya está instalado.
Puedes configurar Terraform para cambiar el name
esperado en el recurso
google_compute_firewall_policy_association
a su valor original locations/global/securityPolicies/12345-folders/23456
sustituyendo 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 sustitución para actualizar el valor de local.policy_id
a securityPolicies
en lugar de firewallPolicies
. Como Terraform ahora espera locations/global/securityPolicies/12345-folders/23456
para el atributo name
, al ejecutar terraform plan
ya no se muestra la acción de Terraform
relacionada con el atributo name
.
Si el comando terraform plan
no indica ningún cambio ni acción de Terraform, la migración se habrá completado.
Siguientes pasos
- Consulta más información sobre los métodos de firewallPolicies.