Tous les produits
Search
Centre de documentation

Key Management Service:Mettre à jour les configurations Terraform après une migration

Dernière mise à jour :Aug 24, 2026

Cette rubrique explique comment mettre à jour votre configuration Terraform après la migration d'une ressource dans un environnement Terraform.

Pourquoi mettre à jour la configuration Terraform

Après la migration, les attributs des ressources changent comme suit :

  • La migration d'une clé principale client (CMK) ou d'un secret depuis une instance partagée Key Management Service (KMS) 1,0 vers une instance KMS 3.0 associe la ressource à la nouvelle instance. Cela ajoute un attribut d'ID d'instance KMS à la ressource.

  • Si vous migrez une clé avec un niveau de protection HSM vers une instance de gestion de clés logicielle, son niveau de protection passe à SOFTWARE.

Lorsque Terraform détecte que vos fichiers de configuration ne correspondent pas à l'état réel de votre infrastructure, il crée un plan d'exécution pour les aligner. Cette divergence peut amener Terraform à détruire la CMK ou le secret migré et à en créer un nouveau. Pour éviter cela, mettez à jour votre configuration Terraform une fois la migration terminée.

Solutions de mise à jour Terraform

KMS propose deux solutions pour mettre à jour votre configuration Terraform. Choisissez celle qui correspond le mieux à votre cas d'utilisation.

Critères

Solution 1 : Ajouter ignore_changes (recommandée)

Solution 2 : Ajouter dkms_instance_id

Fonctionnement

Ajoutez l'argument ignore_changes au bloc lifecycle. Cela indique à Terraform d'ignorer les modifications d'attributs causées par la migration lors des opérations plan et apply.

Déclarez explicitement le dkms_instance_id dans la configuration de la ressource pour qu'il corresponde à l'état réel de la ressource.

Gère la modification de dkms_instance_id

Oui

Oui

Gère la modification de protection_level

Oui

Non

Modification du code

Évite les modifications du code de logique métier.

Nécessite des modifications du code de logique métier.

Compatibilité des versions

Fonctionne avec les versions 1.235.0 et antérieures du fournisseur Terraform.

Remarque

Pour les versions 1.235.0 et ultérieures de Terraform, vous n'avez plus besoin d'ignorer dkms_instance_id. Vous pouvez supprimer dkms_instance_id du paramètre ignore_changes.

Fonctionne avec toutes les versions du fournisseur.

Cas d'utilisation

  • Migration d'une clé d'un HSM vers une instance de gestion de clés logicielle, ce qui modifie le niveau de protection en SOFTWARE.

  • Lorsqu'il est difficile de modifier le code de logique métier.

  • Scénarios où le niveau de protection ne change pas.

  • Lorsque vous devez maintenir votre configuration Terraform parfaitement synchronisée avec l'état réel de la ressource.

Solution 1 : Ajouter ignore_changes

Pour la ressource alicloud_kms_key, procédez comme suit :

  1. Ajoutez l'instruction ignore_changes = [dkms_instance_id,automatic_rotation,rotation_interval,protection_level].

  2. Si la rotation des clés était désactivée avant la migration, activez-la une fois la migration terminée. Pour plus d'informations, consultez Rotation des clés.

  3. Définissez une stratégie de clé par défaut. Pour créer une stratégie personnalisée, consultez Présentation des stratégies de clé.

L'exemple suivant active la rotation des clés avec un intervalle de 90 jours et définit une stratégie de clé par défaut. Adaptez la configuration à vos besoins métier. Pour plus de détails sur chaque paramètre, consultez alicloud_kms_key.

resource "alicloud_kms_key" "default_key_encrypt_decrypt" {
 #   add this
  lifecycle {
    ignore_changes = [dkms_instance_id,automatic_rotation,rotation_interval,protection_level]
  }
  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
  #   end of add
  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"
    }
}

Pour la ressource alicloud_kms_secret, procédez comme suit :

  1. Ajoutez l'instruction ignore_changes = [dkms_instance_id].

  2. Si la rotation des secrets était désactivée avant la migration, activez-la une fois la migration terminée.

  3. Définissez une stratégie de secret par défaut. Pour créer une stratégie personnalisée, consultez Présentation des stratégies de secret.

Dans l'exemple suivant, la rotation des secrets est désactivée et une stratégie de secret par défaut est définie. Adaptez la configuration à vos besoins métier. Pour plus de détails sur chaque paramètre, consultez 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 add
  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"
}

Solution 2 : Ajouter dkms_instance_id

Cet exemple montre comment mettre à jour votre configuration après avoir migré la CMK fecbd43a-*****-9c051c8cc26d vers l'instance KMS kst-hkk66e****boq8qsxxgxd.

  1. Dans le fichier main.tf du répertoire racine, ajoutez le code suivant.

    1. Dans locals, ajoutez 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.

    2. Dans "alicloud_kms_key", ajoutez dkms_instance_id = var.dkms_instance_id.

    3. Dans "alicloud_kms_secret", ajoutez dkms_instance_id = var.dkms_instance_id.

    Exemple :

    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
      #   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
    }
    
  2. Dans le fichier variable.tf du répertoire racine, définissez la variable dkms_instance_id.

    Important

    La valeur de default doit être "" ou null.

    # module default variable
    variable "dkms_instance_id" {
      description = "The ID of the KMS instance."
      type        = string
      default     = ""
    }
    # variables.tf
    variable "create_kms" {
    }
    variable "use_existing_key" {
      description = "Whether to create key. If false, you can speci..."
      type        = bool
      default     = false
    }
    variable "dkms_instance_id" {
      description = "The ID of the KMS instance."
      type        = string
      default     = ""
    }
    variable "policy" {
      description = " The content of the key policy. The value is i..."
      type        = string
      default     = ""
    }
    variable "automatic_rotation" {
      description = "Specifies whether to enable automatic key rota..."
      type        = string
      default     = "Disabled"
    }
    # main.tf
    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.use_existing_key == true || alicloud_kms_key.kms.0.rotation_interval != "" ? alicloud_kms_key.kms.0.rotation_interval : null
      ciphertext_blob   = var.decrypt == true || alicloud_kms_ciphertext.kms.0.ciphertext_blob != "" ? alicloud_kms_ciphertext.kms.0.ciphertext_blob : null
      encryption_context = var.decrypt == true || alicloud_kms_ciphertext.kms.0.encryption_context != "" ? alicloud_kms_ciphertext.kms.0.encryption_context : null
      plaintext = var.decrypt == true ||alicloud_kms_ciphertext.kms.0.plaintext != "" ? alicloud_kms_ciphertext.kms.0.plaintext : 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
    }
  3. Dans le module de votre clé, ajoutez l'ID de l'instance, définissez la stratégie de clé et configurez la rotation des clés selon vos besoins.

    • Intervalle de rotation : l'exemple utilise un intervalle de 90 jours. Modifiez cette valeur si nécessaire.

    • ID de l'instance KMS : un exemple est kst-hkk66e****boq8qsxxgxd. Remplacez l'exemple par votre ID réel.

    • Stratégie de clé : l'exemple fournit une stratégie par défaut. Pour créer une stratégie personnalisée, consultez Présentation des stratégies de clé.

      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
    # In examples/complete/main.tf (module call)
    module "kms" {
      source = "../.." 
      region = var.region
      profile = var.profile
      #key
      description            = "Hello_KMS"
      pending_window_in_days = "7"
      status                 = "Enabled"
      automatic_rotation = "Enabled"
      rotation_interval = "90d"
      dkms_instance_id    = "kst-hkk66exxx"
      policy = <<EOF
      {
        "Statement": [
          {
            "Action": [
              "kms:*"
            ]
          }
        ],
        "Version": "1"
      }
      EOF
    }
    # In main.tf (resource block)
    locals {
      rotation_interval= var.automatic_rotation == "Enabled" || ali...
      ciphertext_blob    = var.decrypt == true || alicloud_kms_cip...
      encryption_context = var.decrypt == true || alicloud_kms_cip...
      plaintext = var.decrypt == true ||alicloud_kms...
    }
    resource "alicloud_kms_key" "kms" {
      count              = var.use_existing_key == true ? 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
      lifecycle {
        # ...
      }
    }
  4. Dans le module de votre secret, ajoutez l'ID de l'instance, définissez la stratégie de secret et configurez la rotation selon vos besoins.

    • Intervalle de rotation : la rotation n'est pas activée dans l'exemple. Modifiez ce paramètre si nécessaire.

    • ID de l'instance KMS : un exemple est kst-hkk66e****boq8qsxxgxd. Remplacez-le par l'ID réel de votre instance.

    • Stratégie de secret : l'exemple fournit une stratégie par défaut. Pour créer une stratégie personnalisée, consultez Présentation des stratégies de secret.

       #secret
        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