Ketika Key Management Service bersama (juga disebut shared KMS atau KMS 1.0) dimigrasikan ke instance KMS 3.0, kunci dan rahasia dikaitkan dengan instance KMS tertentu. Ini berarti atribut ID instance KMS akan ditambahkan. Jika shared KMS Anda dikelola oleh Terraform, perubahan konfigurasi Terraform diperlukan karena atribut ID instance telah ditambahkan. Tanpa perubahan ini, migrasi gagal. Topik ini menjelaskan cara memodifikasi konfigurasi Terraform.
Mengapa memodifikasi konfigurasi Terraform
Setelah migrasi selesai, jika Anda menjalankan perintah terraform plan dan terraform apply, Terraform dapat mendeteksi perubahan atribut dan mencoba memperbarui sumber daya agar sesuai dengan konfigurasi Anda. Akibatnya, Customer Master Keys (CMKs) atau rahasia yang dimigrasikan dilepaskan, dan CMK baru atau rahasia dibuat. Untuk mencegah hal ini, Anda harus memperbarui konfigurasi Terraform yang ada setelah migrasi.
Ikhtisar solusi
Dua solusi tersedia untuk mengatasi masalah pelepasan sumber daya ketika Anda menjalankan perintah terraform plan dan terraform apply setelah migrasi. Pilih solusi yang sesuai dengan skenario Anda:
Solusi 1: Pertahankan konfigurasi yang ada
Solusi ini mempertahankan konfigurasi yang ada tanpa menerapkan perubahan baru. Tambahkan
ignore_changes = ["dkms_instance_id", "automatic_rotation", "rotation_interval"]ke sumber dayaalicloud_kms_keydanalicloud_kms_secret. Ini mencegah Terraform mendeteksi perubahan tersebut.Kompatibilitas: Berfungsi dengan versi Terraform 1.235.0 dan sebelumnya. Untuk versi selanjutnya, hapus
dkms_instance_iddari argumenignore_changes.Migrasi kunci perangkat keras ke perangkat lunak: Jika memigrasikan kunci dari tingkat perlindungan perangkat keras ke perangkat lunak, tambahkan
protection_levelke argumenignore_changes:ignore_changes = ["dkms_instance_id", "automatic_rotation", "rotation_interval", "protection_level"].
Solusi 2: Terapkan perubahan baru
Solusi ini menggabungkan perubahan dengan menambahkan argumen terkait
dkms_instance_idke konfigurasi Terraform Anda. Ini memungkinkan Terraform mengidentifikasidkms_instance_iduntuk kunci dan rahasia yang dimigrasikan, dengan benar mengonfigurasi sumber dayaalicloud_kms_keydanalicloud_kms_secretdalam instance KMS baru. Ini memastikan migrasi yang mulus untuk kunci dan rahasia Alibaba Cloud Anda.
Prosedur
Solusi 1: Pertahankan konfigurasi yang ada
Tambahkan
ignore_changes = [dkms_instance_id, automatic_rotation, rotation_interval]di sumber daya alicloud_kms_key dan alicloud_kms_secret.Jika rotasi kunci dan rahasia dinonaktifkan sebelum migrasi, aktifkan setelah migrasi.
Untuk informasi lebih lanjut, lihat Rotasi Kunci dan Rotasi Rahasia.
Konfigurasikan kebijakan default untuk kunci dan rahasia.
Untuk informasi lebih lanjut, lihat Konfigurasikan kebijakan kunci dan Konfigurasikan kebijakan rahasia.
Contoh modifikasi konfigurasi sumber daya alicloud_kms_key
Pada contoh berikut, rotasi kunci dengan interval 90 hari diaktifkan dan kebijakan kunci default diatur. Untuk informasi lebih lanjut tentang setiap parameter, lihat alicloud_kms_key.
resource "alicloud_kms_key" "default_key_encrypt_decrypt" {
# tambahkan ini
lifecycle {
ignore_changes = [dkms_instance_id,automatic_rotation,rotation_interval]
}
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
# akhir tambahan
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 modifikasi konfigurasi sumber daya alicloud_kms_secret
Pada contoh berikut, rotasi rahasia tidak diaktifkan, dan kebijakan rahasia default diatur.
Untuk informasi lebih lanjut tentang setiap parameter, lihat alicloud_kms_secret.
resource "alicloud_kms_secret" "kms_secret_general" {
# tambahkan ini
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
# akhir tambahan
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: Terapkan perubahan baru
Perbarui file
main.tfdi direktori root.Tambahkan
dkms_instance_id = var.use_existing_key == true || alicloud_kms_key.kms.0.dkms_instance_id != "" ? alicloud_kms_key.kms.0.dkms_instance_id : nullke blok locals.Tambahkan
dkms_instance_id = var.dkms_instance_idke sumber daya alicloud_kms_key.Tambahkan
dkms_instance_id = var.dkms_instance_idke sumber daya alicloud_kms_secret.
Contoh:
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] 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 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 # tambahkan ini dkms_instance_id = var.dkms_instance_id # akhir tambahan } 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 # tambahkan ini dkms_instance_id = var.dkms_instance_id # akhir tambahan secret_data = var.secret_data secret_data_type =var.secret_data_type enable_automatic_rotation = var.enable_automatic_rotation }Definisikan variabel
dkms_instance_iddi filevariable.tfyang terletak di direktori root.PentingNilai default harus diatur ke "" (string kosong) atau null.
# variabel default modul variable "dkms_instance_id" { description = "ID dari instance KMS." type = string default = "" }Di modul terkait kunci, tambahkan ID instance, atur kebijakan kunci, dan putuskan apakah akan mengaktifkan rotasi sesuai kebutuhan.
Contoh di bawah ini menunjukkan hal berikut:
Interval rotasi: Diatur ke 90 hari.
ID instance KMS: Menggunakan
kst-hkk66e****boq8qsxxgxd.Kebijakan kunci: Kebijakan default diatur. Jika ingin menetapkan kebijakan kustom, lihat Ikhtisar Kebijakan Kunci.
Lakukan penyesuaian pada contoh berdasarkan bisnis 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" } EOFDi modul terkait rahasia, tambahkan ID instance, atur kebijakan rahasia, dan putuskan apakah akan mengaktifkan rotasi sesuai kebutuhan.
Contoh di bawah ini menunjukkan hal berikut:
Rotasi: Tidak diaktifkan.
ID instance KMS: Menggunakan
kst-hkk66e****boq8qsxxgxd.Kebijakan rahasia: Kebijakan default diatur. Jika ingin menetapkan kebijakan kustom, lihat Ikhtisar Kebijakan Rahasia.
Lakukan penyesuaian pada contoh berdasarkan bisnis Anda.
#rahasia 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" policy = <<EOF { "Statement": [ { "Action": [ "kms:*" ], "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::5135****76002605:*" ] }, "Resource": [ "*" ], "Sid": "kms default secret policy" } ], "Version": "1" } EOF force_delete_without_recovery = true