本页面介绍了如何为 AlloyDB for PostgreSQL 创建、配置和应用客户管理的加密密钥 (CMEK)。
如需详细了解 CMEK,请参阅 CMEK 简介。
为 AlloyDB 创建并授权 CMEK 密钥
在 Cloud Key Management Service (Cloud KMS) 中创建一个密钥。AlloyDB 支持以下类型的密钥:
密钥必须与 AlloyDB 集群位于同一位置。例如,位于
us-west1
中的 AlloyDB 集群只能使用us-west1
中的密钥。如果您已在正确的位置具有 Cloud KMS 密钥,则可以跳过此步骤。
向 AlloyDB 授予对密钥的访问权限。
- 使用 Google Cloud CLI 创建并显示服务代理,或是直接显示(如果账号已存在):
gcloud beta services identity create --service=alloydb.googleapis.com \ --project=PROJECT
gcloud services identity 命令会创建或获取 AlloyDB 可用于代表您访问 Cloud KMS 密钥的服务代理。
服务账号 ID 类似于邮箱:
Service identity created: service-xxx@gcp-sa-alloydb.iam.gserviceaccount.com
- 将
cloudkms.cryptoKeyEncrypterDecrypter
角色授予服务账号:
gcloud kms keys add-iam-policy-binding KEY \ --location REGION \ --keyring KEYRING \ --project=PROJECT \ --member serviceAccount:service-xxx@gcp-sa-alloydb.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
替换以下内容:
- KEY:密钥的 Cloud KMS ID
- REGION:密钥的区域,例如
us-central1
- PROJECT:密钥的项目 ID
- KEYRING:密钥的 Cloud KMS 密钥环的 ID
此角色可授予服务账号使用 Cloud KMS 密钥进行加密和解密的权限。如需了解详情,请参阅 Cloud KMS 权限和角色。
创建 CMEK 加密的集群
创建新集群时,您可以选择使用默认的 Google 管理的加密密钥来加密集群,也可以选择改用 CMEK 密钥。如需了解详情,请参阅创建集群及其主实例。
查看集群的加密方法和 CMEK 密钥
控制台
集群页面的加密列会显示项目中的每个集群是使用 Google 管理的加密还是 CMEK。
如需查看使用 CMEK 的集群的密钥详细信息,请点击资源名称列中的相应名称。生成的详细信息页面的加密密钥字段包含密钥的说明,其中包括指向其 Cloud KMS 详细信息页面的链接。
gcloud
调用 gcloud alloydb clusters
describe
命令:
gcloud alloydb clusters describe CLUSTER \
--project=PROJECT \
--region=REGION
替换以下内容:
- CLUSTER:要描述的集群的 ID
- PROJECT:虚拟机的项目 ID
- REGION:集群所在的区域,例如
us-central1
输出包含 encryptionInfo
字段,其中包含集群加密的摘要。
将 CMEK 应用于备份
创建新备份时,您可以选择使用默认的 Google 管理的加密密钥还是 CMEK 密钥对其进行加密。如需了解详情,请参阅创建按需备份或安排自动备份。
您还可以选择将 CMEK 密钥应用于从备份恢复时创建的集群,无论该备份的加密方法是什么。如需了解详情,请参阅恢复集群。
使用 CMEK 加密轮替密钥
在将客户管理的加密密钥 (CMEK) 与 AlloyDB 集群搭配使用时,务必了解在 Cloud Key Management Service (Cloud KMS) 中轮替这些密钥会产生哪些影响。
轮替 CMEK 密钥时,现有 AlloyDB 数据会发生以下变化:
继续立即访问:只要较早版本的密钥在 KMS 中仍然可用,且未停用或删除,数据就会继续使用其原始数据加密密钥 (DEK) 版本进行加密。
完整的数据重新加密是手动操作:如需使用最新的主密钥版本加密所有 AlloyDB 数据,您必须重新加密这些数据。
如需使用新的 CMEK 密钥版本重新加密现有集群,您必须执行备份和恢复操作:
创建现有集群的备份。
将备份恢复到新集群中,并在恢复过程中指定新的 CMEK 主密钥版本。
如需了解详情,请参阅集群恢复。
频繁轮替 AlloyDB 的 CMEK 密钥需要大量的运营开销。由于现有数据不会自动重新加密,并且手动重新加密需要将数据完整备份并恢复到新集群,因此频繁轮替密钥会很麻烦,且可能会影响可用性或增加管理复杂性。
只有在确认所有相关的 AlloyDB 数据都已手动重新加密,且这些数据使用的是较新的密钥版本后,您才能安全地删除 Cloud KMS 中的旧 CMEK 密钥版本。
查看备份的加密方法和 CMEK 密钥
控制台
备份页面的加密列会显示项目中的每个集群是使用 Google 管理的加密还是 CMEK。
如需查看使用 CMEK 的备份的密钥详细信息,请点击恢复。后续详细信息面板的加密密钥字段包含密钥的说明,其中包括指向其自己的 Cloud KMS 详细信息页面的链接。
gcloud
调用 gcloud alloydb backups describe
命令:
gcloud alloydb backups describe CLUSTER \
--project=PROJECT \
--region=REGION
替换以下内容:
- CLUSTER:要描述的备份的 ID
- PROJECT:备份的项目 ID
- REGION:备份的区域,例如
us-central1
输出包含 encryptionInfo
字段,其中汇总了备份的加密情况。
停用密钥
停用集群的 CMEK 密钥会导致该集群的数据无法访问,直到您重新启用该密钥为止。
不过,停用密钥可能需要长达三小时才能传播到您的 AlloyDB 集群。如需停用密钥,同时防止立即访问您的数据,请按照以下步骤操作:
删除集群的主实例。 这不会影响您的集群的数据。您可以在重新启用密钥后创建新的主实例,如下一部分所述。
启用密钥
如需启用密钥,请按照以下步骤操作:
如果您在停用密钥之前删除了您的集群的主实例,请创建新的主实例。
启用密钥可能需要长达三小时才能传播到您的集群。一旦发生此传播,集群的数据便可供访问。
查看 Cloud KMS 密钥的审核日志
如需查看与特定 CMEK 密钥关联的审核日志,请按照以下步骤操作:
确保针对您的项目中的 Cloud KMS API 启用日志记录。
在 Google Cloud 控制台中前往 Logs Explorer。
通过将以下行添加到查询构建器,将日志条目限制为 Cloud KMS 密钥:
resource.type="cloudkms_cryptokey" resource.labels.location="REGION" resource.labels.key_ring_id="KEYRING" resource.labels.crypto_key_id="KEY"
替换以下内容:
- REGION:密钥的区域,例如
us-central1
- KEYRING:密钥的 Cloud KMS 密钥环的 ID
- KEY:密钥的 Cloud KMS ID
- REGION:密钥的区域,例如
在正常操作下,系统会使用
INFO
严重程度记录加密和解密操作。当 AlloyDB 集群中的实例验证 Cloud KMS 密钥时(大约每五分钟一次),将会记录这些条目。如果 AlloyDB 无法访问该密钥,则会将操作记录为
ERROR
。
查看 Cloud EKM 密钥的访问理由
如果您使用 Cloud EKM 密钥,则可以使用 Key Access Justifications 查看每个 Cloud EKM 请求的原因。此外,根据提供的理由,您可以自动批准或拒绝请求。如需了解详情,请参阅查看和处理理由。