すべてのプロダクト
Search
ドキュメントセンター

Key Management Service:Terraform を使用したキーの作成

最終更新日:Jan 22, 2026

Terraform を使用してキーを作成および管理できます。このトピックでは、キーを作成する方法について説明します。

概要

Key Management Service (KMS) では、KMS インスタンスを購入しなくてもデフォルトのマスターキーを作成できます。KMS インスタンスでキーを作成することもできます。キーの詳細については、「キーサービスの概要」をご参照ください。

前提条件

  • すべてのリソースに対する完全な権限を持つ Alibaba Cloud アカウントを使用すると、認証情報が漏洩した場合に高いセキュリティ脅威をもたらします。Resource Access Management (RAM) ユーザーを使用し、そのユーザーの AccessKey を作成することを推奨します。詳細については、「RAM ユーザーの作成」および「AccessKey の作成」をご参照ください。

  • RAM ユーザーに権限を付与するには、AliyunKMSFullAccess ポリシーをアタッチします。このポリシーは、Key Management Service (KMS) を管理する権限を付与します。詳細については、「RAM ユーザー権限の管理」をご参照ください。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "kms:*"
          ],
          "Resource": [
            "*"
          ],
          "Condition": {}
        }
      ]
    }
  • Terraform 環境を準備します。次のいずれかの方法で Terraform を使用できます。

    Explorer で Terraform を使用する:Alibaba Cloud は Terraform のオンライン環境を提供します。Terraform をインストールする必要はありません。オンラインでログインして Terraform を使用し、テストすることができます。この方法は、コストをかけずに Terraform を迅速かつ便利にテストおよびデバッグしたいシナリオに適しています。

    Cloud Shell:Terraform コンポーネントは Alibaba Cloud の Cloud Shell にプリインストール済みで、認証情報は自動的に設定されます。Cloud Shell で直接 Terraform コマンドを実行できます。この方法は、低コストで迅速かつ便利に Terraform にアクセスして使用したいシナリオに適しています。

    Terraform のローカルでのインストールと設定:この方法は、ネットワーク接続が悪い場合や、カスタム開発環境が必要な場合に適しています。

重要

Terraform のバージョンが 0.12.28 以降であることを確認してください。現在のバージョンを確認するには、terraform --version コマンドを実行します。

使用するリソース

操作手順

この例では、KMS インスタンスでキーを作成する方法を示します。

  1. 作業ディレクトリを作成します。作業ディレクトリに、main.tf という名前の構成ファイルを作成します。main.tf は、デプロイするリソースを定義するメインの Terraform ファイルです。開始する前に、KMS インスタンスが作成されていることを確認してください。

    variable "region" {
      default = "cn-shanghai"
    }
    
    provider "alicloud" {
      region = var.region
    }
    variable "instance_name" {
      default = "tf-kms-vpc-172-16"
    }
    
    variable "instance_type" {
      default = "ecs.n1.tiny"
    }
    # データソースを使用して、利用可能なゾーンに関する情報を取得します。リソースは指定されたゾーンでのみ作成できます。
    data "alicloud_zones" "default" {
      available_disk_category     = "cloud_efficiency"
      available_resource_creation = "VSwitch"
      available_instance_type     = var.instance_type
    }
    # VPC を作成します。
    resource "alicloud_vpc" "vpc" {
      vpc_name   = var.instance_name
      cidr_block = "172.16.0.0/12"
    }
    # CIDR ブロック 172.16.0.0/21 で vSwitch を作成します。
    resource "alicloud_vswitch" "vsw" {
      vpc_id     = alicloud_vpc.vpc.id
      cidr_block = "172.16.0.0/21"
      zone_id    = data.alicloud_zones.default.zones.0.id
      vswitch_name = "terraform-example-1"
    }
    # CIDR ブロック 172.16.128.0/17 で別の vSwitch を作成します。
    resource "alicloud_vswitch" "vsw1" {
      vpc_id     = alicloud_vpc.vpc.id
      cidr_block = "172.16.128.0/17"
      zone_id    = data.alicloud_zones.default.zones.1.id
      vswitch_name = "terraform-example-2"
    }
    # ソフトウェアキー管理インスタンスを作成し、ネットワークパラメーターで起動します。
    resource "alicloud_kms_instance" "default" {
      timeouts {
        delete = "20m" # 削除のタイムアウト期間を設定します。
      }
      # ソフトウェアキー管理インスタンス。
      product_version = "3"
      vpc_id          = alicloud_vpc.vpc.id
      # 取得したゾーン ID を使用して KMS インスタンスのゾーンを指定します。
      zone_ids = [
        data.alicloud_zones.default.zones.0.id,
        data.alicloud_zones.default.zones.1.id
      ]
      # vSwitch ID。
      vswitch_ids = [
        alicloud_vswitch.vsw.id,alicloud_vswitch.vsw1.id
      ]
      # コンピューティングパフォーマンス、キーの数、シークレットの数、およびアクセス管理操作の数。
      vpc_num    = "1"
      key_num    = "1000"
      secret_num = "100"
      spec       = "1000"
      # KMS インスタンスを他の VPC に関連付けます。このパラメーターはオプションです。
      # VPC と KMS インスタンスの VPC が異なる Alibaba Cloud アカウントに属している場合は、まず vSwitch を共有する必要があります。
      #bind_vpcs {
      #vpc_id = "vpc-j6cy0l32yz9ttxfy6****"
      #vswitch_id = "vsw-j6cv7rd1nz8x13ram****"
      #region_id = "cn-shanghai"
      #vpc_owner_id = "119285303511****"
      #}
      #bind_vpcs {
      #vpc_id = "vpc-j6cy0l32yz9ttd7g3****"
      #vswitch_id = "vsw-3h4yrd1nz8x13ram****"
      #region_id = "cn-shanghai"
      #vpc_owner_id = "119285303511****"
      #}
    }
    
    # KMS インスタンスの CA 証明書をローカルファイルに保存します。
     resource "local_file" "ca_certificate_chain_pem" {
     content  = alicloud_kms_instance.default.ca_certificate_chain_pem
     filename = "ca.pem"
    }

    KMS インスタンスでキーを作成します:

    # キー仕様は Aliyun_AES_256 で、キーは暗号化と復号 (ENCRYPT/DECRYPT) に使用されます。
    resource "alicloud_kms_key" "kms_software_key_encrypt_decrypt" {
      timeouts {
        delete = "20m" # 削除のタイムアウト期間を設定します。
      }
      description = "default_key_encrypt_decrypt description"
      # キーの用途。デフォルト値:ENCRYPT/DECRYPT。有効な値:ENCRYPT/DECRYPT。これは、キーがデータの暗号化または復号に使用されることを示します。
      key_usage = "ENCRYPT/DECRYPT"
      # キーの仕様。デフォルト値:Aliyun_AES_256。
      key_spec = "Aliyun_AES_256"
      # キーマテリアルのソース。デフォルト値:Aliyun_KMS。有効な値:Aliyun_KMS および EXTERNAL。
      origin = "Aliyun_KMS"
      # KMS インスタンスの ID。
      # このパラメーターを追加すると、KMS インスタンスにキーが作成されます。それ以外の場合は、デフォルトのマスターキーが作成されます。
      dkms_instance_id = alicloud_kms_instance.default.id
      # CMK が削除されるまでの日数。
      pending_window_in_days = 7
      # リソースに割り当てるタグのマッピング。これはオプションです。
      #tags = {
          #"Environment" = "Production"
          #"Name" = "KMS-01"
          #"SupportTeam" = "PlatformEngineering"
          #"Contact" = "aliyun@test.com"
        #}
    }
    # キーエイリアスは alias/kms_software_key_encrypt_decrypt で、Alibaba Cloud アカウント内で一意である必要があります。
    resource "alicloud_kms_alias" "kms_software_key_encrypt_decrypt_alias" {
      # エイリアス。
      alias_name = "alias/kms_software_key_encrypt_decrypt"
      # キー ID。
      key_id = alicloud_kms_key.kms_software_key_encrypt_decrypt.id
    }
  2. 次のコマンドを実行して、Terraform 環境を初期化します。

    terraform init

    次の出力は、初期化が成功したことを示します。

    Initializing the backend...
    
    Initializing provider plugins...
    - Reusing previous version of hashicorp/alicloud from the dependency lock file
    - Using previously-installed hashicorp/alicloud v1.231.0
    
    Terraform has been successfully initialized!
    
    You may now begin working with Terraform. Try running "terraform plan" to see
    any changes that are required for your infrastructure. All Terraform commands
    should now work.
    
    If you ever set or change modules or backend configuration for Terraform,
    rerun this command to reinitialize your working directory. If you forget, other
    commands will detect it and remind you to do so if necessary.
  3. 実行計画を作成し、変更をプレビューします。

    terraform plan
  4. 次のコマンドを実行してキーを作成します。

    terraform apply

    プロンプトが表示されたら、yes と入力して [Enter] キーを押します。コマンドが完了するまで待ちます。次の出力は、キーが作成されたことを示します。

    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
    
      Enter a value: yes
    
    ...
    alicloud_kms_key.kms_software_key_encrypt_decrypt: Creating...
    alicloud_kms_key.kms_software_key_encrypt_decrypt: Creation complete after 0s [id=key-shh6715c21812y8i7z***]
    alicloud_kms_alias.kms_software_key_encrypt_decrypt_alias: Creating...
    alicloud_kms_alias.kms_software_key_encrypt_decrypt_alias: Creation complete after 0s [id=alias/kms_secret]
    ...
    
    Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
  5. 結果の確認。

    terraform show コマンドを実行する

    次のコマンドを実行して、Terraform によって作成されたリソースの詳細を表示します:

    terraform show

    image

    Key Management Service コンソールへのログイン

    Key Management Service コンソールにログインして、作成されたキーを表示します。

リソースのクリーンアップ

Terraform によって作成または管理されているリソースが不要になった場合は、次のコマンドを実行してリソースをリリースします。terraform destroy の詳細については、「共通コマンド」をご参照ください。

terraform destroy

完全な例

サンプルコード

variable "region" {
  default = "cn-shanghai"
}

provider "alicloud" {
  region = var.region
}
variable "instance_name" {
  default = "tf-kms-vpc-172-16"
}

variable "instance_type" {
  default = "ecs.n1.tiny"
}
# データソースを使用して、利用可能なゾーンに関する情報を取得します。リソースは指定されたゾーンでのみ作成できます。
data "alicloud_zones" "default" {
  available_disk_category     = "cloud_efficiency"
  available_resource_creation = "VSwitch"
  available_instance_type     = var.instance_type
}
# VPC を作成します。
resource "alicloud_vpc" "vpc" {
  vpc_name   = var.instance_name
  cidr_block = "172.16.0.0/12"
}
# CIDR ブロック 172.16.0.0/21 で vSwitch を作成します。
resource "alicloud_vswitch" "vsw" {
  vpc_id     = alicloud_vpc.vpc.id
  cidr_block = "172.16.0.0/21"
  zone_id    = data.alicloud_zones.default.zones.0.id
  vswitch_name = "terraform-example-1"
}
# CIDR ブロック 172.16.128.0/17 で別の vSwitch を作成します。
resource "alicloud_vswitch" "vsw1" {
  vpc_id     = alicloud_vpc.vpc.id
  cidr_block = "172.16.128.0/17"
  zone_id    = data.alicloud_zones.default.zones.0.id
  vswitch_name = "terraform-example-2"
}
# ソフトウェアキー管理インスタンスを作成し、ネットワークパラメーターで起動します。
resource "alicloud_kms_instance" "default" {
  timeouts {
    delete = "20m" # 削除のタイムアウト期間を設定します。
  }
  # ソフトウェアキー管理インスタンス。
  product_version = "3"
  vpc_id          = alicloud_vpc.vpc.id
  # 取得したゾーン ID を使用して KMS インスタンスのゾーンを指定します。
  zone_ids = [
    data.alicloud_zones.default.zones.0.id,
    data.alicloud_zones.default.zones.1.id
  ]
  # vSwitch ID。
  vswitch_ids = [
    alicloud_vswitch.vsw.id,alicloud_vswitch.vsw1.id
  ]
  # コンピューティングパフォーマンス、キーの数、シークレットの数、およびアクセス管理操作の数。
  vpc_num    = "1"
  key_num    = "1000"
  secret_num = "100"
  spec       = "1000"
  # KMS インスタンスを他の VPC に関連付けます。このパラメーターはオプションです。
  # VPC と KMS インスタンスの VPC が異なる Alibaba Cloud アカウントに属している場合は、まず vSwitch を共有する必要があります。
  #bind_vpcs {
  #vpc_id = "vpc-j6cy0l32yz9ttxfy6****"
  #vswitch_id = "vsw-j6cv7rd1nz8x13ram****"
  #region_id = "cn-shanghai"
  #vpc_owner_id = "119285303511****"
  #}
  #bind_vpcs {
  #vpc_id = "vpc-j6cy0l32yz9ttd7g3****"
  #vswitch_id = "vsw-3h4yrd1nz8x13ram****"
  #region_id = "cn-shanghai"
  #vpc_owner_id = "119285303511****"
  #}
}

# KMS インスタンスの CA 証明書をローカルファイルに保存します。
 resource "local_file" "ca_certificate_chain_pem" {
 content  = alicloud_kms_instance.default.ca_certificate_chain_pem
 filename = "ca.pem"
}

# キー仕様は Aliyun_AES_256 で、キーは暗号化と復号 (ENCRYPT/DECRYPT) に使用されます。
resource "alicloud_kms_key" "kms_software_key_encrypt_decrypt" {
  timeouts {
    delete = "20m" # 削除のタイムアウト期間を設定します。
  }
  description = "default_key_encrypt_decrypt description"
  # キーの用途。デフォルト値:ENCRYPT/DECRYPT。有効な値:ENCRYPT/DECRYPT。これは、キーがデータの暗号化または復号に使用されることを示します。
  key_usage = "ENCRYPT/DECRYPT"
  # キーの仕様。デフォルト値:Aliyun_AES_256。
  key_spec = "Aliyun_AES_256"
  # KMS インスタンスの ID。
  # このパラメーターを追加すると、KMS インスタンスにキーが作成されます。それ以外の場合は、デフォルトのマスターキーが作成されます。
  dkms_instance_id = alicloud_kms_instance.default.id
  # CMK が削除されるまでの日数。
  pending_window_in_days = 7
  # リソースに割り当てるタグのマッピング。これはオプションです。
  #tags = {
      #"Environment" = "Production"
      #"Name" = "KMS-01"
      #"SupportTeam" = "PlatformEngineering"
      #"Contact" = "aliyun@test.com"
    #}
}
# キーエイリアスは alias/kms_software_key_encrypt_decrypt で、Alibaba Cloud アカウント内で一意である必要があります。
resource "alicloud_kms_alias" "kms_software_key_encrypt_decrypt_alias" {
  # エイリアス。
  alias_name = "alias/kms_software_key_encrypt_decrypt"
  # キー ID。
  key_id = alicloud_kms_key.kms_software_key_encrypt_decrypt.id
}