本文介绍如何通过Terraform购买并启用KMS软件密钥管理实例。
概述
购买并启用软件密钥管理实例时,您需要为该KMS实例绑定VPC以及交换机,也支持为该KMS实例关联多个VPC。配置完成后生成CA实例证书,请您妥善保存,在应用访问KMS实例时需要配置该CA实例证书。
准备工作
准备 RAM 用户及授权
为安全起见,我们强烈建议您使用 RAM 用户而非阿里云账号(主账号)来进行操作。
创建 RAM 用户:具体操作方式请参见创建RAM用户。
创建 AccessKey:为该 RAM 用户创建并记录 AccessKey。具体操作请参见创建AccessKey。
为 RAM 用户授权:Terraform 需要获取AliyunKMSFullAccess(管理密钥管理服务)、AliyunVPCFullAccess(管理专有网络)和AliyunBSSFullAccess(管理费用中心BSS)才能创建和管理云资源。为了遵循最小权限原则,我们推荐使用以下自定义策略进行授权。具体操作方式请参见为RAM用户授权。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "vpc:CreateVpc", "vpc:CreateVSwitch", "vpc:DescribeNatGateways", "vpc:DeleteVpc", "vpc:DeleteVSwitch" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "vpc:DescribeVpcAttribute", "vpc:DescribeVSwitchAttributes", "vpc:DescribeRouteTableList" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "bss:*", "bssapi:*" ], "Resource": [ "*" ] } ] }
准备 Terraform 运行环境
可以选择以下任一方式来运行 Terraform:
重要请确保 Terraform 版本不低于
v0.12.28。您可以通过运行terraform --version命令来检查。Terraform Explorer:阿里云提供的在线运行环境,无需安装,登录后即可使用。适用于零成本、快速体验的场景。
Cloud Shell:Cloud Shell 中已预装 Terraform 并配置好了身份凭证。适用于快速、便捷地在云端运行命令的场景。
在本地安装和配置Terraform:适用于网络连接较差或需要自定义开发环境的场景。
检查 Aliyun/Alicloud Provider 版本
部分功能对 Aliyun/Alicloud Provider 的版本有特定要求,具体说明如下:
创建时设置自动续费:如需在新建 KMS 实例时就设置自动续费,Provider 版本不能低于
1.245.0。修改为自动续费:如需将一个已有的手动续费 KMS 实例修改为自动续费,Provider 不能低于
1.257.0
使用的资源
alicloud_vpc:创建专有网络VPC。
alicloud_vswitch:创建虚拟交换机(vSwitch)为VPC划分一个或多个子网。
alicloud_zones:查询可用区。
alicloud_kms_instance:购买并启用KMS软件密钥管理实例。
本教程示例包含的部分资源会产生一定费用,请在不需要时及时进行释放或退订。
通过Terraform购买并启用软件密钥管理实例
本示例将创建并启用一个KMS实例。
当通过 Terraform 启用软件密钥管理实例时,您只能配置一个 vSwitch。
创建一个工作目录,并且在工作目录中创建以下名为
main.tf的配置文件。main.tfTerraform主文件,定义了将要部署的资源。variable "region" { default = "cn-shanghai" } provider "alicloud" { region = var.region } variable "instance_name" { default = "tf-kms-vpc-172-16" } variable "instance_type" { default = "ecs.e-c1m2.large" } # 使用数据源来获取可用的可用区信息。资源只能在指定的可用区内创建。 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" } # 创建一个Vswitch CIDR 块为 172.16.0.0/12 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" } # 创建KMS软件密钥管理实例,并使用网络参数启动 resource "alicloud_kms_instance" "default" { # 软件密钥管理实例 product_version = "3" vpc_id = alicloud_vpc.vpc.id # 规定 KMS 实例所在的可用区,使用前面获取的可用区 ID zone_ids = [ data.alicloud_zones.default.zones.0.id, data.alicloud_zones.default.zones.1.id ] # 交换机id vswitch_ids = [ alicloud_vswitch.vsw.id ] # 计算性能、密钥数量、凭据数量、访问管理数量 vpc_num = "1" key_num = "1000" secret_num = "100" spec = "1000" # 为KMS实例关联其他VPC,可选参数 # 如果VPC与KMS实例的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****" #} } # 保存KMS实例CA证书到本地文件 resource "local_file" "ca_certificate_chain_pem" { content = alicloud_kms_instance.default.ca_certificate_chain_pem filename = "ca.pem" }执行以下命令,初始化
Terraform运行环境。terraform init返回如下信息,表示Terraform初始化成功。
... Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes...创建执行计划,并预览变更。
terraform plan执行以下命令,创建KMS实例。
terraform apply在执行过程中,根据提示输入
yes并按下Enter键,等待命令执行完成,若出现以下信息,则表示KMS实例创建成功。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 ... Apply complete! Resources: 4 added, 0 changed, 0 destroyed.验证结果。
执行terraform show命令
您可以使用以下命令查询Terraform已创建的资源详细信息:
terraform show登录密钥管理服务控制台
登录密钥管理服务控制台,查看已创建的KMS实例。

清理资源
当您不再需要上述通过Terraform创建或管理的资源时,请运行以下命令以释放资源。关于terraform destroy的更多信息,请参见Terraform常用命令。
terraform destroy完整示例
当前示例代码支持一键运行,您可以直接运行代码。一键运行