如何从要在Cloud Run上运行的Docker映像中执行GCP身份验证?

njthzxwz  于 2023-03-17  发布在  Docker
关注(0)|答案(2)|浏览(219)

在运行一些脚本的Docker映像中,在脚本的末尾,我使用bq命令将数据附加到BigQuery表中。当我不在Docker中运行时,这一切都可以在脱机状态下正常工作,因为我的本地开发环境已经设置了正确的身份验证。
问题是如何设置身份验证,以便在执行docker run -t my-image时可以从docker中运行bq
另外,在我将它上传到gcr.io注册表并在cloud run中作为作业运行之后,我如何进行身份验证?
查找身份验证文档(例如https://cloud.google.com/docs/authentication/provide-credentials-adc)就像一个迷宫,而且在Google上搜索也不会找到非常有用的结果

tpgth1q7

tpgth1q71#

从最近的项目a make...(如果您更熟悉,所有命令在GCP控制台UI中都有等效命令)

假设:

1.了解IAM,
1.所述停靠器容器运行模拟专用IAM服务帐户(SA)的服务。

创建服务帐户(SA)并将Docker映像部署为运行服务--------------

# RUN_SERVICE_NAME the name of your Run service as you deploy it in GCP
# SERVICE_ACCOUNT the name of the dedicated service account the service uses
# SERVICE_ACCOUNT_FRIENDLY_NAME an easy name for you to read
# SERVICE_ACCOUNT_EMAIL the email GCP gives you back when you create the SA

gcloud iam service-accounts create $SERVICE_ACCOUNT --display-name "$SERVICE_ACCOUNT_FRIENDLY_NAME"

gcloud run deploy $RUN_SERVICE_NAME \
    --service-account $SERVICE_ACCOUNT_EMAIL
    ....
    ....

SA必须具有访问或编辑BQ数据集和表格的角色(参考:https://cloud.google.com/bigquery/docs/控制对资源的访问-iam#授予对表或视图的访问权限)
您可以将BQ配置下载到您的开发机器的json文件中...

对于数据集----------------------------------

# BigQuery get the dataset full info
bq show \
   --format=prettyjson \
   $PROJECT:$DATASET_NAME > $DATASET_NAME.json

然后更新文件以包括BQ角色..(<SERVICE_ACCOUNT_EMAIL>替换为您的SA电子邮件<BQ_ROLE_1>和<BQ_ROLE_2>您的角色)。:

{
  "access": [
    ....
    ....

    {
      "role": "<BQ_ROLE_1>",
      "userByEmail": "<SERVICE_ACCOUNT_EMAIL>"
    }
  ],

  ....
  ....
}

最后更新策略:

# BigQuery update dataset permissions
bq update --source $DATASET_NAME.json $PROJECT:$DATASET_NAME

对于表格-----------------------------

# BigQuery get the policy of a table
bq get-iam-policy \
   $PROJECT:$DATASET_NAME.$DATASET_TABLE_NAME \
   > $DATASET_NAME.$DATASET_TABLE_NAME.json

然后更新文件以包括BQ角色,例如:

{
  "bindings": [
    {
      "members": [
        "<SERVICE_ACCOUNT_EMAIL>"
      ],
      "role": "<BQ_ROLE_2>"
    }
  ],
  ....
  ....
}

最后更新策略:

bq set-iam-policy $PROJECT:$DATASET_NAME.$DATASET_TABLE_NAME $DATASET_NAME.$DATASET_TABLE_NAME.json

在您的服务代码中(使用NodeJS创建的示例):

const { BigQuery } = require('@google-cloud/bigquery');
const bigqueryClient = new BigQuery();
5rgfhyps

5rgfhyps2#

在GCP CloudRun上,这非常简单,在作业的设置页面中,您可以选择一个服务帐户来运行映像。只要该服务拥有bigquery的访问权限,它就应该工作。
离线 Docker 。还不确定。

相关问题