文档

KMS最佳实践

更新时间:

密钥管理服务 KMS(Key Management Service)是您的一站式密钥管理和数据加密服务平台、一站式凭据安全管理平台,提供简单、可靠、安全、合规的数据加密保护和凭据管理能力。本文为您介绍KMS的常见使用场景。

场景一:通过控制台创建免费的默认密钥(主密钥),对ECS云盘、RDS数据或OSS数据加密

您无需购买KMS实例,在每个阿里云账号的每个地域下,KMS都提供了一个免费的默认密钥(主密钥)用于云产品服务端加密。以加密ECS系统盘为例介绍。

步骤一:创建默认密钥(主密钥)

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域信息后,单击实例管理页面。

  2. 实例管理页面,单击默认密钥管理页签。

  3. 密钥管理快速入门(默认密钥)
  4. 单击主密钥操作列的启用,在创建密钥页签完成配置项设置,然后单击确定

  5. 配置项

    说明

    密钥别名

    密钥的别名标识符。支持英文字母、数字、下划线(_)、短划线(-)和正斜线(/)。

    描述信息

    密钥的说明信息。

    高级选项

    密钥材料来源。

    • 阿里云KMS:密钥材料将由KMS生成。

    • 外部:KMS不会生成密钥材料,您需要将自己的密钥材料导入KMS。更多信息,请参见导入对称密钥材料

步骤二:创建ECS实例时加密系统盘

关于云产品服务端加密集成KMS支持的密钥类型以及详细操作,请参考对应云产品的相关文档。

  1. 登录ECS管理控制台
  2. 在左侧导航栏,选择实例与镜像 > 实例
  3. 在页面左侧顶部,选择目标资源所在的地域。地域
  4. 实例页面,单击创建实例

  5. 基础配置页面,按以下步骤操作。

    说明

    本步骤主要描述创建实例时如何配置加密选项,其余配置说明,请参见自定义购买实例

    1. 选择符合条件的地域和可用区、实例规格。

    2. 镜像类型选择公共镜像或者自定义镜像。

    3. 系统盘选择ESSD云盘类型,并配置容量等信息。

    4. 选中加密,并在下拉列表中选择在KMS控制台创建的默认密钥(主密钥)

      说明

      目前华东5(南京-本地地域)、华东6(福州-本地地域)、泰国(曼谷)和韩国(首尔)地域不支持自选自定义密钥(BYOK)。

      加密后,用来加密云盘的KMS密钥自动被绑定一个标签,标签键固定为acs:ecs:disk-encryption,标签值固定为true。您可以登录密钥管理服务控制台,在实例管理页面的默认密钥管理页签查看密钥ID、密钥标签。

场景二:多个阿里云账号下的ECS、RDS、OSS云产品,使用免费的默认密钥(主密钥)加密

阿里云账号在每个地域都有一个免费的默认密钥(主密钥)额度,当您需要对多个阿里云账号下的云产品加密时,您可以在每个账号下创建1个默认密钥(主密钥),用该默认密钥(主密钥)加密账号下的云产品。具体的架构图如下:

image

场景三:使用Terraform创建免费的默认密钥(主密钥)

准备工作

  • 在本地使用Terraform

    1. 安装的Terraform版本不低于v0.14。

      说明

      安装后您可以通过terraform --version命令查看Terraform版本,如果版本低于v0.14,请重新覆盖安装正确版本。

    2. 配置阿里云账号信息。

      说明

      为提高权限管理的灵活性和安全性,建议您创建一个名为Terraform的RAM用户,并为该RAM用户创建AccessKey以及授予AliyunKMSCryptoAdminAccess(管理密钥)和AliyunKMSSecretAdminAccess(管理凭据)权限。具体操作,请参见创建RAM用户为RAM用户授权

      • 方式一:创建环境变量,用于存放身份认证信息(推荐)。

        export ALICLOUD_ACCESS_KEY="******"
        export ALICLOUD_SECRET_KEY="******"
        export ALICLOUD_REGION="******"
      • 方式二:通过在配置文件的provider代码块中指定身份认证信息。

        provider "alicloud" {
          access_key = "******"
          secret_key = "******"
          region     = "******"
        }
  • 在Cloud Shell中使用Terraform

    安装的Terraform版本不低于v0.14,如果版本不满足要求,请切换Terraform版本。更多信息,请参见在Cloud Shell中使用Terraform切换Terraform版本

操作步骤

  1. 创建一个工作目录,并且在工作目录中创建以下名为main.tfvariables.tf的配置文件。

    • main.tf:Terraform主文件,定义了将要部署的资源。

      # 可以参考相关文档(https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/kms_key)了解资源alicloud_kms_key的细节
      resource "alicloud_kms_key" "key" {
        description                   = "${var.description}"
      }
      
      output "key_id" {
        value = alicloud_kms_key.key.id
      }
    • variables.tf:包含可传递到main.tf的变量,可帮助您自定义变量。

      # KMS密钥的描述信息
      variable "description" {
        default = "the new key"
      }                            
  2. 执行terraform init命令初始化Terraform运行环境。

  3. 执行terraform plan命令生成资源规划。

  4. 执行terraform apply命令创建密钥。

场景四:创建一个凭据

您需要购买KMS实例后,才可以创建凭据。

步骤一:在控制台购买KMS实例

仅支持在控制台上购买KMS实例,不支持通过Terraform购买。

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域信息后,单击实例管理页面。

  2. 实例管理页面单击创建实例,选择要购买的KMS实例规格,单击立即购买

    配置项

    说明

    密钥管理类型

    KMS实例类型。可选项:

    • 软件密钥管理:支持构建专属您的密钥存储库,提供数据加解密的能力,同时提供密钥生命周期管理。

    • 硬件密钥管理:支持管理您购买的专属密码机集群的密钥,帮助您快速构建云上安全密钥管理中心。提供的极简应用加密接口,满足您云产品数据加密、应用系统数据加密的整体需求,是您理想的云上一站式数据加密安全解决方案。

    说明

    数据备份管理用于备份恢复KMS软件密钥管理实例的数据,更多信息,请参见备份管理

    地域

    KMS实例所在地域。更多信息,请参见支持的地域

    计算性能

    KMS实例的计算性能。关于性能数据的详细介绍,请参见性能数据

    密钥数量

    KMS实例允许创建的最大密钥数量。

    凭据数量

    KMS实例允许创建的最大凭据数量。

    访问管理数量

    包含KMS实例关联的VPC数量,以及资源使用者的数量。默认值为1个。

    例如,您的KMS实例需要关联3个VPC,并共享给2个资源使用者,那么访问管理数量配额最少为5才能满足业务需求。

    购买数量

    购买的KMS实例数量。

    重要

    通常您只需购买一个KMS实例,如需购买多个KMS实例,请通过售前在线咨询联系商务经理。

    购买时长

    根据需要选择购买时长。

    说明

    您可以选中到期自动续费,当前KMS实例到期后将自动续费。

  3. 仔细阅读并勾选服务协议,单击去支付完成购买。

    购买成功后,您需要等待1~5分钟,即可在实例管理页面看到您购买的KMS实例。

步骤二:启用KMS实例

前提条件

  • 已在KMS实例所属地域创建VPC和交换机。具体操作,请参见创建专有网络和交换机创建交换机

    重要

    请确保交换机预留了足够的可用IP数,软件密钥管理实例需要预留1个,硬件密钥管理实例需要预留5个。您可以登录专有网络管理控制台,在交换机页面单击目标交换机,在详情页面查看可用IP数。

  • 如果您使用阿里云中国站账号购买非中国内地的KMS实例,或者使用阿里云国际站账号购买中国内地的KMS实例,请确保已开通云解析PrivateZone。具体操作,请参见开通PrivateZone

    说明
    • 其他场景下会自动开通PrivateZone,无需您手动开通。

    • KMS实例域名解析产生的费用由KMS承担,您无需向云解析PrivateZone付费。

  • 启用KMS硬件密钥管理实例前,由于该实例需要连接您的密码机集群,请确保已购买和配置可供实例连接的密码机集群。具体操作,请参见配置KMS硬件密钥管理实例的密码机集群

启用软件密钥管理实例

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域信息后,单击实例管理页面。

  2. 软件密钥管理页签,定位到目标KMS实例,单击操作列的启用

  3. 启用KMS实例对话框,完成各项配置后单击确定。

    配置项

    说明

    密管平台模式

    默认为阿里云密管平台,无需修改。

    私有库

    默认为新建数据库,无需修改。

    实例网络配置

    • VPC ID:KMS实例所在地域下的专有网络ID。

    • VSwitch ID:专有网络下的交换机ID。

    请等待约30分钟,然后刷新页面,当状态变更为已启用时,表示KMS软件密钥管理实例启用成功。

启用硬件密钥管理实例

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域信息后,单击实例管理页面。

  2. 单击硬件密钥管理页签,定位到目标KMS实例,单击操作列的启用

  3. 连接密码机对话框,完成各项配置后,单击连接密码机指定密码机集群。

    配置项

    说明

    指定密码机集群

    选择您在加密服务中创建的密码机集群。

    说明

    一个KMS硬件密钥管理实例只能绑定一个密码机集群。

    配置密码机访问凭据

    KMS硬件密钥管理实例与密码机连接时采用双向TLS认证,需要配置客户端证书(带保护口令的PKCS12格式证书)和安全域证书(为密码机集群签发TLS服务端证书的CA证书,为PEM格式)。关于证书如何生成,请参见为密码机实例创建双向TLS认证

    • 客户端保护口令:您在生成客户端证书client.p12时设置的保护口令。如果是使用证书文件生成工具(hsm_certificate_generate)生成,默认为12345678

    • 客户端证书:PKCS12格式证书。单击选择文件上传client.p12文件。

    • 安全域证书:PEM格式CA证书。单击选择文件上传rootca.pem文件。

    如果购买实例时选择了凭据数量,请等待约30分钟,然后刷新页面。如果未选择凭据数量,请等待约10分钟,然后刷新页面。当状态变更为已启用时,表示KMS硬件密钥管理实例启用成功。

(可选)步骤三:查看KMS实例详情

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域信息后,单击实例管理页面。

  2. 密钥管理页面,根据您的KMS实例类型,单击软件密钥管理页签或硬件密钥管理页签。

  3. 定位到目标KMS实例,单击操作列的管理,在实例详情页查看信息。

步骤四:在KMS实例中创建一个密钥

重要

由于仅对称密钥支持加密凭据,如果该密钥用于加密凭据,请创建一个对称密钥。

通过控制台创建

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域信息后,在左侧导航栏单击密钥管理页面。密钥管理

  2. 密钥管理页面,选择实例ID,然后单击创建密钥

  3. 创建密钥面板完成配置项设置,然后单击确定

    配置项

    说明

    密钥类型

    选择要创建的密钥是对称密钥还是非对称密钥。

    重要

    如果您创建的密钥用于加密凭据值,请选择对称密钥。

    密钥规格

    密钥的规格。

    密钥用途

    密钥的用途。取值:

    • Encrypt/Decrypt:数据加密和解密。

    • Sign/Verify:产生和验证数字签名。

    密钥别名

    密钥的别名标识符。支持英文字母、数字、下划线(_)、短划线(-)和正斜线(/)。

    标签

    包含标签键和标签值。关于标签的详细信息,请参见标签概述

    描述信息

    密钥的说明信息。

通过Terraform创建

准备工作

  • 在本地使用Terraform

    1. 安装的Terraform版本不低于v0.14。

      说明

      安装后您可以通过terraform --version命令查看Terraform版本,如果版本低于v0.14,请重新覆盖安装正确版本。

    2. 配置阿里云账号信息。

      说明

      为提高权限管理的灵活性和安全性,建议您创建一个名为Terraform的RAM用户,并为该RAM用户创建AccessKey以及授予AliyunKMSCryptoAdminAccess(管理密钥)和AliyunKMSSecretAdminAccess(管理凭据)权限。具体操作,请参见创建RAM用户为RAM用户授权

      • 方式一:创建环境变量,用于存放身份认证信息(推荐)。

        export ALICLOUD_ACCESS_KEY="******"
        export ALICLOUD_SECRET_KEY="******"
        export ALICLOUD_REGION="******"
      • 方式二:通过在配置文件的provider代码块中指定身份认证信息。

        provider "alicloud" {
          access_key = "******"
          secret_key = "******"
          region     = "******"
        }
  • 在Cloud Shell中使用Terraform

    安装的Terraform版本不低于v0.14,如果版本不满足要求,请切换Terraform版本。更多信息,请参见在Cloud Shell中使用Terraform切换Terraform版本

操作步骤

  1. 创建一个工作目录,并且在工作目录中创建以下名为main.tfvariables.tf的配置文件。

    • main.tf:Terraform主文件,定义了将要部署的资源。

      # 可以参考相关文档(https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/kms_key)了解资源alicloud_kms_key的细节
      resource "alicloud_kms_key" "key" {
        description                   = "${var.description}"
        dkms_instance_id              = "${var.dkms_instance_id}"
      }
      
      output "key_id" {
        value = alicloud_kms_key.key.id
      }
    • variables.tf:包含可传递到main.tf的变量,可帮助您自定义变量。

      # KMS密钥的描述信息
      variable "description" {
        default = "the new key"
      }
      
      # 您的KMS实例Id
      variable "dkms_instance_id" {
        default = "kst-szz63292789pf2h******"
      }
                                      
  2. 执行terraform init命令初始化Terraform运行环境。

  3. 执行terraform plan命令生成资源规划。

  4. 执行terraform apply命令创建密钥。

步骤五:在KMS实例中创建一个凭据

以创建通用凭据为例为您介绍。

通过控制台创建

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域信息后,在左侧导航栏单击凭据管理页面。

  2. 单击通用凭据页签,选择实例ID后,单击创建凭据,完成各项配置后单击确认

    配置项

    说明

    凭据名称

    输入自定义的凭据名称。

    设置凭据值

    根据您要托管的敏感数据类型,选择凭据 键/值纯文本

    初始版本号

    凭据的初始版本号。默认为v1,也支持自定义版本号。

    加密主密钥

    选择用于加密凭据值的密钥。

    重要

    密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格

    标签

    包含标签键和标签值。关于标签的详细信息,请参见标签概述

    描述信息

    输入凭据的描述信息。

通过Terraform创建

  1. 创建一个工作目录,并且在工作目录中创建以下名为main.tfvariables.tf的配置文件。

    • main.tf:Terraform主文件,定义了将要部署的资源。

      # 可以参考相关文档(https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/kms_secret)了解资源alicloud_kms_secret的细节
      resource "alicloud_kms_secret" "secret" {
        description                   = "from terraform"
        secret_name                   = "${var.secret_name}"
        secret_data                   = "${var.ENV_SECRET_DATA}"
        version_id                    = "${var.version_id}"
        dkms_instance_id              = "${var.dkms_instance_id}"
        encryption_key_id             = "${var.encryption_key_id}"
      }
    • variables.tf:包含可传递到main.tf的变量,可帮助您自定义变量。

      # 凭据名称
      variable "secret_name" {
        default = "secret_name_sample"
      }
      
      # 凭据版本信息
      variable "version_id" {
        default = "000000000001"
      }
      
      # 凭据值。
      variable "ENV_SECRET_DATA" {
          # 您可以使用命令 "export TF_VAR_ENV_SECRET_DATA=xxxxxxxxxx" 来设定凭据值 或在TF提示时输入。
              # default = "Secret data sample."
              # sensitive设置为true,以使TF相关工具不展示凭据值内容。
          sensitive = true
      }
      
      # 您的KMS实例Id
      variable "dkms_instance_id" {
        default = "kst-szz63292789pf2h******"
      }
      
      # 指定用于加密保存凭据值的密钥id。注意:要求密钥在同一个KMS实例中。
      variable "encryption_key_id" {
        default = "key-szz640fd91d99y1******"
      }                      
  2. 执行terraform init命令初始化Terraform运行环境。

  3. 执行terraform plan命令生成资源规划。

  4. 执行terraform apply命令创建凭据。

步骤六:在应用程序中集成凭据

凭据创建完成后,您可以在应用中集成凭据,帮助您规避在代码中硬编码凭据带来的敏感信息泄露风险。关于代码中如何集成凭据,请您参见SDK使用指引

场景五:配置多VPC使用KMS实例

当您的业务应用部署在同地域的多个VPC时,您可以配置这些VPC使用同一个KMS实例。

VPC和KMS实例属于同一个阿里云账号

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域信息后,单击实例管理页面。

  2. 密钥管理页面,根据您的KMS实例类型,单击软件密钥管理页签或硬件密钥管理页签。

  3. 定位到目标KMS实例,单击操作列的管理,在实例详情页面单击配置VPC

  4. 配置专有网络对话框,选中待选专有网络中的VPC,单击左箭头图标。

  5. 请选择需要绑定VPC的交换机对话框中,为每个VPC选择一个交换机,单击确定

  6. 配置专有网络页面,单击确定

VPC和KMS实例属于不同阿里云账号

以阿里云账号B、阿里云账号C下的应用程序,需要使用阿里云账号A的KMS实例中的资源为例。

  1. 配置资源共享,使阿里云账号A可以共享阿里云账号B、阿里云账号C中VPC的交换机资源。

    1. 使用阿里云账号B和阿里云账号C分别登录资源共享控制台,创建共享单元,向阿里云账号A共享VPC内的交换机资源。

    2. 使用阿里云账号A登录资源共享控制台,接受阿里云账号B和阿里云账号C的共享邀请。

    说明

    关于资源共享的详细操作,请参见将资源共享给任意账号仅在资源目录内共享资源

  2. 使用阿里云账号A登录密钥管理服务控制台,在顶部菜单栏选择地域信息后,单击实例管理页面。

  3. 密钥管理页面,根据您的KMS实例类型,单击软件密钥管理页签或硬件密钥管理页签。

  4. 定位到目标KMS实例,单击操作列的管理,在实例详情页面单击配置VPC

  5. 配置专有网络对话框,选中待选专有网络中的VPC,单击左箭头图标。

  6. 请选择需要绑定VPC的交换机对话框中,为每个VPC选择一个交换机,单击确定

  7. 配置专有网络页面,单击确定

场景六:多个阿里云账号共享凭据

如果您使用阿里云账号1购买了KMS实例(选购了凭据配额),您的阿里云账号2、阿里云账号3可以通过公网接入地址访问阿里云账号1的KMS实例中的凭据。

  1. 在阿里云账号1下创建凭据。具体操作,请参见场景四:创建一个凭据

  2. 阿里云账号2、阿里云账号3通过公网接入地址,使用阿里云账号1下创建的凭据。具体操作,请参见凭据管家客户端凭据管家JDBC客户端RAM凭据插件

关于公网接入地址,请参见支持的地域

场景七:将KMS实例共享给资源目录的其他阿里云账号

共享KMS实例的阿里云账号必须是同一个企业实名认证主体,资源使用者可以使用来自共享的KMS实例,进行云产品服务端加密。更多详细信息,请参见多账号共享KMS实例

前提条件

已完成资源目录组织的创建。具体操作,请参见资源目录概述

步骤一:资源所有者共享KMS实例

重要

将KMS实例共享给其他阿里云账号时,建议单独创建共享单元以控制资源使用者范围,避免将该共享单元授权给过多的资源使用者。

  • 在密钥管理服务控制台操作

    1. 资源所有者登录密钥管理服务控制台,在顶部菜单栏选择地域信息后,在左侧导航栏单击实例管理

    2. 密钥管理页面,根据您的KMS实例类型,单击软件密钥管理页签或硬件密钥管理页签。

    3. 定位到目标KMS实例,单击操作列的资源共享

    4. 添加到共享单元面板中单击新建,单击确定完成共享单元创建。添加共享单元

      配置项

      说明

      共享单元名称

      自定义共享单元的名称。格式为中文字符、英文大小写字符、数字及特殊字符(“.”、“_”或“-”),最长不允许超过50个字符。

      关联权限

      资源使用者的权限。具体的权限详情,您可以在资源共享控制台上的权限库中查看。

      • AliyunRSDefaultPermissionKMSInstance:资源使用者可以使用密钥进行云产品服务端加密。

      • AliyunRSPermissionKMSInstanceReadWrite:资源使用者可以管理密钥和使用密钥进行云产品服务端加密。

      说明

      基于业务隔离、风险分散等考虑,建议您创建两个共享单元,一个关联权限为AliyunRSPermissionKMSInstanceReadWrite仅用于管理密钥,一个关联权限为AliyunRSDefaultPermissionKMSInstance使用密钥进行云产品服务端加密。

      添加资源使用者

      支持如下三种类型:

      • 阿里云账号:输入使用者ID(即阿里云账号UID),单击添加后,将KMS实例共享给该阿里云账号。本文示例采用该方式。

      • 资源目录组织:输入资源目录ID(以rd开头,例如rd-Y4****),将KMS实例共享给该资源目录下的所有成员账号。

      • 如果该资源目录后续创建或邀请了新的阿里云账号,该KMS实例会自动共享给新的阿里云账号。

      • 资源夹(组织单元):输入资源夹ID(以fd开头,例如fd-gLh1HJ****),将KMS实例共享给该资源夹下的所有成员账号。

      • 如果该资源夹后续创建或邀请了新的阿里云账号,该KMS实例会自动共享给新的阿里云账号。

      重要
      • 资源使用者必须和资源所有者属于同一个资源目录。关于资源目录、资源夹的更多信息,请参见资源目录基本概念

      • 将KMS实例共享给资源使用者,会扣除KMS实例的访问管理数量额度,因此在创建共享单元时,建议您将资源使用者的类型选择为阿里云账号或资源夹(组织单元),避免共享给资源目录组织下所有成员造成KMS实例的额度过度使用和KMS实例密钥资源非必要使用。

      如果您在创建共享单元时未指定资源使用者,也可以在修改共享单元时指定。

      KMS实例共享成功后,在KMS实例ID下方会显示共享中。资源使用者登录密钥管理服务控制台,可以查看到该KMS实例,在KMS实例ID下方会显示来自共享

  • 在资源共享控制台操作

    具体操作,请参见仅在资源目录内共享资源

步骤二:资源使用者使用KMS实例

管理密钥

当共享单元的权限是AliyunRSPermissionKMSInstanceReadWrite时,资源使用者才可以管理密钥。例如,创建密钥、设置别名、添加标签等。具体操作,请参见管理密钥

使用密钥加解密

当共享单元的权限是AliyunRSPermissionKMSInstanceReadWrite或AliyunRSDefaultPermissionKMSInstance时,资源使用者可在云产品服务端加密中使用被共享的KMS实例中的密钥。关于云产品服务端加密的详细信息,请参见云产品集成KMS加密概述支持集成KMS加密的云产品

更多操作

资源所有者修改共享单元

  • 在密钥管理服务控制台操作

    1. 登录密钥管理服务控制台,在顶部菜单栏选择地域信息后,在左侧导航栏单击实例管理

    2. 实例管理页面,根据您的KMS实例类型,单击软件密钥管理页签或硬件密钥管理页签。

    3. 定位到目标KMS实例,单击操作资源共享

    4. 添加到共享单元面板选择共享单元,修改关联权限,或者单击资源使用者编辑添加或移除资源使用者,然后单击确定

  • 在资源共享控制台操作

    具体操作,请参见修改共享单元

资源所有者删除共享单元

重要

删除共享单元后,与该共享单元关联的所有资源使用者都将失去对共享资源的访问权限,请谨慎操作。

仅支持在资源共享控制台操作。具体操作,请参见删除共享单元