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

Key Management Service:Terraform を使用してキーを作成する

最終更新日:Feb 25, 2025

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

概要

Key Management Service (KMS) では、カスタマーマスターキー (CMK) タイプのデフォルトキーを作成できます。 KMS インスタンスを購入する必要はありません。 KMS インスタンスでキーを作成することもできます。キーの詳細については、「キー管理の概要」をご参照ください。

説明

このトピックのサンプルコードは、数クリックで実行できます。詳細については、Terraform Explorer にアクセスしてください。

制限

Terraform のバージョンは 0.14.0 以降である必要があります。最新バージョンを使用することをお勧めします。 最新バージョンをダウンロードするには、Terraform 公式 Web サイト にアクセスしてください。

前提条件

  • Alibaba Cloud アカウントは、このアカウントに属するすべてのリソースに対するフルアクセス権限を持っています。 Alibaba Cloud アカウントの資格情報が漏洩した場合、セキュリティリスクが発生する可能性があります。Resource Access Management (RAM) ユーザーを使用し、RAM ユーザーの AccessKey ペアを作成することをお勧めします。詳細については、「RAM ユーザーを作成する」および「AccessKey ペアを作成する」をご参照ください。

  • 次のコードは、RAM ユーザーに権限を付与する方法の例を示しています。 AliyunKMSFullAccess ポリシーが RAM ユーザーにアタッチされていることを確認してください。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

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

    Terraform Explorer で Terraform を使用する:Alibaba Cloud は、Terraform 用のオンライン実行環境を提供しています。 Terraform Explorer 環境にログインして、Terraform をインストールせずに使用できます。この方法は、追加費用なしで Terraform を迅速かつ便利に使用およびデバッグする場合に適しています。

    Cloud Shell で Terraform を使用する:Terraform は Cloud Shell にプリインストールされており、ID 資格情報は構成されています。 Cloud Shell で Terraform コマンドを実行できます。この方法は、低コストで Terraform を迅速かつ便利に使用およびデバッグする場合に適しています。

    オンプレミス マシンに Terraform をインストールして構成する:この方法は、ネットワーク接続が不安定な場合、またはカスタム開発環境が必要な場合に適しています。

重要

Terraform 0.12.28 以降をインストールする必要があります。 terraform --version コマンドを実行して、Terraform のバージョンをクエリできます。

必要なリソース

KMS インスタンスでキーを作成する

次の例では、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/12 の 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"
      # 別の VPC をインスタンスに関連付けます。 このパラメータはオプションです。
      # 2 つの VPC が異なる Alibaba Cloud アカウントに属している場合は、最初に 2 番目の VPC の vSwitch を最初の VPC と共有する必要があります。
      #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****"
      #}
    }
    
    # インスタンスの認証局 (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。
      key_usage = "ENCRYPT/DECRYPT"
      # キーの仕様。 デフォルト値:Aliyun_AES_256。
      key_spec = "Aliyun_AES_256"
      # キーマテリアルのソース。 デフォルト値:Aliyun_KMS。 有効な値:Aliyun_KMS および EXTERNAL。
      origin = "Aliyun_KMS"
      # KMS インスタンスの ID。
      # このパラメータを指定すると、キーは KMS インスタンスに作成されます。 パラメータを空のままにすると、CMK タイプのデフォルトキーが作成されます。
      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

    次の情報が返された場合、Terraform は初期化されています。

    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

    KMS コンソールにログインする

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

リソースを解放する

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

terraform destroy

完全なサンプルコード

説明

サンプルコードは、数クリックで実行できます。 詳細については、Terraform Explorer にアクセスしてください。

サンプルコード

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/12 の 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"
  # 別の VPC をインスタンスに関連付けます。 このパラメータはオプションです。
  # 2 つの VPC が異なる Alibaba Cloud アカウントに属している場合は、最初に 2 番目の VPC の vSwitch を最初の VPC と共有する必要があります。
  #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****"
  #}
}

# インスタンスの 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。
  key_usage = "ENCRYPT/DECRYPT"
  # キーの仕様。 デフォルト値:Aliyun_AES_256。
  key_spec = "Aliyun_AES_256"
  # KMS インスタンスの ID。
  # このパラメータを指定すると、キーは KMS インスタンスに作成されます。 パラメータを空のままにすると、CMK タイプのデフォルトキーが作成されます。
  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
}