Google Cloud Pub/Sub Pull PERMISSION_DENIED

У меня есть Google Cloud SDK на моей локальной машине, и когда я запускаю команду:

gcloud beta pubsub subscriptions pull --auto-ack MY_SUBSCRIPTION_NAME

Он работает просто отлично, и я могу видеть сообщения.

Но если я сделаю то же самое на созданной мной виртуальной машине GCE, я получу следующую ошибку:

ERROR: (gcloud.beta.pubsub.subscriptions.pull) PERMISSION_DENIED: User not authorized to perform this action.

Я уже пробовал несколько вещей, например:

  • Остановите экземпляр и добавьте учетную запись службы;

  • Сделайте мой экземпляр «Разрешить полный доступ ко всем облачным API»;

  • Do sudo yum update google-cloud-sdk

Я не знаю, что еще попробовать, чтобы заставить его работать. Любые идеи? Пожалуйста, дайте мне свет здесь.


person Marcus Vinicius Melo    schedule 26.01.2018    source источник


Ответы (1)


Вам следует перейти на страницу подписки на облачную консоль и убедиться, что в вашем сервисном аккаунте есть /Sub Subscriber" для подписки. Когда вы находитесь на странице подписки, вы можете установить флажок рядом с подпиской, после чего в правой части экрана появится следующее:

Раздел разрешений

Убедитесь, что ваша учетная запись службы находится в разделе, обведенном кружком, и если это не так, добавьте ее. Для этого введите учетную запись службы в разделе «Добавить участников» и в раскрывающемся списке «Выберите роль» выберите «Подписчик Pub/Sub», а затем нажмите кнопку «Добавить». Обратите внимание, что для добавления служебной учетной записи вам необходимо войти в облачную консоль с учетной записью, у которой есть владелец или администратор Pub/Sub в соответствии с Правила управления доступом к Pub/Sub.

Это не то же самое, что выбрать «Разрешить полный доступ ко всем облачным API». Эта функция указывает, к каким API может получить доступ экземпляр GCE; это не влияет на аутентификацию учетной записи службы для доступа к желаемому ресурсу (например, подписке) через эти API.

Вполне вероятно, что это сработало с помощью инструмента командной строки gcloud, поскольку вы прошли аутентификацию с помощью учетной записи Google, которая использовалась для создания подписки.

person Kamal Aboul-Hosn    schedule 26.01.2018
comment
Не могли бы вы проверить ссылку, которую вы положили на ответ? Это приводит меня на очень странную страницу. Не похоже на материал Google. - person Marcus Vinicius Melo; 26.01.2018
comment
Извините, это была внутренняя версия ссылки. Я исправил это. - person Kamal Aboul-Hosn; 26.01.2018
comment
Моего аккаунта нет в обведенном разделе. Но я не могу его добавить, пишет, что у меня нет прав. Единственное разрешение, которое у меня есть, это «Редактор». Но это не объясняет, почему я могу получить к нему доступ с моей локальной машины, но не с экземпляра виртуальной машины GCE, который я создал. - person Marcus Vinicius Melo; 26.01.2018
comment
Причина, по которой вы можете получить к нему доступ со своего локального компьютера, но не с виртуальной машины GCE, вероятно, заключается в том, что вы аутентифицированы с помощью разных учетных записей на каждом из них. На вашем локальном компьютере вы, вероятно, аутентифицированы с помощью своей личной учетной записи. На виртуальной машине GCE вы, вероятно, аутентифицированы через учетную запись службы. Причина, по которой вы не можете добавить учетную запись службы, заключается в том, что учетная запись, которую вы используете для входа в облачную консоль, должна иметь роль владельца или администратора публикации/подписки для обновления разрешений на подписку. Я добавил некоторые подробности в свой ответ, чтобы упомянуть этот факт. - person Kamal Aboul-Hosn; 26.01.2018
comment
Чувак, это было очень полезно. Больше всего меня беспокоило то, как это можно было получить с моей локальной машины, но не с виртуальной машины GCE. После ваших комментариев и ответов я проверил, и вы были правы, я использовал две разные учетные записи на разных машинах. Я не знал, что у меня две учетные записи, хотя вся авторизация, которую я создавал, была под одной и той же корневой учетной записью, но это не так. Затем я использовал команду gcloud auth login на своей виртуальной машине и вошел в систему под своей учетной записью. Теперь он работает нормально! Еще раз спасибо за поддержку - person Marcus Vinicius Melo; 26.01.2018
comment
В основном создания служебной учетной записи с соответствующими разрешениями недостаточно. Мы также должны добавить ту же учетную запись службы в разрешения Pub/Sub. - person KunalMZ; 02.07.2020