当您将服务帐户分配给 Cloud 运行 服务时,究竟发生了什么?

When you assign service account to a Cloud Run service, what does exactly happen?

我想了解将服务帐户分配给云 运行 服务实际上是为了提高容器的安全性。我在 Cloud 运行 服务中有多个进程 运行ning,并非所有进程都需要访问项目资源。

我想到的一个更具体的问题是: 我是否可以创建多个用户和 运行 某些进程作为无权访问服务帐户的用户,或者是否每个用户都可以访问服务帐户?

我 运行 在 VM 实例上进行了一个小实验(我猜这将是与 Cloud 运行 类似的情况),我在其中创建了一个新用户,但在创建之后,它不是授权使用实例的服务帐户。但是,我不确定是否有办法授权它,这会使我的方法不安全。

谢谢。

编辑

为了执行测试,我创建了一个新的 os 用户并使用了新用户帐户中的 "gcloud auth list"。但是,我应该发出一个 curl 请求,这样我就可以按照下面的答案所指出的那样检索凭据。

你的问题不是很清楚,但我会尽力为你提供一些意见。

当您 运行 云服务 运行 时,您有 2 个选择来定义 its identity

  • 要么是使用的计算引擎服务帐户(默认情况下,您是否未指定任何内容)
  • 或者是您在部署时指定的服务帐户

此服务帐户对 Cloud 运行 服务有效(每个项目最多可以有 1000 个不同的服务)。

现在,当你 运行 你的容器时,服务帐户并没有真正加载到容器中(这与计算引擎是一样的),但是有一个 API 可用于请求此服务帐户的身份验证数据。它的名字 metadata server

不限于用户(我不知道你在Compute Engine上是怎么测试的!),一个简单的curl就足够了。

这个元数据服务器在您使用您的图书馆时使用,例如,您使用 "default credentials"。 gcloud SDK 也使用它。

我希望你现在有更好的看法。如果没有,请在您的问题或评论中添加详细信息。

Guillaume 的回答中缺少的关键字是 "permissions"。

具体来说,如果您不分配服务帐户,云 运行 将使用 Compute Engine default service account

此默认帐户对您的项目具有 Editor 角色(换句话说,它几乎可以对您的 GCP 项目执行任何操作,除了创建新的服务帐户和给他们访问权限,并可能删除 GCP 项目)。如果您使用默认服务帐户并且您的容器遭到破坏,则您可能有麻烦了。 ⚠️

但是,如果您指定一个新的 --service-account,默认情况下它没有权限。您必须绑定您的应用程序需要的角色或权限(例如 GCS 对象 Reader、PubSub 发布者...)。