У учетной записи службы Compute Engine недостаточно областей для API облачного видения - PullRequest
0 голосов
/ 01 июня 2018

Мне нужно использовать Cloud Vision API в моем решении Python, я уже некоторое время полагаюсь на ключ API, но в данный момент я пытаюсь предоставить стандартной учетной записи службы Compute Engine область, необходимую для вызоваVision, пока без особой удачи.

Я включил API видения в моем проекте через облачную консоль , но все равно получаю эту ошибку 403:

Запросбыло недостаточно областей аутентификации.

Я бы установил доступ индивидуально для каждого API на вкладке редактирования правок моего gce, но не смог найти Vision в списке других API.Единственный способ, которым мне удалось правильно получить правильный ответ от Vision API, - это установить флажок «Разрешить полный доступ ко всем облачным API», снова на вкладке подробностей редактирования моего gce, но это не кажется мне слишком безопасным.

Надеюсь, есть лучшие способы сделать это, но я не смог найти ни в документации Vision по аутентификации, ни в вопросе о переполнении стека (у некоторых была близкая тема, но ни один из предложенных ответов не соответствовал моемудела или предоставили рабочее решение).

Заранее благодарим за помощь.

gce's edit detail tab from goole cloud console


РЕДАКТИРОВАТЬ

Я добавляю список всех API, которые я могу по отдельности включить в учетной записи службы моего gce по умолчанию из облачной консоли:

BigQuery;Bigtable Admin;Bigtable Data;Cloud Datastore;Облачный отладчик;Cloud Pub / Sub;Хранилища облачных источников;Облачный SQL;Вычислительный двигатель;Сервисный контроль;Управление сервисом;API ведения журнала в стеке;API мониторинга Stackdriver;Трассировка Stackdriver;Место хранения;Очередь задач;Информация о пользователе

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


EDIT # 2

Я постараюсь изложить свой вопрос (ы) более кратко: Как добавить https://www.googleapis.com/auth/cloud-vision в учетную запись по умолчанию для моего экземпляра gce?

Я ищу способ сделать это с помощью любого из следующих: консоли GCP, командной строки gcloud или даже через Python (в настоящее время я использую googleapiclient.discovery.build, я не знаю, есть лиспособ запросить область видимости api через библиотеку).

Или это нормально, чтобы включить все области до тех пор, пока ограничения ролей через IAM?И если это так, как мне это сделать?

Я действительно не могу разобраться с документацией, еще раз спасибо.

1 Ответ

0 голосов
/ 04 июня 2018

API Google Cloud (Vision, Natural Language, Translation и т. Д.) Не требуют каких-либо специальных разрешений, вам нужно просто включить их в своем проекте (перейдя на вкладку API Library в консоли) и создатьключ API или учетная запись службы для доступа к ним.

Ваше решение перейти с ключей API на учетные записи служб является правильным, поскольку учетные записи служб являются рекомендуемым подходом для проверки подлинности с помощью служб Google Cloud Platform., и в целях безопасности Google рекомендует использовать их вместо ключей API.

При этом я вижу, что вы используете старые клиентские библиотеки Python API , которые делаютиспользование службы googleapiclient.discovery.build , которую вы упомянули.На данный момент более новые идиоматические клиентские библиотеки являются рекомендуемым подходом, и они заменили устаревшие клиентские библиотеки API, которые вы используете, поэтому я настоятельно рекомендую двигаться в этом направлении.Они более просты в использовании, более понятны, лучше документированы и являются рекомендуемым подходом для программного доступа к облачным API. .

Получив это в качестве отправной точки, я разделю этот ответ на две части:

Использование клиентских библиотек

Если вы решили последовать моему совету и перейти на новые клиентские библиотеки, аутентификация будет для вас действительно легкой,учитывая, что клиентские библиотеки используют учетные данные приложения по умолчанию (АЦП) для аутентификации.ADC использует учетную запись службы по умолчанию для Compute Engine, чтобы обеспечить аутентификацию, поэтому вам не нужно об этом беспокоиться, так как она будет работать по умолчанию.

Как только эта часть будет очищена, вы можете двигаться дальшечтобы создать пример кода (например, тот, который доступен в документации ), и, как только вы проверите, что все работает, как ожидалось, вы можете перейти к полному справочнику по клиентской библиотеке Vision API страница , чтобы получить информацию о том, как работает библиотека.

Использование (устаревших) клиентских библиотек API Если, несмотря на мои слова, вы хотите придерживатьсястарые клиентские библиотеки API, возможно, вас заинтересует эта другая страница документации, где есть некоторая полная информация о аутентификации с использованием клиентских библиотек API .Более конкретно, есть целая глава, посвященная объяснению OAuth 2.0 аутентификации с использованием учетных записей служб .

С простым кодом, подобным приведенному ниже, вы можете использовать модуль google.oauth2.service_account чтобы загрузить учетные данные из файла ключей JSON предпочитаемого SA, укажите необходимые области и используйте его при создании клиента Vision, указав credentials=credentials:

from google.oauth2 import service_account
import googleapiclient.discovery

SCOPES = ['https://www.googleapis.com/auth/cloud-vision']
SERVICE_ACCOUNT_FILE = '/path/to/SA_key.json'

credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

vision = googleapiclient.discovery.build('vision', 'v1', credentials=credentials)

РЕДАКТИРОВАТЬ:

Я забыл добавить, что для того, чтобы экземпляры Compute Engine могли работать с API Google, он должен быть предоставлен с https://www.googleapis.com/auth/cloud-platform scope (фактически это то же самое, что и выбор Разрешить полный доступ ко всем облачным API ).Это задокументировано в рекомендациях GCE Service Accounts , но вы правы, что это обеспечит полный доступ ко всем ресурсам и услугам в проекте .

В качестве альтернативы,если вы обеспокоены последствиями разрешения областей доступа «все», на этой другой странице документации поясняется, что вы можете разрешить полный доступ и затем выполнить ограниченный доступ по ролям IAM.

В любом случае, если вы хотите предоставить только область видения экземпляру, вы можете сделать это, выполнив следующую команду gcloud:

gcloud compute instances set-service-account INSTANCE_NAME --zone=INSTANCE_ZONE --scopes=https://www.googleapis.com/auth/cloud-vision

Cloud VisionОбласть действия API (https://www.googleapis.com/auth/cloud-vision) может быть получена, как и для любого другого облачного API, с этой страницы .

Кроме того, как описано в этом разделе о разрешениях SA и областях доступа, разрешения SA должны соответствовать областям экземпляров;это означает, что будет применяться самое ограничительное разрешение, поэтому вам также следует иметь это в виду.

...