全部产品
Search
文档中心

Key Management Service:Perubahan konfigurasi pasca-migrasi untuk KMS yang dikelola Terraform

更新时间:Jul 02, 2025

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 daya alicloud_kms_key dan alicloud_kms_secret. Ini mencegah Terraform mendeteksi perubahan tersebut.

    • Kompatibilitas: Berfungsi dengan versi Terraform 1.235.0 dan sebelumnya. Untuk versi selanjutnya, hapus dkms_instance_id dari argumen ignore_changes.

    • Migrasi kunci perangkat keras ke perangkat lunak: Jika memigrasikan kunci dari tingkat perlindungan perangkat keras ke perangkat lunak, tambahkan protection_level ke argumen ignore_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_id ke konfigurasi Terraform Anda. Ini memungkinkan Terraform mengidentifikasi dkms_instance_id untuk kunci dan rahasia yang dimigrasikan, dengan benar mengonfigurasi sumber daya alicloud_kms_key dan alicloud_kms_secret dalam instance KMS baru. Ini memastikan migrasi yang mulus untuk kunci dan rahasia Alibaba Cloud Anda.

Prosedur

Solusi 1: Pertahankan konfigurasi yang ada

  1. Tambahkan ignore_changes = [dkms_instance_id, automatic_rotation, rotation_interval] di sumber daya alicloud_kms_key dan alicloud_kms_secret.

  2. Jika rotasi kunci dan rahasia dinonaktifkan sebelum migrasi, aktifkan setelah migrasi.

    Untuk informasi lebih lanjut, lihat Rotasi Kunci dan Rotasi Rahasia.

  3. 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

  1. Perbarui file main.tf di direktori root.

    1. 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 : null ke blok locals.

    2. Tambahkan dkms_instance_id = var.dkms_instance_id ke sumber daya alicloud_kms_key.

    3. Tambahkan dkms_instance_id = var.dkms_instance_id ke 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
    }
    
  2. Definisikan variabel dkms_instance_id di file variable.tf yang terletak di direktori root.

    Penting

    Nilai default harus diatur ke "" (string kosong) atau null.

    # variabel default modul
    variable "dkms_instance_id" {
      description = "ID dari instance KMS."
      type        = string
      default     = ""
    }

  3. 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"
        }
      EOF

  4. Di 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