Как gcloud удается работать только с svca cc API? - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь понять, как gcloud удается работать с API-интерфейсами, для доступа к которым требуется учетная запись службы, например, доступ к Speech API с использованием учетных данных пользователя (не svca cc) приведет к «403. Ваше приложение аутентифицировано с помощью end учетные данные пользователя из Google Cloud SDK или Google Cloud Shell, которые не поддерживаются Speech.googleapis.com ".

Однако, когда я запускаю gcloud ml speech recognize gs://cloud-samples-tests/speech/brooklyn.flac --language-code=en-US, он работает нормально, хотя я не устанавливал выделенные svca cc ключи, как описано в кратком руководстве [1], и даже отключил все учетные записи служб в проекте на всякий случай.

Итак, снова

  • gcloud ml speech recognize gs://cloud-samples-tests/speech/brooklyn.flac --language-code=en-US - работает
  • curl -s -H "Content-Type: application/json" -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) https://speech.googleapis.com/v1/speech:recognize -d @sync-request.json согласно [2] не работает с ошибкой 403 выше

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

[1] https://cloud.google.com/speech-to-text/docs/quickstart-gcloud

1 Ответ

1 голос
/ 27 мая 2020

Учетные данные Google предоставляются двумя типами учетных записей: учетными записями служб и обычными (человеческими?) Учетными записями (например, @gmail.com, @your.email). Типы токенов, выпущенных для этих учетных записей, различаются, но оба они аутентифицируются для служб.

Когда вы используете gcloud, вы часто используете человеческие учетные записи, которые вы ранее аутентифицировали с помощью gcloud auth login и могут отображаться с gcloud auth list.

В этом случае вы также используете эти gcloud человеческие учетные данные с curl, потому что вы получаете токен доступа с помощью gcloud auth print-access-token. Два ваших примера эффективно аутентифицированы с использованием одной и той же (возможно, человеческой) учетной записи.

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

Обычно для сервисов Cloud Platform учетные данные также должны иметь роли IAM, которые описывают разрешения, которые разрешают их использование, но некоторые сервисы Cloud Platform (IIR C ML) (пока) не реализуют IAM, поэтому авторизация достигается только с использованием областей действия OAuth, и вы можете использовать vanilla учетные записи служб, для которых не назначены c привязки IAM.

ПРИМЕЧАНИЕ можно аутентифицировать gcloud с помощью службы учетные записи тоже gcloud auth activate-service-account, но IIR C этот подход не рекомендуется.

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