ОШИБКА: (gcloud.auth.activate-service-account) Файл ключа .json имеет недопустимый формат — через impersonate-service-account

Можно ли использовать недолговечные учетные данные с помощью docker-compose для запуска команды gcloud со сценарием bash?

Связанные посты, которые я пытался использовать, но им уже более 5 лет, и меня заставили поверить, что за это время команда gcloud auth изменилась:

Настраивать

  • происходит многое, но я попытался сократить соответствующие части

Makefile

auth: ## commands for short lived auth
    @gcloud config set project ${GCP_PROJECT}
    @gcloud auth application-default login --impersonate-service-account = "inst-dataflow-svc@${GCP_PROJECT}.iam.gserviceaccount.com"
    @gcloud auth configure-docker $(REGION)-docker.pkg.dev

gcloud-flex-build: ## build & push base docker image
    docker-compose build gcloud-build-flex-local
    docker-compose run gcloud-build-flex-local

docker-compose.yaml

version: '3.4'
services:
  gcloud-build-flex-local:
    build:
      dockerfile: docker/gcloud-build-flex-template.dockerfile
      context: .
    image: us-central1-docker.pkg.dev/gcp-project/dataflow-docker-registry/local-build/pubsub-to-gbq-build-flex-template
    volumes:
      - type: bind
        source: ${HOME}/.config/gcloud/
        target: /tmp

docker/gcloud-build-flex-template.dockerfile

FROM gcr.io/google.com/cloudsdktool/cloud-sdk:408.0.1

COPY docker/scripts/gcloud-build-flex-template.sh /app/gcloud-build-flex-template.sh
COPY dataflow/pubsub-to-gbq/pubsub-to-gbq-metadata /app/pubsub-to-gbq-metadata

WORKDIR /app

ENTRYPOINT "/app/gcloud-build-flex-template.sh"

/app/gcloud-build-flex-template.sh

#!/bin/bash

set -euo pipefail

SERVICE_ACCOUNT_EMAIL=inst-dataflow-svc@gcp-project.iam.gserviceaccount.com
GCP_PROJECT=gcp-project

export GOOGLE_APPLICATION_CREDENTIALS=/tmp/application_default_credentials.json

# debugging
echo $GOOGLE_APPLICATION_CREDENTIALS
ls -lah /tmp/
cat $GOOGLE_APPLICATION_CREDENTIALS

gcloud auth activate-service-account $SERVICE_ACCOUNT_EMAIL --project=$GCP_PROJECT --key-file=$GOOGLE_APPLICATION_CREDENTIALS

Исполнение

make auth
make gcloud-flex-build

Ошибка

ОШИБКА: (gcloud.auth.activate-service-account) Файл ключа .json имеет недопустимый формат.

make: *** [gcloud-flex-build] Ошибка 1

стандартный вывод (сокращенно)

docker-compose build gcloud-build-flex-local
[+] Building 0.4s (9/9) FINISHED
...
docker-compose run gcloud-build-flex-local

drwxr-xr-x 17 root root  544 Dec 30 10:36 .
drwxr-xr-x  1 root root 4.0K Dec 30 10:40 ..
-rw-------  1 root root  591 Dec 30 10:36 application_default_credentials.json

{
  "delegates": [],
  "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/[email protected]:generateAccessToken",
  "source_credentials": {
    "client_id": "alphanumeric string .apps.googleusercontent.com",
    "client_secret": "alphanumeric string",
    "refresh_token": "alphanumeric string",
    "type": "authorized_user"
  },
  "type": "impersonated_service_account"
}

Я могу заставить его работать через docker run, подменив учетные данные, чтобы включить только объект «source_credentials», переданный как том, но этот же трюк, похоже, не работает с docker-compose, запускающим скрипт внутри контейнера...

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Подобный тип конфигурации упоминается в этом документе. Это включает в себя три основных шага:

  • Создайте краткосрочные учетные данные для своего сервисного аккаунта и загрузите ключи вашей сервисной учетной записи.
  • Создайте файлы конфигурации для настройки среды докеров. Использовать вышеуказанные файлы cred для предоставления необходимых разрешений.
  • Когда у вас есть все файлы конфигурации, используйте свой docker-compose команды для создания вашей среды.

Следуйте этой документации для более подробной информации.

спасибо за ответ - я просмотрю учебник и приму ответ, если этот метод работает для меня.

will-wright-eng 04.01.2023 21:02

Другие вопросы по теме