我们有一个用例,其中project A
有一些机密和数据库不能移动到另一个项目。我们有一个project B
,它使用project A
的秘密和数据库。
Project A
有一个service account X
访问机密和数据库。
Project B
有一个service account Y
,没有权限访问机密和数据库。目标是让service account Y
在连接到github的构建触发器期间模拟service account X
。Project B
有一个云构建管道,需要在CICD过程中临时访问Project A
中的秘密和数据库。
据此:https://cloud.google.com/build/docs/cloud-build-service-account,部分User-specified service account…您可以创建具有模拟权限的自定义IAM角色,也可以使用允许主体模拟服务帐户的预定义角色。
我创建了一个service account X
,并赋予service account Y
权限来模拟它(在策略分析器中检查),但是,当我尝试在project B
的云运行触发器中使用service account X
时,我得到(如预期的):
Failed to update trigger: generic::permission_denied: user does not have impersonation permission on the trigger service account specified: projects/redacted/serviceAccounts/service@project-A.com
什么"user"这是指?使用控制台的那个?构建服务代理?
是否有可能在构建步骤过程中获得
Project B
中的service account Y
来模拟Project A
中的service account X
?
根据这个https://cloud.google.com/build/docs/securing-builds/configure-user-specified-service-accounts…要在Google Cloud控制台中使用触发器页面,用户指定的服务帐户和构建触发器必须在同一个项目中。
是否有解决方法,例如,是否有必要使用gcloud
来模拟帐户?或者是否有一种方法可以使用cloudbuild.yaml
执行跨项目帐户模拟(对于触发器),或者以某种方式告诉触发器正在使用的服务帐户必须模拟另一个帐户?
你有两个解决方案:
- 使用项目A中的服务帐户X作为Cloud Build用户管理的服务帐户。您必须授予Cloud Build Service Agent服务帐户冒充项目a中的服务帐户X的权限。此外,该服务帐户X也必须具有访问项目B资源的权限,以便与它们进行交互。这个解决方案很方便,因为您可以使用秘密管理器 的内置连接
- 使用当前配置,但是当您想要获得秘密时(使用代码,而不是使用Cloud Build内置的秘密管理器集成),在Cloud Build管道中执行手动模拟。