这篇 GCP 文章建议使用两个独立的项目:一个用于密钥管理,另一个用于加密/解密。
这似乎是一个适用于用户角色的设置,但不适用于服务角色,因为服务角色绑定到它所属的项目。我错过了什么吗?
实际上有没有一种方法可以让一个角色(比如项目 1)创建 KMS 密钥,然后拥有一个服务角色(比如项目 2),可以在运行时访问所述密钥进行解密?
这篇 GCP 文章建议使用两个独立的项目:一个用于密钥管理,另一个用于加密/解密。
这似乎是一个适用于用户角色的设置,但不适用于服务角色,因为服务角色绑定到它所属的项目。我错过了什么吗?
实际上有没有一种方法可以让一个角色(比如项目 1)创建 KMS 密钥,然后拥有一个服务角色(比如项目 2),可以在运行时访问所述密钥进行解密?
这是可能的!您可以在不同项目中添加具有委托人(成员)和资源的 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
您也可以通过直接粘贴到在http://console.cloud.google.com/iam-admin/kms?project=project1svcacct@project2.iam.gserviceaccount.com
下选择的 KeyRing 或密钥的“权限”下的“添加成员”文本框来执行此操作