我有一个基于 Cloud Run 的微服务,该服务将消息发布到 GCP PubSub 主题,当从内部计划的 cron 作业调用该服务时,该服务运行良好,但当从外部第三方 api 调用该微服务并且然后尝试向主题发布消息我收到此权限错误:'Error: 7 PERMISSION_DENIED: User not authorized to perform this action.'
Pub/Sub Publisher
的服务帐户下运行。 但是,当我将角色
Pub/Sub Admin
添加到此服务帐户时,它确实适用于这些外部发起的调用!我正在尝试找出需要添加到此 s.a. 的更细粒度的权限。使其适用于外部传入消息,这是为什么?
根据此官方文件:
如果出现此错误,请执行以下操作:请参阅此
- 确保您已在 Google Cloud 控制台中启用 Pub/Sub API。
- 确保发出请求的主体对相关 Pub/Sub API 资源具有
所需的权限,尤其是如果您
正在使用 Pub/Sub API 进行跨项目通信。
- 如果您使用 Dataflow,请确保 {PROJECT_NUMBER}@cloudservices.gserviceaccount.com 和 Compute
引擎服务帐户
{PROJECT_NUMBER}
[电子邮件受保护] 有 相关 Pub/Sub API 资源的
所需权限。了解更多
信息,请参阅数据流安全和权限。
- 如果您使用的是 App Engine,请检查项目的
权限页面,查看 App Engine 服务帐户是否被列为 Pub/Sub 编辑器。 如果不是,请将您的 App Engine 服务帐户添加为 Pub/Sub 编辑器。通常,App Engine 服务帐户的格式为 @appspot.gserviceaccount.com。
文档以获取更多信息,并浏览此堆栈链接,这可能对您有帮助。