Мой скрипт использует последовательность команд gcloud
и, конечно, gcloud проходит аутентификацию. Мне нужно использовать curl для доступа к API GCP REST, которые недоступны для gcloud. Я могу сделать это, сгенерировав файл JSON учетных данных в Cloud Console, но я бы предпочел не делать это как отдельный ручной шаг.
[Редактировать: Ответ заключается в замене строки gcloud auth
в этой команде curl на gcloud auth print-access-token
. См. Ответ ниже.]
Вот как я это делаю сейчас, используя файл JSON, загруженный с консоли.
GOOGLE_APPLICATION_CREDENTIALS=credentials.json
curl -X POST -H "Authorization: Bearer \"$(gcloud auth application-default print-access-token)\"" \
-H "Content-Type: application/json; charset=utf-8" \
https://cloudresourcemanager.googleapis.com/v1/projects/<MY_PROJECT>:getAncestry
Без загруженного JSON я получаю следующее:
ERROR: (gcloud.auth.application-default.print-access-token)
The Application Default Credentials are not available. They are available if running in Google Compute Engine.
Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing
to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials
for more information.
{ "error": {
"code": 401,
"message": "Request had invalid authentication credentials.
Expected OAuth 2 access token, login cookie or other valid authentication credential.
See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"status": "UNAUTHENTICATED"
}
}
Как использовать мою аутентификацию gcloud
для использования curl? Я не против использовать JSON, если смогу автоматизировать его генерацию как часть этого скрипта. Например, есть ли способ вызвать gcloud
, чтобы сгенерировать это JSON, который я бы тогда установил как GOOGLE_APPLICATION_CREDENTIALS
?