启用客户管理的加密密钥

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

概览

默认情况下,Artifact Registry 会对静态客户内容进行加密。Artifact Registry 会为您处理加密,您无需执行任何其他操作。此选项称为 Google 默认加密

如果您想要控制加密密钥,则可以将 Cloud KMS 中客户管理的加密密钥 (CMEK) 与集成 CMEK 的服务(包括 Artifact Registry)结合使用。使用 Cloud KMS 密钥时,您可以控制其保护级别、位置、轮替时间表、使用和访问权限以及加密边界。此外,您还可使用 Cloud KMS 查看审核日志并控制密钥生命周期。这样您就可以在 Cloud KMS 中控制和管理用于保护数据的对称密钥加密密钥 (KEK),而不是由 Google 拥有和管理这些密钥。

使用 CMEK 设置资源后,访问 Artifact Registry 资源的体验与使用 Google 默认加密功能类似。如需详细了解加密选项,请参阅客户管理的加密密钥 (CMEK)

将 CMEK 与 Cloud KMS Autokey 结合使用

您可以手动创建 CMEK 来保护 Artifact Registry 资源,也可以使用 Cloud KMS Autokey。借助 Autokey,在 Artifact Registry 中创建资源时,系统会按需生成密钥环和密钥。 系统会创建使用密钥执行加密和解密操作的服务代理(如果它们尚不存在),并授予所需的 Identity and Access Management (IAM) 角色。如需了解详情,请参阅 Autokey 概览

如需手动设置 CMEK,请参阅创建密钥并授予权限

如需使用 Autokey 设置 CMEK,请参阅本页中的使用 Autokey 创建密钥

您可以在创建代码库时分配 CMEK 密钥。您无法更改现有代码库的加密机制。如果您有 CMEK 加密的代码库,则无法将加密机制更改为使用的 Google 自有且由 Google 管理 的加密密钥,也无法分配其他 Cloud KMS 密钥进行加密。

如需大致了解 CMEK(包括其启用时间和原因),请参阅 CMEK 概览

创建密钥并授予权限

以下说明介绍了如何为代码库创建密钥,并授予使用该密钥加密和解密代码库数据的权限。您可以使用直接在 Cloud KMS 中创建的密钥,也可以使用由 Cloud External Key Manager 提供的外部管理的密钥。

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

    1. 启用 Cloud KMS API

    2. 使用以下选项之一创建密钥环和密钥:

      Cloud KMS 密钥位置必须与您要加密的代码库所在的代码库位置相匹配。

  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. 授予对 Artifact Registry 服务账号的访问权限:

      1. 选择显示信息面板
      2. 点击添加成员
      3. 添加 Artifact Registry 服务账号。服务账号是 service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com,其中 PROJECT-NUMBER 是运行 Artifact Registry 的项目的项目编号。 Google Cloud
      4. 选择角色中,选择 Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter
      5. 点击保存
    4. 重复执行上一步骤,为将创建代码库的账号授予访问权限。

    5. 返回到密钥管理页面,然后重新选择密钥。

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

    gcloud

    1. 运行以下命令,向 Artifact Registry 服务账号授予访问权限:

      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
    2. 重复执行上一步骤,为将创建代码库的账号授予访问权限。

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

接下来,创建代码库并指定要用于加密的密钥。

使用 Autokey 创建按键

Autokey 会在代码库所在的位置创建新密钥。

所需的角色

如需获得使用 Autokey 创建受保护代码库所需的权限,请让管理员向您授予文件夹或项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建密钥

在使用 Autokey 创建密钥之前,您必须启用 Cloud KMS Autokey

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 点击创建代码库

  3. 填写标准远程虚拟代码库的必填字段和可选字段。

  4. 加密部分,选择 Cloud KMS with Autokey 自动管理

  5. 点击创建

移除访问权限

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

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

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

具有 Artifact Registry Administrator 角色 (roles/artifactregistry.admin) 或 Owner 角色 (roles/owner) 的用户可以删除代码库。

CMEK 组织政策

Artifact Registry 支持可以要求 CMEK 保护的组织政策限制条件

政策可以限制哪些 Cloud KMS CryptoKey 可用于 CMEK 保护。

  • 当 Artifact Registry API 位于限制条件 constraints/gcp.restrictNonCmekServices 的服务 Deny 政策列表中时,Artifact Registry 会拒绝创建未受 CMEK 保护的新代码库。

  • 配置 constraints/gcp.restrictCmekCryptoKeyProjects 后,Artifact Registry 会创建受 CMEK 保护的代码库,这些代码库由来自允许的项目、文件夹或组织的 CryptoKey 保护。

Pub/Sub 支持相同的约束条件。当您在 Google Cloud 项目中启用 Artifact Registry API 时,Artifact Registry 会尝试使用 的 Google 拥有且由 Google 管理的 加密密钥自动创建主题 ID 为 gcr 的 Pub/Sub 主题。不过,如果 Pub/Sub API 位于约束条件 constraints/gcp.restrictNonCmekServicesDeny 政策列表中,则 Pub/Sub 不会创建该主题。在这种情况下,您必须使用 CMEK 加密创建 gcr 主题。如需了解详情,请参阅 Pub/Sub 有关对主题进行加密的说明

如需详细了解如何配置组织政策,请参阅 CMEK 组织政策

后续步骤