Установить права на публикацию для Gmail в Google Pubsub дает разрешение запрещено

Я пытаюсь установить права на публикацию gmail для темы pubsub в облаке Google.
Приложение, в котором я реализовал этот код, работает в AWS.
Это приложение PHP, и я использую версию 2.0.0-RC7 API-интерфейса Google PHP.

В коде я реализовал поток, как описано в документации:

  • Создать тему (Работы)
  • Создать подписку (работает)
  • Предоставить права на публикацию в 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:[email protected]']);

$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"}
}

Может кто-нибудь сказать мне, что я делаю не так?
Это действительно раздражает, чтобы установить эти разрешения вручную все время.

Благодарю.

3

Решение

Использовать projects.topics.setIamPolicy метод вашей учетной записи службы должен иметь роль «Pub / Sub Admin». Вы можете изменить роль учетной записи, посетив «IAM & Страница администратора для вашего проекта: https://console.cloud.google.com/iam-admin/iam

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]