Проблемы аутентификации в Google Cloud AutoML

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

Я ввел правильный project_id и model_id, но дело в том, что я не могу запустить программу, не получив этой ошибки:

(venv) C:\Users\willi\Documents\machinelearningtest>py retrieveresult.py
Traceback (most recent call last):
  File "C:\Users\willi\Documents\machinelearningtest\venv\lib\site-packages\google\api_core\grpc_helpers.py", line 57, in error_remapped_callable
    return callable_(*args, **kwargs)
  File "C:\Users\willi\Documents\machinelearningtest\venv\lib\site-packages\grpc\_channel.py", line 824, in __call__
    return _end_unary_response_blocking(state, call, False, None)
  File "C:\Users\willi\Documents\machinelearningtest\venv\lib\site-packages\grpc\_channel.py", line 726, in _end_unary_response_blocking
    raise _InactiveRpcError(state)
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
        status = StatusCode.PERMISSION_DENIED
        details = "The caller does not have permission"
        debug_error_string = "{"created":"@1578714342.247000000","description":"Error received from peer ipv4:172.217.14.74:443","file":"src/core/lib/surface/call.cc","file_line":1056,"grpc_message":"The caller does not have permission","grpc_status":7}"
>

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "retrieveresult.py", line 20, in <module>
    response = prediction_client.predict(model_full_id, payload)
  File "C:\Users\willi\Documents\machinelearningtest\venv\lib\site-packages\google\cloud\automl_v1\gapic\prediction_service_client.py", line 322, in predict
    return self._inner_api_calls["predict"](
  File "C:\Users\willi\Documents\machinelearningtest\venv\lib\site-packages\google\api_core\gapic_v1\method.py", line 143, in __call__
    return wrapped_func(*args, **kwargs)
  File "C:\Users\willi\Documents\machinelearningtest\venv\lib\site-packages\google\api_core\retry.py", line 281, in retry_wrapped_func
    return retry_target(
  File "C:\Users\willi\Documents\machinelearningtest\venv\lib\site-packages\google\api_core\retry.py", line 184, in retry_target
    return target()
  File "C:\Users\willi\Documents\machinelearningtest\venv\lib\site-packages\google\api_core\timeout.py", line 214, in func_with_timeout
    return func(*args, **kwargs)
  File "C:\Users\willi\Documents\machinelearningtest\venv\lib\site-packages\google\api_core\grpc_helpers.py", line 59, in error_remapped_callable
    six.raise_from(exceptions.from_grpc_error(exc), exc)
  File "<string>", line 3, in raise_from
google.api_core.exceptions.PermissionDenied: 403 The caller does not have permission

Я не могу понять, как использовать учетные записи служб в моем коде, чтобы получить разрешение ... можно ли получить некоторые указатели? Я впервые использую что-то подобное.


comment
Как вы настраиваете учетную запись службы для своего приложения? Какие роли назначены учетной записи службы? Отредактируйте свой вопрос, указав более подробную информацию. Вы не указываете учетную запись службы в своем коде, поэтому это означает, что вы используете ADC (учетные данные приложения по умолчанию), а библиотеки находят учетные данные за вас. Выполните поиск в Google Cloud ADC и следуйте документации по настройке.   -  person John Hanley    schedule 11.01.2020


Ответы (1)


Из официальной документации GCP:

  1. Убедитесь, что AutoML API включен для вашего проекта - ссылка

  2. Создайте учетную запись службы, которую вы будете использовать для аутентификация - сервисные учетные записи - единственный вариант аутентификации, доступный в AutoML API.

  3. Создайте и загрузите файл ключа для этой учетной записи службы.

  4. Задайте в переменной среды GOOGLE_APPLICATION_CREDENTIALS путь к файлу ключа учетной записи службы, который вы загрузили при создании учетной записи службы:

    • export GOOGLE_APPLICATION_CREDENTIALS=key-file
  5. Задайте в переменной среды PROJECT_ID свой идентификатор проекта. Вызовы AutoML API и имена ресурсов включают в себя ваш идентификатор проекта. Переменная среды PROJECT_ID предоставляет удобный способ указать идентификатор:

    • export PROJECT_ID=your-project-id
  6. Если вы являетесь владельцем своего проекта, добавьте свою учетную запись службы в роль IAM AutoML Editor, заменив "service-account-name" на имя новой учетной записи службы. . Например, [email protected]:


gcloud auth login
gcloud projects add-iam-policy-binding $PROJECT_ID \
   --member="serviceAccount:service-account-name" \
   --role="roles/automl.editor"

  1. Если вы не являетесь владельцем проекта, попросите владельца проекта добавить свой идентификатор пользователя и учетную запись службы в роль IAM редактора AutoML.
person Deniss Tsokarev    schedule 11.01.2020