本页面介绍了如何使用客户管理的加密密钥 (CMEK) 对存储在代码库中的内容进行加密。
概览
默认情况下,Google Cloud 会自动加密 静态数据。如果 您需要遵循特定的合规性或监管要求, 则可以创建使用 CMEK 密钥加密的代码库。 代码库的元数据(例如代码库名称)会使用 Google 默认加密方式。
启用 CMEK 后,代码库中的静态数据将采用您在 Cloud Key Management Service 中管理的密钥进行加密。您可以使用 Identity and Access Management 来控制对 CMEK 密钥的访问。如果您暂时停用或永久销毁 CMEK 密钥,则无法访问使用该密钥加密的数据。
借助 CMEK,您可以控制密钥的生命周期和管理的更多方面,但 Cloud KMS 服务也会产生额外费用。Artifact Registry 代码库和其他 使用 CMEK 加密的 Google Cloud 资源也可使用 Cloud KMS 配额,具体取决于密钥类型 。请确认您有足够的配额来启用应用层 Secret 对应用和工作流进行加密
Cloud KMS 可以与 Artifact Registry 或在一个单独的项目中集中管理密钥 多个项目。为了支持职责分离,并加强对 建议您在单独的控制台中创建和管理密钥 包含其他 Google Cloud 资源的项目。
您在创建代码库时分配 CMEK 密钥。您无法更改 现有代码库的加密机制如果您有经过 CMEK 加密的 存储区,您无法将加密机制更改为 Google 默认机制 或分配其他 Cloud KMS 密钥进行加密。
如需大致了解 CMEK(包括其启用时间和原因),请参阅 Cloud KMS 文档。
创建密钥并授予权限
以下说明介绍了如何为代码库创建密钥以及 授予使用密钥加密和解密代码库数据的权限。您 可以使用直接在 Cloud KMS 中创建的密钥或 使用 Cloud External Key Manager 提供的密钥。
在您要用于管理密钥的 Google Cloud 项目中,执行以下操作:
使用以下选项之一创建密钥环和密钥:
- 直接在 Cloud KMS 中创建密钥环和密钥。
- 使用由外部管理的密钥。创建外部密钥,然后创建 Cloud EKM 密钥,以通过 Cloud KMS 来提供该密钥。
如果您尚未在 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 服务账号的访问权限:
重复上一步,为要 创建代码库
返回到加密密钥页面,然后重新选择密钥。
选择显示信息面板。您应该会在 角色/成员列。
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.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
地点
重复上一步,为要 创建代码库
有关此命令的详细信息,请参阅 gcloud kms keys add-iam-policy-binding 文档。
您现在可以创建代码库并指定要用于加密的密钥。
移除访问权限
您可以通过多种方式移除对采用 CMEK 加密的代码库的访问权限:
- 撤消 Cloud KMS CryptoKey Encrypter/Decrypter role 从 Artifact Registry 服务账号 Google Cloud 控制台 或 gcloud CLI
- 暂时停用 CMEK 密钥
- 永久销毁 CMEK 密钥
我们建议您先撤消 Artifact Registry 服务账号的权限,然后再停用或销毁密钥。权限的更改会在数秒内达成一致,因此您可以观察停用或销毁密钥造成的影响。
停用或销毁代码库的加密密钥时,您无法查看或检索工件数据。代码库中存储的所有工件数据都将无法访问,包括构建的工件、任意二进制数据 (blob) 以及清单(例如 Docker 清单或 npm packument 文件)。具有 Artifact Registry Reader 角色或 Viewer 角色的用户仍然可以查看工件元数据,例如工件名称、版本或标记。
具有 Artifact Registry Administrator 角色或 Owner 角色的用户可以删除代码库。
CMEK 组织政策
Artifact Registry 支持组织政策限制条件 可能需要 CMEK 保护。
政策可以限制可用于哪些 Cloud KMS CryptoKey CMEK 保护。
当 Artifact Registry API 出现在以下服务的
Deny
政策列表中时 限制条件constraints/gcp.restrictNonCmekServices
,Artifact Registry 拒绝创建不受 CMEK 保护的新代码库。配置
constraints/gcp.restrictCmekCryptoKeyProjects
后, Artifact Registry 创建受 CMEK 保护的代码库, 受允许的项目、文件夹或组织中的 CryptoKey 保护。
Pub/Sub 支持相同的限制条件。启用
Google Cloud 项目 Artifact Registry 中的 Artifact Registry API
尝试自动创建具有主题 ID 的 Pub/Sub 主题
gcr
(使用 Google 拥有的密钥和 Google 管理的密钥)。Pub/Sub API 出现在限制条件的 Deny
政策列表中时
constraints/gcp.restrictNonCmekServices
,Pub/Sub 拒绝
创建主题。如需创建使用 CMEK 加密的 gcr
主题,请参阅
Pub/Sub 加密主题说明。
如需详细了解如何配置组织政策,请参阅 CMEK 组织政策。
后续步骤
- 创建一个使用 CMEK 加密的代码库
- 详细了解 CMEK
- 详细了解 Google 默认加密方式