启用客户管理的加密密钥

本页面介绍了如何使用客户管理的加密密钥 (CMEK) 对存储在代码库中的内容进行加密。

概览

默认情况下,Google Cloud 会使用 Google 管理的加密密钥自动加密静态数据。如果您有与保护数据的密钥相关的合规性或监管要求,则可以创建使用 CMEK 密钥加密的代码库。关于代码库的元数据(例如代码库名称)将采用 Google 默认加密技术进行加密。

启用 CMEK 后,代码库中的静态数据将采用您在 Cloud Key Management Service 中管理的密钥进行加密。您可以使用 Identity and Access Management 来控制对 CMEK 密钥的访问。如果您暂时停用或永久销毁 CMEK 密钥,则无法访问使用该密钥加密的数据。

借助 CMEK,您可以控制密钥的生命周期和管理的更多方面,但 Cloud KMS 服务也会产生额外费用。使用 CMEK 加密的代码库还会为每个上传或下载使用 Cloud Key Management Service 加密请求配额

Cloud KMS 可以在 Artifact Registry 所在的 Google Cloud 项目中运行,也可以在用于集中管理多个项目密钥的另一个项目中运行。

您可以在创建代码库时分配 Cloud KMS 密钥。

您无法更改现有代码库的加密机制。如果您有 CMEK 加密的代码库,则无法将加密机制更改为 Google 默认加密或分配其他 Cloud KMS 密钥用于加密。

如需大致了解 CMEK(包括其启用时间和原因),请参阅 Cloud KMS 文档

创建密钥并授予权限

如需为代码库创建密钥,并授予权限以便使用该密钥加密和解密代码库数据,请执行以下操作:

  1. 在您要用于管理密钥的 Google Cloud 项目中,执行以下操作:

    1. 启用 Cloud KMS API
    2. 创建密钥环和密钥密钥位置必须与您要加密的代码库所在的代码库位置相匹配。
  2. 如果您尚未在 Artifact Registry 项目中创建代码库,则表示 Artifact Registry 服务帐号尚不存在。如需创建服务帐号,请使用以下命令:

    gcloud beta services identity create --service=artifactregistry.googleapis.com --project=PROJECT
    

    PROJECT 替换为运行 Artifact Registry 的项目的 ID。

  3. 为 Artifact Registry 服务帐号授予 CryptoKey Encrypter/Decrypter IAM 角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter)。为您创建的密钥授予此权限。

    控制台

    1. 转到加密密钥页面。

      打开 Cloud KMS 页面

    2. 选择您创建的密钥。

    3. 选择显示信息面板

    4. 点击添加成员

    5. 添加 Artifact Registry 服务帐号。服务帐号是 service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com,其中,PROJECT-NUMBER 是 Artifact Registry 运行所在的 Google Cloud 项目的项目编号

    6. 选择角色中,选择 Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter

    7. 点击保存

    8. 返回到加密密钥页面,然后重新选择密钥。

    9. 选择显示信息面板。您应该会在角色/成员列中看到角色。

    gcloud

    运行以下命令:

    gcloud kms keys add-iam-policy-binding [--project=PROJECT] \
           KEY --location LOCATION --keyring=KEYRING \
           --member serviceAccount:service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \
           --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    
    • PROJECT 是包含密钥的项目的 ID。
    • KEY 是密钥名称。
    • LOCATION 是密钥位置。密钥位置必须与您要加密的代码库所在的代码库位置相匹配。
    • KEYRING 是密钥环名称。
    • PROJECT-NUMBER 是运行 Artifact Registry 的 Google Cloud 项目的项目编号

    如需详细了解此命令,请参阅 gcloud kms keys add-iam-policy-binding 文档。

您现在可以创建代码库并指定要用于加密的密钥。

移除访问权限

您可以通过多种方式移除对采用 CMEK 加密的代码库的访问权限:

我们建议您先撤消 Artifact Registry 服务帐号的权限,然后再停用或销毁密钥。权限的更改会在数秒内达成一致,因此您可以观察停用或销毁密钥造成的影响。

停用或销毁代码库的加密密钥时,您无法查看或检索工件数据。代码库中存储的所有工件数据都将无法访问,包括构建的工件、任意二进制数据 (blob) 以及清单(例如 Docker 清单或 npm packument 文件)。具有 Artifact Registry Reader 角色或 Viewer 角色的用户仍然可以查看工件元数据,例如工件名称、版本或标记。

具有 Artifact Registry Administrator 角色或 Owner 角色的用户可以删除代码库。

后续步骤