我想了解一下,为了提高容器的安全性,将服务账号分配给Cloud Run服务到底会发生什么。我有多个进程在Cloud Run服务中运行,但并不是所有的进程都需要访问项目资源。
我想到的一个更具体的问题是。我是否可以创建多个用户,并以用户的身份运行一些进程,而这些用户没有访问服务账户的权限,或者每个用户都有访问服务账户的权限?
我在一个虚拟机实例上运行了一个小实验(我想这将是一个类似于云运行的情况),我创建了一个新用户,创建后,它并没有被授权使用实例的服务账户。但是,我不知道有没有一种方法可以对它进行授权,这样会使我的方法不安全。
谢谢你。
EDIT
为了进行测试,我创建了一个新的 os 用户,并使用新用户账户的 "gcloud auth list"。然而,我应该发出一个 curl 请求,这样我就可以像下面的一个答案所指出的那样检索凭证。
你的问题不是很清楚,但我会试着为你提供几个输入。
当您在 Cloud Run 上运行服务时,您有 2 种选择来定义 其身份
这个服务账号对Cloud Run服务有效(每个项目最多可以有1000个不同的服务)。
现在,当你运行你的容器时,服务账户并没有真正加载到容器中(这与计算引擎是一样的),但有一个API可用来请求这个服务账户的验证数据。它的名字是 元数据服务器
它不限制用户(我不知道你是如何在Compute Engine上进行测试的!),简单的curl就可以获得数据。
这个元数据服务器是在你使用你的库的时候使用的,比如你在使用 "默认证书".gcloud SDK也使用了它。
希望你现在有更好的看法。如果没有,请在你的问题或评论中补充细节。
guillaume的回答中缺少的关键词是 "权限"。
具体来说,如果您没有分配服务账号,云运行将使用 "服务账号"。计算引擎默认服务账户.
该默认账户有 Editor
在您的项目中的作用(换句话说。它几乎可以在你的GCP项目上做任何事情。,短于创建新的服务账户并给予他们访问权限,也许还可以删除GCP项目)。) 如果你使用了默认的服务账号,而你的容器又被入侵了,你可能就有麻烦了。⚠️
但是,如果您指定了一个新的 --service-account
在默认情况下,它没有任何权限,你必须给它绑定角色或权限(如GCS对象阅读器,PubSub Publisher......),以满足你的应用需求。你必须根据你的应用程序的需要,对它进行角色或权限的绑定(如GCS对象阅读器,PubSub Publisher...)。