Получить токен авторизации учетной записи службы без gcloud?
Возможно ли получить токен-носитель авторизации для учетной записи службы Google Cloud без использования gcloud
?
То есть, я хотел бы сделать HTTP-запрос (предположительно подписанный каким-то образом моим ключевым файлом JSON), который предоставил бы мне эквивалент
gcloud auth application-default print-access-token
Этот запрос будет сделан на моем собственном сервере, где я, возможно, не gcloud
установить gcloud
и где у меня нет доступа к каким-либо внутренним метаданным сервера, которые могут это предоставить (например, как в случае с Compute Engine).
Есть ли какая-то конечная точка oauth, которая обеспечивает что-то вроде этого?
Альтернативно, есть ли способ генерировать долгоживущие токены с gcloud
?
Я новичок в экосистеме Google Cloud, поэтому извините мое невежество и терминологию...
Ответы
Ответ 1
Я думаю, что это именно то, что вы ищете:
https://developers.google.com/identity/protocols/OAuth2#serviceaccount
Честно говоря, я не думаю, что то, что вы пытались достичь, было правильно, работает
gcloud auth application-default print-access-token
вы получаете токен, который не предназначен для выполнения того, что вы искали:
"Эта команда полезна при разработке кода, который обычно использует учетную запись службы, но должен запускать код в локальной среде разработки, где проще предоставить учетные данные пользователя".
Это должно помочь вам в реализации этого решения:https://developers.google.com/identity/protocols/OAuth2ServiceAccount
Ответ 2
Для вашего второго вопроса: "Есть ли способ генерировать долгоживущие токены с gcloud?", Нет, нет. Тем не менее, вы можете использовать токен обновления для генерации новых токенов доступа. Проверьте первый ответ на этот вопрос:
OAuth2 и API Google: срок действия токена доступа?
Кроме того, heres представляет собой пример библиотеки python, которую вы можете использовать в качестве механизма аутентификации:
https://github.com/GoogleCloudPlatform/google-auth-library-python/blob/master/google/oauth2/credentials.py
Ответ 3
Вот как это выглядит на Голанге:
import(
"google.golang.org/api/compute/v1"
"google.golang.org/api/container/v1"
"google.golang.org/api/iterator"
"google.golang.org/api/option"
"google.golang.org/api/transport"
)
ctx := context.Background()
creds, err := transport.Creds(ctx, option.WithScopes(compute.CloudPlatformScope))
token, err := creds.TokenSource.Token()
Ответ 4
Нет необходимости в библиотеке или API. Вы можете получить его, используя
curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google" | jq -r .access_token
Это полезно, если вам это нужно в сценарии оболочки.