Google云Pub/Sub拉PERMISSION_DENIED

Google Cloud Pub/Sub Pull PERMISSION_DENIED

我的本地机器上有 Google Cloud SDK,当我 运行 命令时:

gcloud beta pubsub subscriptions pull --auto-ack MY_SUBSCRIPTION_NAME

它工作正常,我可以看到消息。

但是,如果我在我创建的 GCE VM 中做同样的事情,我会收到以下错误:

ERROR: (gcloud.beta.pubsub.subscriptions.pull) PERMISSION_DENIED: User not authorized to perform this action.

我已经尝试了几种方法,例如:

我不知道还有什么方法可以让它发挥作用。有任何想法吗?请在这里给我一盏灯。

您应该转到 Cloud console subscriptions page 并确保您的服务帐户对订阅具有 "Pub/Sub Subscriber" 权限。当您在订阅页面上时,您可以点击订阅旁边的复选框,然后屏幕右侧会出现以下内容:

确保您的服务帐户在圆圈部分,如果不是,请添加。为此,请在 "Add members" 下输入服务帐户,然后在 "Select a role" 下拉列表中选择 "Pub/Sub Subscriber",然后单击 "Add" 按钮。请注意,要添加服务帐户,您需要使用根据 Pub/Sub access control rules.

拥有所有者或 Pub/Sub 管理员的帐户登录云控制台

这与选择"Allow full access to all Cloud APIs."不同,该特性表示GCE实例可以访问哪些API;它不会影响通过这些 API 访问所需资源(例如订阅)的服务帐户的身份验证。

这很可能是通过 gcloud 命令行工具实现的,因为您已使用用于创建订阅的 Google 帐户进行了身份验证。

有时您只需要实现提供 class 来设置授权,例如 Custom CredentialsProvider -> 查看 google 文档。