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

Posted

技术标签:

【中文标题】您可以在具有服务角色的项目之间共享 Google Cloud KMS 密钥吗?【英文标题】:Can you share Google Cloud KMS keys across projects with service roles? 【发布时间】:2018-08-19 05:27:36 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

有可能!您可以在不同项目中添加具有委托人(成员)和资源的 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 直接粘贴到“权限”下的“添加成员”文本框中,为在http://console.cloud.google.com/iam-admin/kms?project=project1 下选择的密钥环或密钥执行此操作

【讨论】:

啊,这真是太棒了。谢谢! 当我尝试将我的服务帐户粘贴到添加成员文本框中时,我收到以下错误:“电子邮件地址和域必须与有效的 Google 帐户或 Google Apps 帐户相关联。”。这是针对自动生成的 App Engine 服务帐户的 - 这有什么不同吗? 看来我的问题是因为服务帐户来自一个独立的 App Engine 项目,该项目后来被迁移到一个组织中 - 当我在组织下设置一个新的 App Engine 项目时,您的说明工作正常并尝试使用该项目的服务帐户。

以上是关于您可以在具有服务角色的项目之间共享 Google Cloud KMS 密钥吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用私有IP在两个项目之间共享Google Cloud SQL实例?

在 Google Compute Engine 虚拟机之间共享永久性磁盘

具有额外多对多关系的 JPA 多对多

如何转让Google Cloud项目所有权?

在 TFS 2010 中的团队项目集合之间共享数据库项目

在 Typescript 项目之间共享接口