Saat Anda melakukan migrasi Key Management Service (KMS 1.0) bersama ke KMS 3.0, setiap kunci dan rahasia akan dikaitkan dengan instans KMS tertentu, sehingga menambahkan atribut dkms_instance_id. Jika Anda mengelola resource KMS menggunakan Terraform, perbarui konfigurasi Anda sebelum menjalankan terraform plan atau terraform apply. Tanpa pembaruan ini, Terraform akan mendeteksi atribut baru tersebut, menghapus Customer Master Keys (CMK) dan rahasia yang telah dimigrasi, lalu membuat ulang—yang berpotensi menyebabkan kehilangan data.
Pilih solusi
| Situasi | Solusi yang direkomendasikan |
|---|---|
| Perubahan minimal diperlukan; Terraform tidak perlu melacak asosiasi instans KMS | Solusi 1: Pertahankan konfigurasi yang ada |
| Konfigurasi Terraform harus sepenuhnya mencerminkan asosiasi instans KMS setelah migrasi | Solusi 2: Gunakan konfigurasi baru |
Solusi 1: Pertahankan konfigurasi yang ada
Tambahkan blok lifecycle dengan ignore_changes ke setiap resource alicloud_kms_key dan alicloud_kms_secret. Hal ini memberi tahu Terraform untuk mengabaikan atribut dkms_instance_id selama operasi plan dan apply, sehingga mencegah resource dihapus dan dibuat ulang.
Solusi ini berfungsi dengan versi provider Terraform 1.235.0 dan sebelumnya. Untuk versi yang lebih baru, hapus dkms_instance_id dari daftar ignore_changes.
Jika Anda melakukan migrasi kunci dari tingkat proteksi hardware ke software, tambahkan jugaprotection_levelke dalam daftarignore_changes:ignore_changes = [dkms_instance_id, automatic_rotation, rotation_interval, protection_level].
Langkah-langkah
Tambahkan blok
lifecycleberikut ke setiap resourcealicloud_kms_keydanalicloud_kms_secret:lifecycle { ignore_changes = [dkms_instance_id, automatic_rotation, rotation_interval] }Jika rotasi dinonaktifkan pada kunci atau rahasia apa pun sebelum migrasi, aktifkan kembali setelah migrasi. Melewatkan langkah ini akan menyebabkan rotasi tetap dinonaktifkan secara permanen pada resource yang terdampak.
Konfigurasikan kebijakan default untuk kunci dan rahasia Anda. Tanpa kebijakan tersebut, akses ke resource hanya mengikuti kebijakan RAM tingkat akun.
Contoh: alicloud_kms_key
Contoh berikut mengaktifkan rotasi kunci dengan interval 90 hari dan menetapkan kebijakan kunci default. Baris yang ditandai dengan # Add this merupakan penambahan baru. Untuk semua parameter yang didukung, lihat alicloud_kms_key.
resource "alicloud_kms_key" "default_key_encrypt_decrypt" {
# Add this
lifecycle {
ignore_changes = [dkms_instance_id, automatic_rotation, rotation_interval]
}
# End of added block
automatic_rotation = "Enabled"
rotation_interval = "90d"
policy = <<EOF
{
"Statement": [
{
"Action": [
"kms:*"
],
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::5135****76002605:*"
]
},
"Resource": [
"*"
],
"Sid": "kms default key policy"
}
],
"Version": "1"
}
EOF
description = "test tf"
key_usage = "ENCRYPT/DECRYPT"
key_spec = "Aliyun_AES_256"
origin = "Aliyun_KMS"
pending_window_in_days = 7
tags = {
"Environment" = "test"
"Name" = "KMS-01"
"SupportTeam" = "PlatformEngineering"
"Contact" = "group@example.com"
}
}Contoh: alicloud_kms_secret
Contoh berikut menonaktifkan rotasi rahasia dan menetapkan kebijakan rahasia default. Baris yang ditandai dengan # Add this merupakan penambahan baru. Untuk semua parameter yang didukung, lihat alicloud_kms_secret.
resource "alicloud_kms_secret" "kms_secret_general" {
# Add this
lifecycle {
ignore_changes = [dkms_instance_id]
}
enable_automatic_rotation = false
policy = <<EOF
{
"Statement": [
{
"Action": [
"kms:*"
],
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::5135****76002605:*"
]
},
"Resource": [
"*"
],
"Sid": "kms default secret policy"
}
],
"Version": "1"
}
EOF
# End of added block
secret_name = "kms_secret_general1"
description = "secret_data_kms_secret_general"
secret_type = "Generic"
force_delete_without_recovery = true
encryption_key_id = alicloud_kms_key.default_key_encrypt_decrypt.id
version_id = "v1"
secret_data_type = "text"
secret_data = "secret_data_kms_secret_general1"
}Solusi 2: Gunakan konfigurasi baru
Tambahkan dkms_instance_id sebagai argumen eksplisit dalam konfigurasi Terraform Anda. Terraform membaca ID instans dari resource yang telah dimigrasi dan mengaitkan resource alicloud_kms_key dan alicloud_kms_secret dengan instans KMS 3.0 secara tepat.
Langkah-langkah
Perbarui
main.tfdi direktori root dengan tiga penambahan berikut: Contoh berikut menunjukkan ketiga penambahan tersebut dalam konteksnya. Baris yang ditandai dengan# Add thismerupakan penambahan baru:Pada blok
locals, tambahkan: ``hcl dkms_instance_id = var.use_existing_key == true || alicloud_kms_key.kms.0.dkms_instance_id != "" ? alicloud_kms_key.kms.0.dkms_instance_id : null``Pada resource
alicloud_kms_key, tambahkan: ``hcl dkms_instance_id = var.dkms_instance_id``Pada resource
alicloud_kms_secret, tambahkan: ``hcl dkms_instance_id = var.dkms_instance_id``
locals { this_kms_key_id = var.use_existing_key == true || var.existing_key_id != "" ? var.existing_key_id : concat(alicloud_kms_key.kms.*.id, [""])[0] # Add this dkms_instance_id = var.use_existing_key == true || alicloud_kms_key.kms.0.dkms_instance_id != "" ? alicloud_kms_key.kms.0.dkms_instance_id : null # End of add policy = var.use_existing_key == true || alicloud_kms_key.kms.0.policy != "" ? alicloud_kms_key.kms.0.policy : null automatic_rotation = var.use_existing_key == true || alicloud_kms_key.kms.0.automatic_rotation != "" ? alicloud_kms_key.kms.0.automatic_rotation : null rotation_interval = var.automatic_rotation == "Enabled" || alicloud_kms_key.kms.0.rotation_interval != "" ? alicloud_kms_key.kms.0.rotation_interval : null secret_name = var.secret == true || alicloud_kms_secret.kms.0.secret_name != "" ? alicloud_kms_secret.kms.0.secret_name : null secret_type = var.secret == true || alicloud_kms_secret.kms.0.secret_type != "" ? alicloud_kms_secret.kms.0.secret_type : null version_id = var.secret == true || alicloud_kms_secret.kms.0.version_id != "" ? alicloud_kms_secret.kms.0.version_id : null force_delete_without_recovery = var.secret == true || alicloud_kms_secret.kms.0.force_delete_without_recovery != "" ? alicloud_kms_secret.kms.0.force_delete_without_recovery : null secret_data = var.secret == true || alicloud_kms_secret.kms.0.secret_data != "" ? alicloud_kms_secret.kms.0.secret_data : null secret_data_type = var.secret == true || alicloud_kms_secret.kms.0.secret_data_type != "" ? alicloud_kms_secret.kms.0.secret_data_type : null enable_automatic_rotation = var.secret == true || alicloud_kms_secret.kms.0.enable_automatic_rotation != "" ? alicloud_kms_secret.kms.0.enable_automatic_rotation : null } resource "alicloud_kms_key" "kms" { count = var.use_existing_key == true ? 0 : var.create_kms ? 1 : 0 description = var.description key_usage = var.key_usage pending_window_in_days = var.pending_window_in_days status = var.status policy = var.policy automatic_rotation = var.automatic_rotation rotation_interval = var.rotation_interval # Add this dkms_instance_id = var.dkms_instance_id # End of add } resource "alicloud_kms_secret" "kms" { count = var.existing_key_id != "" ? var.existing_key_id : var.encrypt ? 1 : 0 secret_name = var.secret_name encryption_key_id = concat(alicloud_kms_key.kms.*.id, [""])[0] secret_type = var.secret_type version_id = var.version_id force_delete_without_recovery = var.force_delete_without_recovery # Add this dkms_instance_id = var.dkms_instance_id # End of add secret_data = var.secret_data secret_data_type = var.secret_data_type enable_automatic_rotation = var.enable_automatic_rotation }Definisikan variabel
dkms_instance_iddalam filevariable.tfdi direktori root.PentingTetapkan nilai default sebagai
""(string kosong) ataunull. Nilai default lainnya akan menyebabkan Terraform mencoba mengaitkan semua kunci dan rahasia yang ada ke instans yang tidak ada.# Module default variable variable "dkms_instance_id" { description = "The ID of the KMS instance." type = string default = "" }Pada modul kunci, tetapkan ID instans, konfigurasikan kebijakan kunci, dan aktifkan rotasi sesuai kebutuhan. Contoh berikut menggunakan instans KMS
kst-hkk66e****boq8qsxxgxd, mengaktifkan rotasi dengan interval 90 hari, dan menetapkan kebijakan kunci default. Untuk kebijakan kunci kustom, lihat Key policy overview. Sesuaikan nilai-nilainya agar sesuai dengan konfigurasi Anda.automatic_rotation = "Enabled" rotation_interval = "90d" dkms_instance_id = "kst-hkk66e****boq8qsxxgxd" policy = <<EOF { "Statement": [ { "Action": [ "kms:*" ], "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::5135****76002605:*" ] }, "Resource": [ "*" ], "Sid": "kms default key policy" } ], "Version": "1" } EOFPada modul rahasia, tetapkan ID instans, konfigurasikan kebijakan rahasia, dan aktifkan rotasi sesuai kebutuhan. Contoh berikut menggunakan instans KMS
kst-hkk66e****boq8qsxxgxd, menonaktifkan rotasi, dan menetapkan kebijakan rahasia default. Untuk kebijakan rahasia kustom, lihat Secret policy overview. Sesuaikan nilai-nilainya agar sesuai dengan konfigurasi Anda.# Secret configuration secret_data = "secret_data_kms_secret_general1" secret_name = "kms_secret_general1" version_id = "v1" secret_data_type = "text" secret_type = "Generic" enable_automatic_rotation = false dkms_instance_id = "kst-hkk66e****boq8qsxxgxd" force_delete_without_recovery = true policy = <<EOF { "Statement": [ { "Action": [ "kms:*" ], "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::5135****76002605:*" ] }, "Resource": [ "*" ], "Sid": "kms default secret policy" } ], "Version": "1" } EOF