本页面介绍了如何使用客户管理的加密密钥 (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 密钥。您无法更改现有代码库的加密机制。如果您有 CMEK 加密的代码库,则无法将加密机制更改为使用Google Cloud 支持 加密密钥,也无法分配其他 Cloud KMS 密钥用于加密。
如需大致了解 CMEK(包括其启用时间和原因),请参阅 CMEK 概览。
创建密钥并授予权限
以下说明介绍了如何为代码库创建密钥,并授予权限以便使用该密钥加密和解密代码库数据。您可以使用直接在 Cloud KMS 中创建的密钥,也可以使用由 Cloud External Key Manager 提供的外部管理的密钥。
在您要用于管理密钥的 Trusted Cloud 项目中,执行以下操作:
使用以下选项之一创建密钥环和密钥:
如果您尚未在 Artifact Registry 项目中创建代码库,则表示 Artifact Registry 服务账号尚不存在。如需创建服务账号,请使用以下命令:
gcloud beta services identity create --service=artifactregistry.googleapis.com --project=PROJECT
将 PROJECT 替换为运行 Artifact Registry 的项目的 ID。
为 Artifact Registry 服务账号授予 CryptoKey Encrypter/Decrypter IAM 角色 (
roles/cloudkms.cryptoKeyEncrypterDecrypter
)。为您创建的密钥授予此权限。控制台
转到加密密钥页面。
选择您创建的密钥。
授予对 Artifact Registry 服务账号的访问权限:
- 选择显示信息面板。
- 点击添加成员。
- 添加 Artifact Registry 服务账号。服务账号为 service-PROJECT-NUMBER@gcp-sa-artifactregistry.s3ns-system.iam.gserviceaccount.com,其中 PROJECT-NUMBER 是运行 Artifact Registry 的 Trusted Cloud 项目的项目编号。
- 在选择角色中,选择 Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter。
- 点击保存。
重复上一步,授予将创建代码库的账号的访问权限。
返回到密钥管理页面,然后重新选择密钥。
选择显示信息面板。您应该会在角色/成员列中看到角色。
gcloud
运行以下命令,向 Artifact Registry 服务账号授予访问权限:
gcloud kms keys add-iam-policy-binding [--project=PROJECT] \ KEY --location LOCATION --keyring=KEYRING \ --member serviceAccount:service-PROJECT-NUMBER@gcp-sa-artifactregistry.s3ns-system.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
地点
- PROJECT 是包含密钥的项目的 ID。
- KEY 是密钥名称。
- LOCATION 是密钥位置。
- KEYRING 是密钥环名称。
- PROJECT-NUMBER 是运行 Artifact Registry 的 Trusted Cloud 项目的项目编号。
重复上一步,授予将创建代码库的账号的访问权限。
如需详细了解此命令,请参阅 gcloud kms keys add-iam-policy-binding 文档。
接下来,创建代码库并指定要用于加密的密钥。
移除访问权限
您可以通过多种方式移除对采用 CMEK 加密的代码库的访问权限:
- 使用以下方法之一从 Artifact Registry 服务账号撤消 Cloud KMS CryptoKey Encrypter/Decrypter 角色:
- 暂时停用客户管理的加密密钥
- 永久销毁 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 会创建受允许的项目、文件夹或组织中的 CryptoKey 保护的 CMEK 保护代码库。
Pub/Sub 支持相同的限制。当您在 Trusted Cloud by S3NS 项目中激活 Artifact Registry API 时,Artifact Registry 会尝试使用 Google Cloud 提供支持的 加密密钥自动创建主题 ID 为 gcr
的 Pub/Sub 主题。不过,如果 Pub/Sub API 位于限制 constraints/gcp.restrictNonCmekServices
的 Deny
政策列表中,则 Pub/Sub 不会创建相应主题。在这种情况下,您必须创建采用 CMEK 加密的 gcr
主题。如需了解详情,请参阅 Pub/Sub 有关加密主题的说明。
如需详细了解如何配置组织政策,请参阅 CMEK 组织政策。
后续步骤
- 创建一个使用 CMEK 加密的代码库
- 详细了解 CMEK