繁体   English   中英

错误:(gcloud.auth.activate-service-account).json 密钥文件格式无效——通过模拟服务帐户

[英]ERROR: (gcloud.auth.activate-service-account) The .json key file is not in a valid format -- via impersonate-service-account

是否可以使用short-lived credentials和 docker-compose 来运行 bash 脚本 gcloud 命令?

我尝试使用的相关帖子已有 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) The.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/inst-dataflow-svc@gcp-project.iam.gserviceaccount.com: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”object,但同样的技巧似乎不适用于在容器内运行脚本的 docker-compose ...

文档中提到了一种类似的配置类型。 这包括三个主要步骤:

  • 为您的服务帐户创建短期凭据并下载您的服务帐户密钥。
  • 创建用于构建 docker 环境的配置文件。 使用上面的 cred 文件来授予所需的权限。
  • 准备好所有配置文件后,使用 docker-compose 命令构建您的环境。

请按照此文档了解更多详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM