在 google pubsub 中设置 gmail 的发布权限,权限被拒绝

Posted

技术标签:

【中文标题】在 google pubsub 中设置 gmail 的发布权限,权限被拒绝【英文标题】:Set publish rights for gmail in google pubsub gives permission denied 【发布时间】:2016-09-03 07:30:36 【问题描述】:

我正在尝试将 gmail 的发布权限设置为 google cloud 中的 pubsub 主题。 我实现此代码的应用程序正在 AWS 中运行。 这是一个 php 应用程序,我使用的是 2.0.0-RC7 版本的 google PHP api 客户端。

在代码中,我实现了文档中描述的流程:

创建主题(作品) 创建订阅(有效) 授予 gmail 的发布权限(我卡住了)

前两个操作是使用同一个 Google 客户端实例完成的,该实例使用服务帐户凭据进行身份验证。

代码:

$scopes = [
    'https://www.googleapis.com/auth/pubsub',
    'https://mail.google.com',
];
$pushEndpoint = 'https://some.url/google_notifications/';

$client = new Google_Client();
$client->setScopes($scopes);
$client->setAuthConfig($serviceAccountInfo);
if ($client->isAccessTokenExpired()) 
    $client->refreshTokenWithAssertion();

$service = new Google_Service_Pubsub($client);

// This part works
$topicObject = new Google_Service_Pubsub_Topic();
$topicObject->setName($this->getTopicName());
$service->projects_topics->create($this->getTopicName(), $topic);

// This part also works
$push = new Google_Service_Pubsub_PushConfig();
$push->setPushEndpoint($pushEndpoint);

$subscription = new Google_Service_Pubsub_Subscription();
$subscription->setName($this->getSubscriptionName());
$subscription->setTopic($this->getTopicName());
$subscription->setPushConfig($push);
$service->projects_subscriptions->create($this->getSubscriptionName(), $subscription);

// This part gives the error
$binding = new Google_Service_Pubsub_Binding();
$binding->setRole('roles/pubsub.publisher');
$binding->setMembers(['serviceAccount:gmail-api-push@system.gserviceaccount.com']);

$policy = new Google_Service_Pubsub_Policy();
$policy->setBindings([$binding]);

$setRequest = new Google_Service_Pubsub_SetIamPolicyRequest();
$setRequest->setPolicy($policy);

try 
    $result = $service->projects_topics->setIamPolicy($this->getTopicName(), $setRequest);
    var_dump($result);
 catch (\Exception $e) 
    echo $e->getMessage();

结果总是:


  "error": 
    "code": 403,
    "message": "User not authorized to perform this action.",
    "errors": [
      
        "message": "User not authorized to perform this action.",
        "domain": "global",
        "reason": "forbidden"
      
    ],
    "status": "PERMISSION_DENIED"
  

谁能告诉我我做错了什么? 一直手动设置这些权限真的很烦人。

谢谢。

【问题讨论】:

【参考方案1】:

要使用projects.topics.setIamPolicy 方法,您的服务帐户必须具有“Pub/Sub Admin”角色。您可以通过访问您项目的“IAM & admin”页面来更改帐户的角色:https://console.cloud.google.com/iam-admin/iam

【讨论】:

以上是关于在 google pubsub 中设置 gmail 的发布权限,权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

Google PubSub / Gmail Webhook:发送电子邮件时始终从 PubSub 接收多个 POST 请求

对云功能执行 http PUSH 的 Google Pubsub 订阅者(在同一项目或另一个项目中)

使用 Google Cloud PubSub 不断收到“向 Cloud PubSub 发送测试消息时出错...”

基于特定电子邮件 ID 的 Google Pubsub 订阅

无法在 Outlook Android 中设置收件人

在聚合管道中设置条件在 mongodb 中不起作用