【问题标题】:如何让 GKE 部署的应用程序访问 Google Pub/Sub?
【发布时间】:2022-01-16 06:33:49
【问题描述】:

我部署了一个使用 google cloud pub/sub 的 kotlin 后端应用程序。我最近使用 Cloud Run 部署了该应用程序,它运行良好,可以完全访问 Pub/Sub。 现在由于某些原因,我必须使用 GKE 部署应用程序。但是现在对 Pub/Sub 的访问似乎不再起作用了。

我检查了我的 GKE 集群使用的服务帐户,发现它是默认帐户。因此,我向该服务帐户授予了 Pub/Sub Editor 的权限。

我认为这一切都应该正常。

但我仍然在日志中看到此错误消息:

com.google.api.gax.rpc.PermissionDeniedException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: User not authorized to perform this action.

有什么我错过的想法吗?

【问题讨论】:

    标签: google-cloud-platform google-kubernetes-engine google-cloud-pubsub


    【解决方案1】:

    这可能是两件事:

    • 您的 pod 使用 Workload Identity 并且不使用默认服务帐户(具有编辑角色,顺便要避免的事情......)。因此,您使用的服务帐号没有 PubSub 权限
    • 或者,因为您使用默认的计算引擎服务帐户(具有编辑角色,顺便说一下要避免的事情......我再说一遍,但这真的很糟糕!),@987654322 @ 是默认设置的(如果您没有覆盖该参数),并且由于凭据范围,您无法访问 PubSub API。

    最好的解决方案是使用自定义服务帐户重新创建您的节点池。像这样,您可以在节点池级别强制执行最低权限,并避免传统的计算引擎范围定义和限制。如果您使用工作负载身份,您可以在安全性方面更上一层楼,并在 pod 级别强制执行最低权限。

    【讨论】:

    • 我忘了说我使用的是 GKE Autopilot 集群。这也会引起问题吗?因为我现在很难弄清楚如何为该 Autopilot 集群自定义服务帐户
    • 通过查看文档,与 GKE Autopilot 的行为相同:cloud.google.com/kubernetes-engine/docs/tutorials/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2019-12-06
    • 2019-06-26
    • 2021-01-05
    • 2021-08-22
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多