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 должны соответствовать областям экземпляров;это означает, что будет применяться самое ограничительное разрешение, поэтому вам также следует иметь это в виду.