我在本地计算机上安装了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 API";
执行sudo yum update google-cloud-sdk
我不知道还有什么可以让它发挥作用。有任何想法吗?请在这里告诉我。
答案 0 :(得分:2)
您应该转到Cloud console subscriptions page并确保您的服务帐户拥有"发布/订阅订阅者"订阅许可。当您在订阅页面上时,可以单击订阅旁边的复选框,然后屏幕右侧将显示以下内容:
确保您的服务帐户位于带圆圈的部分,如果不是,请添加。为此,请在"添加成员"下输入服务帐户;并在"选择一个角色"下拉菜单,选择" Pub / Sub Subscriber"然后单击"添加"按钮。请注意,要添加服务帐户,您需要使用具有Pub/Sub access control rules所有者或发布/订阅管理员的帐户登录云控制台。
这与选择"允许对所有Cloud API的完全访问权限不同。"该功能表明GCE实例可以访问哪些API;它不会影响服务帐户的身份验证,以通过这些API访问所需的资源(例如,订阅)。
这可能是通过gcloud命令行工具实现的,因为您使用了用于创建订阅的Google帐户进行了身份验证。