Как можно выполнить curl-аутентификацию в Google Cloud на основе аутентификации CLI локального gcloud? - PullRequest
0 голосов
/ 16 января 2020

Мой скрипт использует последовательность команд 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?

1 Ответ

1 голос
/ 16 января 2020

После проверки подлинности Cloud SDK вы можете использовать команду gcloud auth print-access-token , чтобы получить токен доступа для текущей активной учетной записи без указания пути к JSON файл учетных данных.

Вам все равно понадобятся учетные данные. json файл, если вы хотите sh активировать учетную запись службы для экземпляра Cloud SDK. Однако я уверен, что вам придется сделать это только один раз.

РЕДАКТИРОВАТЬ:

Я заметил, что вы используете gcloud auth application-default print-access-token.

Имейте в виду, что, в отличие от команды gcloud auth print-access-token, она использует текущие учетные данные приложения по умолчанию (AD C), которые должны быть установлены путем указания учетных данных. json путь к файлу с переменной env GOOGLE_APPLICATION_CREDENTIALS или с помощью команды gcloud auth application-default login .

...