首页 > 解决方案 > 在 GCP 上将服务帐号添加到 Cloud Function

问题描述

所以我正在尝试部署一个云功能来关闭 GCP 上不同项目中的所有虚拟机。

我已使用本指南将功能添加到单个项目:https ://cloud.google.com/scheduler/docs/start-and-stop-compute-engine-instances-on-a-schedule

它使用正确的标签关闭/启动虚拟机。

现在我想将它扩展到跨项目的所有 VM,所以我想我需要另一个可以在云功能下添加的服务帐户。

我从云管理员那里获得了一个可以访问所有项目的服务帐户,并将其添加到 IAM 下,并赋予其所有者角色。但问题是我无法将服务帐户分配给该功能。

有什么我想念的吗?或者有没有更简单的方法来做我想要完成的事情?

标签: google-cloud-platform

解决方案


最简单的方法是授予该 Cloud Function 使用的服务帐户访问其他项目的权限。您只需要转到您的其他项目并在 IAM 部分中添加此服务帐户并为其提供所需的权限,例如compute.admin在本例中。

请注意,默认情况下,Cloud Functions 使用 App Engine 默认服务帐户,这对您来说可能不方便,因为您的 Cloud Function 项目中的 App Engine 应用也会被授予compute.admin其他项目中的角色。

我建议为此用例创建一个专用服务帐户(在与您的函数相同的项目中)并将其分配给函数,然后将其添加为其他项目的成员。

然后,在您的 Cloud Function 中,您需要为每个要执行的项目运行代码。您可以为每个将项目 ID 指定为构造函数选项的客户端对象创建一个单独的客户端对象,如下所示:

const compute = new Compute({
    projectId: 'your-project-id'
});

到目前为止,您只循环遍历函数运行所在的当前项目中的虚拟机。

另一种选择是在您想要采取行动的每个项目中定义这样的功能。您将拥有一个可以调用的“主”函数,它会作用于其项目中的虚拟机,并调用另一个项目中的其他函数来作用于他们的虚拟机。


推荐阅读