【问题标题】:IAM ServiceAccount for CloudRun service endpoint invocation用于 Cloud Run 服务端点调用的 IAM 服务帐号
【发布时间】:2020-01-25 16:55:53
【问题描述】:
我创建了 CloudRun 服务。它按预期由端点公开,我可以在外部调用它。
想要保护它,我只需要提供内部连接。
端点将被 GKE 集群上运行的 pod 调用。
为了仅提供内部连接,您需要设置适当的 IAM 配置。
我的问题是我必须将适当的 ServiceAccount 分配给谁? (已被授予适当的角色)?
集群本身,或者说运行 k8s 节点的虚拟机?
【问题讨论】:
标签:
google-cloud-platform
google-kubernetes-engine
google-cloud-run
google-iam
google-cloud-iam
【解决方案1】:
您可以在集群、节点和 pod 级别使用服务帐户。我会使用 Kubernetes Secrets(用于精细控制)或集群默认服务帐户来授权 Cloud Run(最简单)。
除非您更改了集群配置,否则已经为您的集群分配了一个 Compute Engine 默认服务帐户。您可以使用此服务帐号而无需进行额外更改来提供访问 Cloud Run 的身份。
服务帐号不需要任何角色。将 IAM 成员添加到 Cloud Run 时授予 IAM 角色 roles/run.invoker。
要访问受 IAP 保护的 Cloud Run,您需要添加一个 HTTP Header “authorization: Bearer TOKEN”。令牌是身份令牌。您的代码/程序必须添加此标头,因为 Kubernetes 不会代表您这样做。
您可以从节点的元数据服务器请求身份令牌。此元数据服务器提供一个带有服务帐户身份的身份令牌。输入服务帐号的电子邮件地址作为 Cloud Run 的会员 ID。