使用客户管理加密密钥(CMEK)在 AWS 上实现静态数据加密
客户管理加密密钥(Customer-Managed Encryption Key,CMEK)允许你通过使用完全由你控制的对称加密密钥,来保护 TiDB Cloud Dedicated 集群中的静态数据安全。该密钥被称为 CMEK 密钥。
一旦为项目启用 CMEK,该项目下创建的所有集群都会使用 CMEK 密钥对其静态数据进行加密。此外,这些集群生成的任何备份数据也会使用同一密钥进行加密。如果未启用 CMEK,TiDB Cloud 会使用托管密钥(escrow key)对集群中的所有静态数据进行加密。
限制
- 目前,TiDB Cloud 仅支持使用 AWS KMS 和 Azure Key Vault 提供 CMEK。
- 若要使用 CMEK,需在创建项目时启用 CMEK,并在创建集群前完成 CMEK 相关配置。无法为已存在的项目启用 CMEK。
- 目前,在已启用 CMEK 的项目中,只能创建托管在 AWS 和 Azure 上的 TiDB Cloud Dedicated 集群。
- 目前,在已启用 CMEK 的项目中,不支持 双区域备份。
- 目前,在已启用 CMEK 的项目中,可以在 AWS 和 Azure 上启用 CMEK。对于每个云服务商,每个区域只能配置一个唯一的加密密钥。你只能在已为所选云服务商配置加密密钥的区域创建集群。
启用 CMEK
如果你希望使用自己账户下的 KMS 对数据进行加密,请按照以下步骤操作。
步骤 1. 创建启用 CMEK 的项目
如果你拥有组织的 Organization Owner
角色,可以通过 TiDB Cloud 控制台或 API 创建启用 CMEK 的项目。
要创建启用 CMEK 的项目,请按照以下步骤操作:
- 在 TiDB Cloud 控制台中,使用左上角的下拉框切换到目标组织。
- 在左侧导航栏,点击 Projects。
- 在 Projects 页面,点击右上角的 Create New Project。
- 填写项目名称。
- 选择启用项目的 CMEK 功能。
- 点击 Confirm 完成项目创建。
你可以通过 TiDB Cloud API 的 Create a CMEK-enabled project 接口完成此步骤。请确保 aws_cmek_enabled
字段设置为 true
。
目前,TiDB Cloud API 仍处于 beta 阶段。更多信息请参见 TiDB Cloud API 文档。
步骤 2. 完成项目的 CMEK 配置
你可以通过 TiDB Cloud 控制台或 API 完成项目的 CMEK 配置。
要完成项目的 CMEK 配置,请按照以下步骤操作:
- 在 TiDB Cloud 控制台中,使用左上角的下拉框切换到目标项目。
- 在左侧导航栏,点击 Project Settings > Encryption Access。
- 在 Encryption Access 页面,点击 Create Encryption Key 进入密钥创建页面。
- 密钥提供方仅支持 AWS KMS。你可以选择加密密钥可用的区域。
- 复制并保存 JSON 文件为
ROLE-TRUST-POLICY.JSON
。该文件描述了信任关系。 - 将此信任关系添加到 AWS KMS 的密钥策略中。更多信息请参考 AWS KMS 中的密钥策略。
- 在 TiDB Cloud 控制台的密钥创建页面底部,填写从 AWS KMS 获取的 KMS Key ARN。
- 点击 Create 创建密钥。
在 AWS KMS 上配置密钥策略,并将以下信息添加到密钥策略中:
{ "Version": "2012-10-17", "Id": "cmek-policy", "Statement": [ // EBS-related policy { "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "<pingcap-account>", "kms:ViaService": "ec2.<region>.amazonaws.com" } } }, // S3-related policy { "Sid": "Allow TiDB cloud role to use KMS to store encrypted backup to S3", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<pingcap-account>:root" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }, ... // user's own admin access to KMS ] }<pingcap-account>
是你的集群运行所在的账户。如果你不清楚该账户,请联系 TiDB Cloud Support。<region>
是你希望创建集群的区域,例如us-west-2
。如果你不想指定区域,可以将<region>
替换为通配符*
,并放在StringLike
块中。- 有关上述 EBS 相关策略的更多信息,请参考 AWS 文档。
- 有关上述 S3 相关策略的更多信息,请参考 AWS 博客。
调用 TiDB Cloud API 的 Configure AWS CMEK 接口。
目前,TiDB Cloud API 仍处于 beta 阶段。更多信息请参见 TiDB Cloud API 文档。
步骤 3. 创建集群
在 步骤 1 创建的项目下,创建托管在 AWS 上的 TiDB Cloud Dedicated 集群。详细步骤请参考 创建 TiDB Cloud Dedicated 集群。请确保集群所在区域与 步骤 2 中配置的区域一致。
轮换 CMEK
你可以在 AWS KMS 上配置 自动 CMEK 轮换。启用轮换后,无需在 TiDB Cloud 项目的 Encryption Access 设置中更新,包括 CMEK ID。
撤销与恢复 CMEK
如果你需要临时撤销 TiDB Cloud 对 CMEK 的访问权限,请按照以下步骤操作:
- 在 AWS KMS 控制台撤销相应权限,并更新 KMS Key 策略。
- 在 TiDB Cloud 控制台暂停该项目下的所有集群。
撤销 TiDB Cloud 对 CMEK 的访问权限后,如果需要恢复访问权限,请按照以下步骤操作:
- 在 AWS KMS 控制台恢复 CMEK 访问策略。
- 在 TiDB Cloud 控制台恢复该项目下的所有集群。