Memigrasikan resource Terraform dari organizationSecurityPolicies ke firewallPolicies

Google merekomendasikan penggunaan metode firewallPolicies untuk mengonfigurasi kebijakan Cloud Next Generation Firewall. Dokumen ini memandu Anda memigrasikan konfigurasi Terraform untuk menggunakan metode firewallPolicies, bukan metode organizationSecurityPolicies.

Metode firewallPolicies menyediakan opsi pengelolaan organisasi dengan kontrol terperinci. Sebaiknya gunakan metode firewallPolicies untuk pengelolaan resource menggunakan Terraform. Dokumen ini mengasumsikan bahwa Anda sudah memahami praktik terbaik Terraform dan operasi Terraform dasar.

Kebijakan firewall memungkinkan Anda mengelompokkan beberapa aturan firewall yang dapat secara eksplisit menolak atau mengizinkan koneksi. Untuk mengetahui informasi selengkapnya tentang kebijakan firewall, lihat Kebijakan firewall.

Manfaat bermigrasi ke metode firewallPolicies

Metode firewallPolicies memberikan pengalaman firewall yang konsisten di seluruh hierarki resourceGoogle Cloud dan menawarkan beberapa manfaat operasional.

  • Keamanan organisasi yang ditingkatkan: metode firewallPolicies menerapkan keamanan organisasi dengan menggunakan kontrol izin Identity and Access Management (IAM) lanjutan.

  • Kemudahan operasi: metode firewallPolicies mendukung penggunaan fitur lanjutan—seperti objek nama domain yang sepenuhnya memenuhi syarat (FQDN), objek geolokasi, deteksi ancaman, pencegahan intrusi, dan grup alamat—untuk kemudahan dan efisiensi operasional.

Cara kerja migrasi

Sebelum memulai proses migrasi, Anda harus menyelesaikan langkah-langkah berikut, yang dijelaskan di bagian Sebelum memulai:

  • Pastikan Anda menggunakan penyedia Terraform versi 4.0.0 atau yang lebih baru untuk Google Cloud.
  • Pastikan status Terraform sesuai dengan konfigurasi saat ini.
  • Identifikasi resource yang berada dalam cakupan migrasi, termasuk kebijakan, aturan, dan asosiasi.
  • Siapkan perintah untuk mengimpor resource firewallPolicies baru ke status Terraform secara manual atau menggunakan skrip otomatis.
  • Tinjau prosedur pencadangan dan pemulihan yang direkomendasikan untuk versi Terraform Anda, dan buat cadangan status Terraform Anda saat ini.

Proses mengonfigurasi ulang Terraform untuk memigrasikan resource organizationSecurityPolicies mencakup langkah-langkah berikut:

  1. Hapus resource yang ada dari status Terraform. Hapus resource organizationSecurityPolicies yang ada dari status Terraform.

  2. Perbarui konfigurasi Terraform. Edit file konfigurasi Terraform untuk mengganti jenis, nama, dan atribut resource yang ada dengan jenis, nama, dan atribut resource baru.

  3. Mengimpor resource baru ke status Terraform. Impor resource firewallPolicies baru ke status Terraform.

Sebelum memulai

Bagian ini menjelaskan prasyarat untuk proses migrasi.

Memastikan penyedia Terraform didukung

Pastikan Anda menggunakan penyedia Terraform untukGoogle Cloudversi 4.0.0 atau yang lebih baru, yang mencakup resource berikut dari registry Terraform:

Pastikan status Terraform sudah terbaru

Jalankan perintah Terraform berikut untuk memeriksa apakah status Terraform cocok dengan konfigurasi saat ini.

terraform plan

Untuk menghindari inkonsistensi, sebaiknya terapkan perubahan atau tindakan yang tertunda sebelum melanjutkan proses migrasi.

Mengidentifikasi resource yang akan dimigrasikan

Jalankan perintah Terraform berikut untuk membuat daftar resource yang berada dalam cakupan migrasi, termasuk kebijakan, aturan, dan asosiasi.

terraform state list | grep ^google_compute_organization_security_policy

Outputnya mirip dengan hal berikut ini:

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"]

Anda memerlukan resource ini untuk bermigrasi ke metode firewallPolicies. Simpan untuk nanti.

Menyiapkan perintah impor menggunakan skrip otomatis

Untuk menghindari error atau konfigurasi yang terlewat selama migrasi, sebaiknya gunakan skrip otomatis untuk membuat perintah yang diperlukan untuk mengimpor resource firewallPolicies ke status Terraform.

Jalankan skrip Terraform berikut untuk melakukan tugas-tugas ini:

  • Buat alamat resource baru dari alamat resource yang ada.
  • Dapatkan ID resource dari alamat resource yang ada.
  • Buat ID impor (atau ID impor) dari ID resource.
  • Menampilkan perintah impor untuk semua resource firewallPolicies baru.
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

Anda memerlukan output dari skrip ini untuk mengimpor resource. Simpan output untuk nanti.

Menyiapkan perintah impor secara manual

Jika pendekatan otomatis tidak memungkinkan, Anda dapat membuat perintah untuk mengimpor resource firewallPolicies secara manual. Anda dapat menggunakan perintah terraform console untuk mendapatkan ID resource.

Perintah Terraform berikut menampilkan ID resource google_compute_organization_security_policy.policy:

echo google_compute_organization_security_policy.policy.id | terraform console

Outputnya mirip dengan hal berikut ini:

"locations/global/securityPolicies/12345"

Demikian pula, dapatkan ID resource untuk resource lain yang Anda identifikasi di bagian Identifikasi resource yang akan dimigrasikan.

Atau, Anda dapat menggunakan perintah Terraform berikut untuk mendapatkan ID resource dari semua resource yang teridentifikasi secara bersamaan:

terraform state list | grep ^google_compute_organization_security_policy | while read -r line; do echo "$line".id | terraform console; done

Outputnya mirip dengan hal berikut ini:

"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"

Untuk mengimpor resource firewallPolicies, Anda memerlukan ID impornya. ID impor terdiri dari ID numerik yang disebut nomor kebijakan, nama asosiasi, dan nomor prioritas aturan, seperti yang dijelaskan di bagian ini.

  • ID numerik setelah karakter garis miring (/) ketiga adalah nomor kebijakan, yang merepresentasikan ID impor untuk kebijakan. Tabel berikut menunjukkan contoh ID resource dan ID impor untuk kebijakan.

    ID resource ID impor
    "locations/global/securityPolicies/12345" 12345
  • Nomor kebijakan beserta nama asosiasi mewakili ID impor untuk asosiasi. Nama asosiasi adalah bagian dari ID resource yang ditampilkan setelah elemen /association/.

    Ganti karakter garis miring ke depan (/) dalam nama pengaitan dengan %2F agar perintah terraform import dapat menafsirkan nama pengaitan sebagai satu entitas. Tabel berikut menunjukkan contoh ID resource dan ID impor untuk asosiasi.

    ID resource ID impor
    "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
  • Nomor kebijakan bersama dengan nomor prioritas aturan mewakili ID impor untuk aturan. Tabel berikut menunjukkan contoh ID resource dan ID impor untuk aturan.

    ID resource ID impor
    "locations/global/securityPolicies/12345/priority/1000" 12345/1000

Untuk mengimpor resource firewallPolicies, Anda memerlukan nama instance resource yang diperbarui. Buat nama instance resource dengan mengganti awalan google_compute_organization_security_policy dengan google_compute_firewall_policy untuk semua resource yang Anda identifikasi di bagian Identifikasi resource yang akan dimigrasikan. Daftar berikut menunjukkan contoh nama instance resource yang telah diupdate:

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"]

Gabungkan nama instance resource dengan ID impor terkait untuk mendapatkan perintah terraform import. Daftar berikut menunjukkan contoh perintah 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'

Simpan perintah impor ini untuk referensi di lain waktu.

Mencadangkan status Terraform

Sebelum melanjutkan proses migrasi, sebaiknya buat cadangan status Terraform. Gunakan perintah Terraform berikut untuk membuat cadangan dalam file terraform.tfstate.backup.

terraform state pull > terraform.tfstate.backup

Jika Anda mengubah status Terraform dengan cara yang tidak diinginkan, Anda dapat menggunakan file cadangan terraform.tfstate.backup untuk memulihkan status Terraform asli dengan menggunakan perintah berikut:

terraform state push terraform.tfstate.backup

Memigrasikan resource organizationSecurityPolicies

Bagian ini menjelaskan prosedur untuk memigrasikan konfigurasi Terraform Anda dari metode organizationSecurityPolicies ke metode firewallPolicies.

Menghapus resource yang ada dari status Terraform

Untuk menghapus resource organizationSecurityPolicies yang ditemukan di bagian Mengidentifikasi resource yang akan dimigrasikan dari status Terraform, jalankan perintah Terraform berikut.

terraform state list | grep ^google_compute_organization_security_policy | while read -r resource; do
  terraform state rm "$resource"
done

Perbarui konfigurasi Terraform

Untuk memperbarui file konfigurasi Terraform, temukan definisi resource yang Anda temukan di bagian Identifikasi resource yang akan dimigrasikan. Gunakan perintah berikut untuk menemukan definisi.

grep -r google_compute_organization_security_policy .

Misalnya, file konfigurasi Terraform menentukan kebijakan google_compute_organization_security_policy.policy dengan cara berikut:

resource "google_compute_organization_security_policy" "policy" {
  …
  }

Gunakan tabel berikut untuk mengedit definisi resource kebijakan keamanan organisasi guna membuat resource kebijakan firewall hierarkis baru.

Resource Terraform yang ada Resource Terraform baru
Nama resource google_compute_organization_security_policy google_compute_firewall_policy
Nama kolom dalam kebijakan display_name short_name

Gunakan tabel berikut untuk mengedit definisi resource asosiasi kebijakan keamanan organisasi guna membuat resource asosiasi kebijakan firewall hierarkis baru.

Resource Terraform yang ada Resource Terraform baru
Nama resource google_compute_organization_security_policy_association google_compute_firewall_policy_association
Nama kolom dalam asosiasi policy_id firewall_policy
Nama kolom dalam asosiasi attachment_id attachment_target

Gunakan tabel berikut untuk mengedit definisi resource aturan kebijakan keamanan organisasi guna membuat resource aturan kebijakan firewall hierarkis baru.

Resource Terraform yang ada Resource Terraform baru
Nama resource google_compute_organization_security_policy_rule google_compute_firewall_policy_rule
Nama kolom dalam aturan policy_id (ID kebijakan keamanan) firewall_policy
Nama kolom yang dihapus dari aturan versioned_expr — (kolom tidak ada)
Definisi objek match: Hapus set config dan ubah layer4_config menjadi 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
  }
}
  
Nama kolom dalam aturan layer4_config layer4_configs

Anda dapat menggunakan perintah Terraform berikut untuk memverifikasi apakah konfigurasi Terraform yang diubah valid:

terraform validate

Mengimpor resource ke status Terraform

Untuk mengimpor resource firewallPolicies ke file konfigurasi Terraform, jalankan perintah impor Terraform yang Anda buat di bagian Siapkan perintah impor menggunakan skrip otomatis atau Siapkan perintah impor secara manual.

Setelah Anda mengimpor resource firewallPolicies, Terraform akan mengaksesnya menggunakan metode firewallPolicies.

Verifikasi konfigurasi Terraform Anda dan perbaiki perbedaan

Jalankan perintah Terraform berikut untuk memeriksa tindakan apa pun.

terraform plan

Karena migrasi tidak mengubah resource Google Cloud dasar apa pun, rencana yang dibuat Terraform tidak boleh berisi tindakan apa pun.

Misalnya, dalam output berikut yang diperoleh dengan menjalankan perintah terraform plan, tindakan Terraform menunjukkan bahwa name dalam resource google_compute_firewall_policy_association harus diperbarui.

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)
  }

Dalam hal ini, Anda harus memverifikasi dan memperbarui file konfigurasi Terraform sehingga atribut name konsisten dengan nama yang sudah diinstal.

Anda dapat mengonfigurasi Terraform untuk mengubah name yang diharapkan dalam resource google_compute_firewall_policy_association ke nilai aslinya locations/global/securityPolicies/12345-folders/23456 dengan mengganti kolom name dalam konfigurasi sebagai berikut:

name = "${replace(local.policy_id, "firewallPolicies", "securityPolicies")}-${each.value}"

Perubahan sebelumnya menggunakan fungsi penggantian untuk memperbarui nilai local.policy_id menjadi securityPolicies, bukan firewallPolicies. Karena Terraform sekarang mengharapkan locations/global/securityPolicies/12345-folders/23456 untuk atribut name, menjalankan terraform plan tidak lagi menampilkan tindakan Terraform yang terkait dengan atribut name.

Jika perintah terraform plan tidak menunjukkan adanya perubahan atau tindakan Terraform, migrasi telah selesai.

Langkah berikutnya