如何让我的 GKE 部署的应用程序访问 Google Pub/Sub?

How can I give my GKE deployed application access to Google Pub/Sub?

我部署了一个利用 google 云 pub/sub 的 kotlin 后端应用程序。我最近使用 Cloud 运行 部署了该应用程序,它 运行 可以完全访问 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.

有什么我遗漏的想法吗?

这可能是两件事:

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

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