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:
Hapus resource yang ada dari status Terraform. Hapus resource
organizationSecurityPolicies
yang ada dari status Terraform.Perbarui konfigurasi Terraform. Edit file konfigurasi Terraform untuk mengganti jenis, nama, dan atribut resource yang ada dengan jenis, nama, dan atribut resource baru.
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:
- google_compute_firewall_policy
- google_compute_firewall_policy_association
- google_compute_firewall_policy_rule
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 perintahterraform 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
- Pelajari lebih lanjut metode firewallPolicies.