本页面介绍了如何为 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 请求的原因。此外,根据提供的理由,您可以自动批准或拒绝请求。如需了解详情,请参阅查看和处理理由。