在我们的谷歌云 Pub/Sub 发布者权限之外提供 Gmail-API
Posted
技术标签:
【中文标题】在我们的谷歌云 Pub/Sub 发布者权限之外提供 Gmail-API【英文标题】:Give a Gmail-API outside our google cloud Pub/Sub publisher privileges 【发布时间】:2020-06-17 09:17:37 【问题描述】:让我试着向你解释一下我们要做什么。
简单地说:我们希望将 Pub/Sub Publisher(在我们的 GoogleCloud 中)权限授予我们 GoogleCloud 之外的 GMail-API。
我们拥有的: 在此处遵循说明:https://developers.google.com/gmail/api/quickstart/ruby 我们已经为 GMail-API 和 GoogleCloud 中的凭据创建了一个项目,我们称之为 Cloud-A。 (我们不会在生产环境中拥有这一端;这个项目和云将由我们客户的 IT 部门管理。)
接下来,我们按照另一个指南https://developers.google.com/gmail/api/guides/push 我们在我们的 GoogleCloud (Cloud-B) 中创建了一个 Pub/Sub 主题,我们拥有这部分,它是我们想要订阅的主题,以便收听消息/通知。 (此主题与将发布 Cloud-A 消息的 GMail-API 位于不同的帐户中)。 因此,按照最后一个指南,它说我们需要授予 gmail-api-push@system.gserviceaccount.com 权限,据我了解,这意味着我正在从 Cloud-B 授予 GMail-API 权限到在 Pub/Sub Cloud-B 中发布消息。
我找不到从 Cloud-A 授予 Gmail-API 权限以在 Pub/Sub Cloud-B 中发布消息的方法。
最后,我想在 Cloud-B 中收听 Pub/Sub,它将接收来自 Cloud-A 中 Gmail-API 的通知。
我们使用了这个https://github.com/googleapis/google-api-ruby-client/blob/master/generated/google/apis/gmail_v1/service.rb#L144,但我收到一条错误消息,指出该主题不存在(可能是因为它在 Cloud-B 中,而我正在配置 Cloud-A Gmail-Api)
我希望我已经足够清楚了,我们不希望在同一个 Google Cloud 中为另一个项目提供对 Pub/Sub 的访问权限,它甚至不是我们编写的服务,因为它是 Gmail-Api 并且是唯一的东西我们可以做的就是向它发送我们希望它发布的主题名称。
【问题讨论】:
【参考方案1】:我不熟悉 GMail-API 如何发布到 Pub/Sub,但是,如果您已经知道如何从项目 Cloud-A 中的 GMail-API 发布到 Cloud-A 中的 Pub/Sub 主题,您可以尝试以下解决方法:
备选方案 A:
-
在项目 Cloud-A 中创建主题(topic-A)。
也在项目 Cloud-A 中创建与主题 A 关联的拉取订阅(subs-A)。
在项目 Cloud-B 中创建一个服务帐户(帐户-B),并为其授予订阅 sub-A 的 Pub/Sub 订阅者角色。
让您的消费者(例如 AppEngine、GKE、GCE)使用服务帐号 account-B 从 subs-A 中提取消息。
备选方案 B:
-
在项目 Cloud-A 中创建主题(topic-A)。
创建与主题 A 关联的推送订阅(subs-A),指向托管在项目 Cloud-B 中的服务的端点(例如 GCE、GKE、AppEngine、Cloud Function 等)
替代 C:
-
在项目 Cloud-A 中创建主题(topic-A)。
在项目 Cloud-B 中创建与项目 Cloud-A 中的主题 A 关联的拉取或推送订阅 (subs-B)。创建此订阅的用户应具有为主题 A 授予的 Pub/Sub Editor 角色。
使用来自 subs-B 的消息。
【讨论】:
我喜欢你给我的选择不止一种。可悲的是,我正在寻找更直接的东西,不需要为我们的客户进行额外设置。如果有人说我绝对不能像我说的那样,那没关系......我只需要一个答案。 @leizzer,没问题,我自己想要最直接的解决方案。另一方面,步骤是相同的,只是资源放置位置的问题:即使可以从项目 Cloud-A 中启用的 GMail-API 发布到项目 Cloud-B 中的主题,您仍然需要: 1. 配置订阅以检索消息。 2. 配置服务帐户以访问订阅(仅适用于拉取订阅)和 3. 使用服务帐户从订阅中拉取消息或具有将消息推送到的端点的消费者进程。以上是关于在我们的谷歌云 Pub/Sub 发布者权限之外提供 Gmail-API的主要内容,如果未能解决你的问题,请参考以下文章
如何保护由 GCS 触发的 App Engine Pub/Sub Push Endpoint?