您可以在具有服务角色的项目之间共享 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.com
对project1
中特定密钥的解密访问权限,您可以例如:
$ 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实例?