错误 403:向 Cloud PubSub 发送测试消息时出错:用户无权执行此操作
Posted
技术标签:
【中文标题】错误 403:向 Cloud PubSub 发送测试消息时出错:用户无权执行此操作【英文标题】:Error 403: Error sending test message to Cloud PubSub: User not authorized to perform this action 【发布时间】:2018-02-18 09:12:41 【问题描述】:我想设置推送通知手表,但收到错误响应。我需要什么授权?
请求:
// Google API
$client = getClient();
// POST request
$ch = curl_init('https://www.googleapis.com/gmail/v1/users/me/watch');
curl_setopt_array($ch, array(
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer ' . $client->getAccessToken()['access_token'],
'Content-Type: application/json'
),
CURLOPT_POSTFIELDS => json_encode(array(
'topicName' => 'projects/xxxx/topics/xxxx',
'labelIds' => ["INBOX"]
))
));
回复:
"error":
"errors": [
"domain": "global",
"reason": "forbidden",
"message": "Error sending test message to Cloud PubSub projects/xxxx/topics/xxxx : User not authorized to perform this action."
],
"code": 403,
"message": "Error sending test message to Cloud PubSub projects/xxxx/topics/xxxx : User not authorized to perform this action."
更多细节:
使用的范围是GMAIL_READONLY
。
订阅和主题存在并且它们是在同一个控制台中创建的。
我尝试从控制台发布一条新消息,它成功了。
【问题讨论】:
【参考方案1】:来自页面:https://developers.google.com/gmail/api/guides/push#grant_publish_rights_on_your_topic
Cloud Pub/Sub 要求您授予 Gmail 权限才能发布 通知您的主题。
为此,您需要授予发布权限 服务帐户:gmail-api-push@system.gserviceaccount.com。你可以做 这使用 Cloud Pub/Sub Developer Console 权限界面 遵循资源级访问控制说明。
(强调)
【讨论】:
这个serviceAccount:gmail-api-push@system.gserviceaccount.com
用户是如何创建的?我没有它,但我也无法创建它。我假设 serviceAccount
应该被替换为某些东西,但我不确定那是什么。【参考方案2】:
您必须授予主题权限。 转到您的主题列表 或点击以下链接https://console.cloud.google.com/cloudpubsub/topic。
然后点击你的主题
然后在右侧的权限选项卡中,点击添加成员按钮
然后输入新成员的电子邮件或如果您的应用有多个用户,那么您可以输入allUsers。然后选择角色 Pub/Sub Publisher 并点击 Save 按钮。 注意:这将使您的主题公开。
【讨论】:
让所有用户都可以使用它是一种安全风险,对吧?我试过allAuthenticated
users 还是不行。
添加到所有者附加角色Pub/Sub Admin
以解决安全问题。如果不想遇到安全问题,请不要添加AllUsers
和AllAuthorizedUsers
【参考方案3】:
不要添加 allAuthenticatedUsers
或 allUsers
,这会使您的主题公开。你可能已经看到了这个警告
此资源是公开的,互联网上的任何人都可以访问。 要删除公共访问权限,请删除“allUsers”和“allAuthenticatedUsers” 来自资源的成员。
所以不要这样做
改为添加gmail-api-push@system.gserviceaccount.com
。这会奏效。
参考:https://developers.google.com/gmail/api/guides/push#grant_publish_rights_on_your_topic
【讨论】:
有效。转到添加成员并在新成员输入中输入gmail-api-push@system.gserviceaccount.com
,然后选择Pub/Sub Publisher
的角色并保存。以上是关于错误 403:向 Cloud PubSub 发送测试消息时出错:用户无权执行此操作的主要内容,如果未能解决你的问题,请参考以下文章
gmail.users.watch 无法使用 DwD 服务帐户向 PubSub 发送测试消息
为 GCP IOT Core 和 PUB/SUB 运行 cloudiot_pubsub_example_server.py 代码时出现 403 错误