使用 CMEK

本页介绍了如何为 AlloyDB for PostgreSQL 创建、配置和应用客户管理的加密密钥 (CMEK)。

如需详细了解 CMEK,请参阅 CMEK 简介

为 AlloyDB 创建和授权 CMEK 密钥

  1. 在 Cloud Key Management Service (Cloud KMS) 中创建一个密钥。AlloyDB 支持以下类型的密钥:

    密钥必须与 AlloyDB 集群位于同一位置。例如,位于 us-west1 中的 AlloyDB 集群只能使用 us-west1 中的密钥。

    如果您已在正确的位置具有 Cloud KMS 密钥,则可以跳过此步骤。

  2. 向 AlloyDB 授予对密钥的访问权限。

    1. 使用 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
      
    2. 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 密钥

控制台

备份页面的加密列会显示项目中每个集群是使用 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 密钥后,您将无法访问该集群的数据,除非您重新启用该密钥。

不过,停用密钥可能需要长达 3 小时才能传播到 AlloyDB 集群。如需停用密钥并立即禁止访问您的数据,请按以下步骤操作:

  1. 删除集群的主实例。这不会影响集群的数据。您可以在重新启用密钥后创建新的主实例,如以下部分所述。

  2. 使用 Cloud KMS 停用密钥。

启用密钥

如需启用密钥,请按以下步骤操作:

  1. 使用 Cloud KMS 启用密钥

  2. 如果您在停用密钥之前删除了集群的主实例,请创建新的主实例

启用密钥最长可能需要 3 小时才能传播到您的集群。一旦发生这种传播,您就可以访问集群的数据。

查看 Cloud KMS 密钥的审核日志

如需查看与特定 CMEK 密钥关联的审核日志,请按以下步骤操作:

  1. 确保针对您的项目中的 Cloud KMS API 启用日志记录

  2. 转到 Google Cloud 控制台中的日志浏览器

    转到日志浏览器

  3. 通过将以下行添加到查询构建器,将日志条目限制为 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
  4. 在正常操作下,系统会使用 INFO 严重程度记录加密和解密操作。当 AlloyDB 集群中的实例验证 {kms_name_short}} 密钥时(大约每 5 分钟一次),系统会记录这些条目。

  5. 如果 AlloyDB 无法访问该密钥,则会将操作记录为 ERROR

查看 Cloud EKM 密钥的访问理由

如果您使用 Cloud EKM 密钥,则可以使用 Key Access Justifications 查看每个 Cloud EKM 请求的原因。此外,根据提供的理由,您可以自动批准或拒绝请求。如需了解详情,请参阅查看和处理理由