如何从 Docker 容器内部获取对大查询的读写访问权限?

问题描述 投票:0回答:1
背景

我正在运行一个 cron 作业

  • 从大查询中提取一些数据(使用 SQL Alchemy ORM 接口)
  • 进行一些特征工程和机器学习推理
  • 将结果插入另一个大查询模式(再次使用 SQL alchemy)

简单的图表描述了正在发生的事情。

现在,我已经通过登录 google 对我的实例(Ubuntu 22.04)进行了身份验证,以访问 BQ,这是基于浏览器的身份验证。基本上,我得到了一个文件

~/.config/gcloud/application_default_credentials.json
看起来像

{
  "account": "",
  "client_id": "70-6ur.apps.googleusercontent.com",
  "client_secret": "d-FLy",
  "quota_project_id": "clustering-production",
  "refresh_token": "1//0wF-LY",
  "type": "authorized_user",
  "universe_domain": "googleapis.com"
}
问题

如何使用 docker 将作业容器化,以便我可以在任何主机上运行它,而无需手动设置 python 依赖项?基本上,我了解docker,但不知道如何使容器能够访问大查询。我是否应该将我原来的

~/.config/gcloud/application_default_credentials.json
放在容器内相应的目录中,以便它可以授权BQ访问?

google-cloud-platform google-bigquery sqlalchemy
1个回答
0
投票

要在 Google Cloud 上进行身份验证,您必须拥有 Google Cloud 身份。

此身份是在 Google Cloud 上原生提供的,这要归功于在所有 Google Cloud 服务上运行的元数据服务器。 Google Cloud 客户端库会自动发现您在 Google Cloud 上运行并使用元数据服务器作为身份

如果您不在 Azure 或 AWS 上,则可以很容易地使用类似的机制与 工作负载身份联合(也可以在其他环境上工作,但需要验证) 您必须创建一个包含此文件路径的环境变量 GOOGLE_APPLICATION_CREDENTIALS。您可以在运行时传递环境变量并将路径安装到容器上。 您可以从我的一篇文章

获取灵感

最后,您可以使用服务帐户密钥文件来传输此身份。您不得将此文件包含在容器中。该容器不是一个安全的盒子,任何人都可以访问其中的数据。 最好将该文件放在运行时环境中,并执行与工作负载身份联合相同的操作

在 Google Cloud 的所有客户端库中实现的这种机制(搜索元数据服务器、搜索特定环境变量...)被命名为 ADC(应用程序默认凭证)


话虽这么说,您是否考虑过使用 BigQUery 远程功能

© www.soinside.com 2019 - 2024. All rights reserved.