已配置Pub/Sub权限仍遇PUBLISH_PERMISSIONS_MISSING_FOR_PUBSUB_TOPIC错误
配置Google My Business API与Cloud Pub/Sub订阅新评论通知时,持续收到以下错误:
{ "error": { "code": 400, "message": "Request contains an invalid argument.", "status": "INVALID_ARGUMENT", "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "PUBLISH_PERMISSIONS_MISSING_FOR_PUBSUB_TOPIC", "domain": "mybusinessnotifications.googleapis.com" } ] } }
已完成的配置操作
- Pub/Sub主题设置
- 创建了名为
gmb-reviews的Pub/Sub主题 - 为服务账号
gmb-notifier@karlbook-429614.iam.gserviceaccount.com分配了Pub/Sub Publisher角色 - 在Cloud Console中确认权限配置无误
- 创建了名为
- OAuth2令牌
- 通过用户授权流生成,包含
https://www.googleapis.com/auth/business.manage权限范围 - 经JWT解码器验证,令牌关联账号正确
- 通过用户授权流生成,包含
- API请求代码
使用PATCH方法更新通知设置,代码如下:
async function subscribeToGMBNotifications(accountId, accessToken) { const url = `https://mybusinessnotifications.googleapis.com/v1/accounts/${accountId}/notificationSetting?updateMask=pubsubTopic,notificationTypes`; const payload = { name: `accounts/${accountId}/notificationSetting`, pubsubTopic: `projects/my-project/topics/gmb-reviews`, notificationTypes: ['NEW_REVIEW'], }; try { const response = await fetch(url, { method: 'PATCH', headers: { Authorization: `Bearer ${accessToken}`, 'Content-Type': 'application/json', }, body: JSON.stringify(payload), }); if (response.ok) { const data = await response.json(); console.log('Subscription successful:', data); return data; } else { const errorData = await response.json(); console.error('Subscription error:', errorData); return null; } } catch (error) { console.error('Network error:', error); return null; } }
- Pub/Sub IAM策略验证
gmb-reviews主题的IAM策略显示该服务账号同时拥有Pub/Sub Publisher和Pub/Sub Admin角色
疑问
为何仍会出现PUBLISH_PERMISSIONS_MISSING_FOR_PUBSUB_TOPIC错误?是否存在未配置的权限或额外必要配置?
可能的原因及解决方法
1. 服务账号混淆
你配置的自定义服务账号并非GMB通知服务实际使用的发布账号。GMB通知系统默认使用官方服务账号mybusiness-api-pubsub@system.gserviceaccount.com发送消息,而非你创建的gmb-notifier@karlbook-429614.iam.gserviceaccount.com。
解决方法:
在Pub/Sub主题gmb-reviews的IAM设置中,为mybusiness-api-pubsub@system.gserviceaccount.com添加Pub/Sub Publisher角色。
2. 项目/主题名称拼写错误
检查请求payload里的pubsubTopic字段,确认projects/my-project/topics/gmb-reviews中的项目IDmy-project和主题名gmb-reviews完全匹配实际资源,注意大小写、特殊字符不能出错。
3. 权限生效延迟
IAM权限变更通常需要5-10分钟才能完全生效,如果刚配置完就测试,等待一段时间后再重试。
4. 用户账号权限不足
生成OAuth2令牌的用户必须是目标GMB账号的管理员,仅拥有business.manage范围无法完成通知设置的修改,需要确保用户在GMB后台拥有管理员权限。
5. 组织政策限制
如果你的Cloud项目隶属于企业组织,检查是否存在组织级政策(如constraints/pubsub.publisherAccounts)限制了可发布到Pub/Sub的账号,确保mybusiness-api-pubsub@system.gserviceaccount.com在允许列表中。
内容的提问来源于stack exchange,提问作者Nouh Belahcen

