Как получить Google App Engine, используя правильные учетные данные для Vision API? - PullRequest
1 голос
/ 22 марта 2020

Контекст:

У меня есть приложение Python Flask, работающее локально, которое использует API Google Vision для обнаружения ярлыков на фотографиях.

Чтобы использовать API Google Vision, я использую переменную окружения GOOGLE_APPLICATION_CREDENTIALS. У меня есть ключ "google-secret.json", хранящийся локально, который я использую для установки переменной GOOGLE_APPLICATION_CREDENTIALS со следующими двумя строками:

import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "google-secret.json"

Вышеприведенное позволяет мне успешно запустить эту строку локально:

image_label_client = vision.ImageAnnotatorClient()

Я использую Google Cloud Build для автоматического развертывания этого приложения в стандартной среде Google App Engine. У меня *google-secret.json включен в мой .gitignore файл, поэтому мой ключ не становится publi c, и у меня есть источник Google Cloud Build из моего удаленного репозитория GitHub.

Я новичок в создании автоматов c сборка / развертывание конвейеров, и я пытаюсь понять, как заставить мое приложение Google App Engine автоматически устанавливать переменную окружения GOOGLE_APPLICATION_CREDENTIALS при сборке или получить доступ к соответствующим учетным данным другим способом, чтобы успешно создать vision.ImageAnnotatorClient() ,

Я открыт для любого метода, который работает. Я искал в интернете несколько дней, но не смог решить эту проблему.

Путь решения, которым я сейчас занимаюсь: Google Secret Manager API.

I ' я могу использовать API Google Secret Manager локально для доступа к секретной версии с ключом json, необходимым для моего приложения, чтобы использовать API Google Vision. Но я сталкиваюсь с двумя проблемами:

  1. Мне нужно использовать секретный файл. json в качестве ключа, чтобы получить разрешение на доступ к секрету через Google Secret Manager API, так что это заново отображает ту же проблему, которую я изначально пытался решить: выяснить, как автоматически настроить и получить доступ к секретному ключу json в приложении Google Cloud Build / Google App Engine.
  2. Когда я получаю секрет через API Google Secret Manager, я не знаю, как превратить его в учетные данные для vision.ImageAnnotatorClient().

Для задачи № 2: Обычно я бы не использовал явный аргумент учетных данных для vision.ImageAnnotatorClient(). Вместо этого он получит учетные данные из этой более ранней строки:

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "google_secret.json"

Если я попытаюсь превратить полезную нагрузку Google Secret API в файл. json, я сделаю это так:

payload = response.payload.data.decode('UTF-8')
payload_json = json.dumps(payload)
google_api_secret = payload_json

затем запишите его в файл:

with open("google_secret.json", "w") as write_file:
        json.dump(google_api_secret, write_file)

Но я получаю следующую ошибку при запуске

image_label_client = vision.ImageAnnotatorClient()
AttributeError: 'str' object has no attribute 'get'

Любая помощь, которую вы можете предоставить будет высоко ценится!

Ответы [ 2 ]

1 голос
/ 22 марта 2020

App Engine будет использовать стратегию учетных данных приложения по умолчанию (AD C) , которая ищет учетные данные в следующем порядке:

  1. GOOGLE_APPLICATION_CREDENTIALS переменная среды
  2. Учетная запись службы по умолчанию, предоставляемая App Engine
  3. В противном случае выдается ошибка

Документы GCP App Engine предоставляют пример использования API Cloud Storage в стандартной среде здесь : https://cloud.google.com/docs/authentication/production#obtaining_credentials_on_app_engine_standard_environment

0 голосов
/ 23 марта 2020

Мне нужно использовать секретный файл. json в качестве ключа, чтобы получить разрешение на доступ к секрету через API-интерфейс Google Secret Manager, поэтому это повторяет ту же проблему, которую я первоначально пытался решить: выяснить как автоматически настроить и получить доступ к секретному ключу json в приложении Google Cloud Build / Google App Engine.

Вы можете использовать учетную запись службы App Engine по умолчанию (YOUR_PROJECT_ID@appspot.gserviceaccount.com) для доступа к Vision. API. Учетная запись службы по умолчанию имеет роль Editor, которая включает в себя все необходимые разрешения, вам не нужно обращаться к другой учетной записи службы из Google Secret Manager.

import googleapiclient.discovery

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

vision_client.files().annotate(body={}).execute()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...