您能否在具有服务角色的项目之间共享 Google Cloud KMS 密钥?

Can you share Google Cloud KMS keys across projects with service roles?

This GCP article 建议使用两个单独的项目:一个用于密钥管理,另一个用于 encryption/decryption。

这似乎是一个适用于用户角色的设置,但不适用于服务角色,因为服务角色绑定到它所属的项目。我错过了什么吗?

实际上是否有一种方法可以让一个角色(比如在项目 1 中)创建 KMS 密钥,然后让服务角色(比如在项目 2 中)可以访问所述密钥 运行时解密?

有可能!您可以在不同的项目中添加具有主体(成员)和资源的 IAM 策略。

要授予 svcacct@project2.iam.gserviceaccount.comproject1 中特定密钥的解密访问权限,您可以例如:

$ KMS_KEY_RESOURCE_NAME=projects/project1/locations/${location}/keyRings/${keyring_name}/cryptoKeys/${crypto_key_name}
$ gcloud kms keys add-iam-policy-binding \
  --location ${location} ${KMS_KEY_RESOURCE_NAME} \
  --member serviceAccount:svcacct@project2.iam.gserviceaccount.com \
  --role roles/cloudkms.cryptoKeyDecrypter

您也可以通过将 svcacct@project2.iam.gserviceaccount.com 直接粘贴到 "Permissions" 下的 "Add members" 文本框中,为在 http://console.cloud.google.com/iam-admin/kms?project=project1

下选择的密钥环或密钥执行此操作