Google recommande d'utiliser les méthodes firewallPolicies
pour configurer les stratégies de pare-feu Cloud nouvelle génération. Ce document vous explique comment migrer vos configurations Terraform pour utiliser les méthodes firewallPolicies au lieu des méthodes organizationSecurityPolicies.
Les méthodes firewallPolicies
offrent des options de gestion de l'organisation avec des contrôles précis. Nous vous recommandons d'utiliser les méthodes firewallPolicies
pour gérer les ressources à l'aide de Terraform. Ce document part du principe que vous connaissez les bonnes pratiques et les opérations Terraform de base.
Les stratégies de pare-feu vous permettent de regrouper plusieurs règles de pare-feu qui peuvent explicitement refuser ou autoriser des connexions. Pour en savoir plus sur les stratégies de pare-feu, consultez Stratégies de pare-feu.
Avantages de la migration vers les méthodes firewallPolicies
Les méthodes firewallPolicies
offrent une expérience de pare-feu cohérente dans la hiérarchie des ressourcesGoogle Cloud et de nombreux avantages opérationnels.
Sécurité renforcée de l'organisation : les méthodes
firewallPolicies
appliquent la sécurité de l'organisation à l'aide de contrôles avancés des autorisations Identity and Access Management (IAM).Facilité d'utilisation : les méthodes
firewallPolicies
sont compatibles avec l'utilisation de fonctionnalités avancées (telles que les objets de nom de domaine complet, les objets de géolocalisation, la détection des menaces, la prévention des intrusions et les groupes d'adresses) pour faciliter et rendre plus efficace les opérations.
Fonctionnement de la migration
Avant de commencer le processus de migration, vous devez suivre les étapes décrites dans la section Avant de commencer :
- Assurez-vous d'utiliser la version 4.0.0 ou ultérieure du fournisseur Terraform pour Google Cloud.
- Assurez-vous que l'état Terraform correspond à la configuration actuelle.
- Identifiez les ressources incluses dans le champ d'application de la migration, y compris les règles, les associations et les stratégies.
- Préparez les commandes permettant d'importer les nouvelles ressources
firewallPolicies
dans l'état Terraform manuellement ou à l'aide d'un script automatisé. - Consultez les procédures de sauvegarde et de récupération recommandées pour votre version de Terraform, puis créez une sauvegarde de votre état Terraform actuel.
Le processus de reconfiguration de Terraform pour migrer les ressources organizationSecurityPolicies
comprend les étapes suivantes :
Supprimez les ressources existantes de l'état Terraform. Supprimez les ressources
organizationSecurityPolicies
existantes de l'état Terraform.Mettez à jour la configuration Terraform. Modifiez les fichiers de configuration Terraform pour remplacer le type, les noms et les attributs de ressources existants par les nouveaux.
Importer de nouvelles ressources dans l'état Terraform. Importez les nouvelles ressources
firewallPolicies
dans l'état Terraform.
Avant de commencer
Cette section explique les conditions préalables au processus de migration.
Assurez-vous que le fournisseur Terraform est compatible.
Assurez-vous d'utiliser la version 4.0.0 ou ultérieure du fournisseur Terraform pourGoogle Cloud, qui inclut les ressources suivantes du registre Terraform :
- google_compute_firewall_policy
- google_compute_firewall_policy_association
- google_compute_firewall_policy_rule
Assurez-vous que l'état Terraform est à jour.
Exécutez la commande Terraform suivante pour vérifier que l'état Terraform correspond à la configuration actuelle.
terraform plan
Pour éviter toute incohérence, nous vous recommandons d'appliquer les modifications ou actions en attente avant de procéder à la migration.
Identifier les ressources à migrer
Exécutez la commande Terraform suivante pour générer la liste des ressources incluses dans le champ d'application de la migration, y compris les règles, les associations et les stratégies.
terraform state list | grep ^google_compute_organization_security_policy
Le résultat ressemble à ce qui suit :
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"]
Vous avez besoin de ces ressources pour migrer vers les méthodes firewallPolicies
. Enregistrez-les pour plus tard.
Préparer les commandes d'importation à l'aide d'un script automatisé
Pour éviter les erreurs ou les configurations manquantes lors de votre migration, nous vous recommandons d'utiliser un script automatisé pour générer les commandes nécessaires à l'importation des ressources firewallPolicies
dans l'état Terraform.
Exécutez le script Terraform suivant pour effectuer ces tâches :
- Générez de nouvelles adresses de ressources à partir de celles existantes.
- Obtenez les identifiants de ressource (ou ID de ressource) à partir des adresses de ressources existantes.
- Générez des identifiants d'importation (ou ID d'importation) à partir des ID de ressource.
- Affichez les commandes d'importation pour toutes les nouvelles ressources
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
Vous avez besoin du résultat de ce script pour importer les ressources. Enregistrez le résultat pour plus tard.
Préparer manuellement les commandes d'importation
Si l'approche automatisée n'est pas réalisable, vous pouvez générer manuellement les commandes permettant d'importer les ressources firewallPolicies
. Vous pouvez utiliser la commande terraform console
pour obtenir les identifiants (ID) des ressources.
La commande Terraform suivante affiche l'ID de ressource de la ressource google_compute_organization_security_policy.policy
:
echo google_compute_organization_security_policy.policy.id | terraform console
Le résultat ressemble à ce qui suit :
"locations/global/securityPolicies/12345"
De même, obtenez les ID de ressource pour les autres ressources que vous avez identifiées dans la section Identifier les ressources à migrer.
Vous pouvez également utiliser la commande Terraform suivante pour obtenir les ID de ressource de toutes les ressources identifiées à la fois :
terraform state list | grep ^google_compute_organization_security_policy | while read -r line; do echo "$line".id | terraform console; done
Le résultat ressemble à ce qui suit :
"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"
Pour importer les ressources firewallPolicies
, vous avez besoin de leurs ID d'importation. Les ID d'importation sont composés d'un identifiant numérique appelé numéro de règle, d'un nom d'association et d'un numéro de priorité de règle, comme décrit dans cette section.
L'identifiant numérique qui suit le troisième caractère barre oblique (/) correspond au numéro de la règle, qui représente l'ID d'importation des règles. Le tableau suivant présente un exemple d'ID de ressource et d'ID d'importation pour une règle.
ID de ressource ID d'importation "locations/global/securityPolicies/12345"
12345
Le numéro de règle et le nom de l'association représentent l'ID d'importation des associations. Un nom d'association correspond à la partie de l'ID de ressource affichée après l'élément
/association/
.Remplacez toute barre oblique (/) dans le nom de l'association par
%2F
pour permettre à la commandeterraform import
d'interpréter le nom de l'association comme une seule entité. Le tableau suivant présente des exemples d'ID de ressource et d'ID d'importation pour les associations.ID de ressource ID d'importation "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
Le numéro de règlement et le numéro de priorité de la règle représentent l'ID d'importation des règles. Le tableau suivant présente un exemple d'ID de ressource et d'ID d'importation pour une règle.
ID de ressource ID d'importation "locations/global/securityPolicies/12345/priority/1000"
12345/1000
Pour importer les ressources firewallPolicies
, vous avez besoin de leurs noms d'instance de ressource mis à jour. Générez les noms des instances de ressources en remplaçant le préfixe google_compute_organization_security_policy
par google_compute_firewall_policy
pour toutes les ressources que vous avez identifiées dans la section Identifier les ressources à migrer. La liste suivante présente un exemple de noms d'instances de ressources mis à jour :
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"]
Combinez les noms des instances de ressources avec les ID d'importation associés pour obtenir les commandes terraform import
. La liste suivante présente un exemple de commandes 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'
Enregistrez ces commandes d'importation pour référence ultérieure.
Sauvegarder l'état Terraform
Avant de procéder à la migration, nous vous recommandons de créer une sauvegarde de l'état Terraform. Utilisez la commande Terraform suivante pour créer une sauvegarde dans le fichier terraform.tfstate.backup
.
terraform state pull > terraform.tfstate.backup
Si vous modifiez l'état Terraform de manière inattendue, vous pouvez utiliser le fichier de sauvegarde terraform.tfstate.backup
pour restaurer l'état Terraform d'origine à l'aide de la commande suivante :
terraform state push terraform.tfstate.backup
Migrer des ressources organizationSecurityPolicies
Cette section explique comment migrer vos configurations Terraform des méthodes organizationSecurityPolicies
vers les méthodes firewallPolicies
.
Supprimer les ressources existantes de l'état Terraform
Pour supprimer les ressources organizationSecurityPolicies
trouvées dans la section Identifier les ressources à migrer de l'état Terraform, exécutez la commande Terraform suivante.
terraform state list | grep ^google_compute_organization_security_policy | while read -r resource; do terraform state rm "$resource" done
Mettre à jour la configuration Terraform
Pour mettre à jour votre fichier de configuration Terraform, recherchez les définitions des ressources que vous avez trouvées dans la section Identifier les ressources à migrer. Utilisez la commande suivante pour trouver les définitions.
grep -r google_compute_organization_security_policy .
Par exemple, le fichier de configuration Terraform définit la règle google_compute_organization_security_policy.policy
de la manière suivante :
resource "google_compute_organization_security_policy" "policy" { … }
Utilisez le tableau suivant pour modifier la définition d'une ressource de règle de sécurité de l'organisation afin de créer une ressource de stratégie de pare-feu hiérarchique.
Ressource Terraform existante | Nouvelle ressource Terraform | |
---|---|---|
Nom de la ressource | google_compute_organization_security_policy | google_compute_firewall_policy |
Nom du champ dans la règle | display_name |
short_name |
Utilisez le tableau suivant pour modifier la définition d'une ressource d'association de stratégie de sécurité d'organisation afin de créer une ressource d'association de stratégie de pare-feu hiérarchique.
Ressource Terraform existante | Nouvelle ressource Terraform | |
---|---|---|
Nom de la ressource | google_compute_organization_security_policy_association | google_compute_firewall_policy_association |
Nom du champ dans l'association | policy_id |
firewall_policy |
Nom du champ dans l'association | attachment_id |
attachment_target |
Utilisez le tableau suivant pour modifier la définition d'une ressource de règle de stratégie de sécurité d'organisation afin de créer une ressource de règle de stratégie de pare-feu hiérarchique.
Ressource Terraform existante | Nouvelle ressource Terraform | |
---|---|---|
Nom de la ressource | google_compute_organization_security_policy_rule | google_compute_firewall_policy_rule |
Nom du champ dans la règle | policy_id (ID de la règle de sécurité) |
firewall_policy |
Nom du champ supprimé de la règle | versioned_expr |
— (le champ n'existe pas) |
Définition de l'objet match :
Supprimez l'ensemble config et remplacez layer4_config par 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 } } |
Nom du champ dans la règle | layer4_config |
layer4_configs |
Vous pouvez utiliser la commande Terraform suivante pour vérifier si la configuration Terraform modifiée est valide :
terraform validate
Importer des ressources dans l'état Terraform
Pour importer des ressources firewallPolicies
dans votre fichier de configuration Terraform, exécutez les commandes d'importation Terraform que vous avez générées dans la section Préparer les commandes d'importation à l'aide d'un script automatisé ou Préparer les commandes d'importation manuellement.
Une fois que vous avez importé les ressources firewallPolicies
, Terraform y accède à l'aide des méthodes firewallPolicies.
Vérifier votre configuration Terraform et corriger les écarts
Exécutez la commande Terraform suivante pour vérifier les actions.
terraform plan
Étant donné que la migration ne modifie aucune ressource Google Cloud sous-jacente, le plan créé par Terraform ne doit contenir aucune action.
Par exemple, dans le résultat suivant obtenu en exécutant la commande terraform plan
, les actions Terraform indiquent que name
dans la ressource google_compute_firewall_policy_association
doit être mis à jour.
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) }
Dans ce cas, vous devez vérifier et mettre à jour le fichier de configuration Terraform afin que l'attribut name
soit cohérent avec le nom déjà installé.
Vous pouvez configurer Terraform pour modifier le name
attendu dans la ressource google_compute_firewall_policy_association
et le remplacer par sa valeur d'origine locations/global/securityPolicies/12345-folders/23456
en remplaçant le champ name
dans la configuration comme suit :
name = "${replace(local.policy_id, "firewallPolicies", "securityPolicies")}-${each.value}"
La modification précédente utilise la fonction "replace" pour remplacer la valeur de local.policy_id
par securityPolicies
au lieu de firewallPolicies
. Étant donné que Terraform attend désormais locations/global/securityPolicies/12345-folders/23456
pour l'attribut name
, l'exécution de terraform plan
n'affiche plus l'action Terraform liée à l'attribut name
.
Si la commande terraform plan
n'indique aucune modification ni action Terraform, la migration est terminée.
Étapes suivantes
- En savoir plus sur les méthodes firewallPolicies