我正在运行一个 cron 作业
简单的图表描述了正在发生的事情。
现在,我已经通过登录 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 上进行身份验证,您必须拥有 Google Cloud 身份。
此身份是在 Google Cloud 上原生提供的,这要归功于在所有 Google Cloud 服务上运行的元数据服务器。 Google Cloud 客户端库会自动发现您在 Google Cloud 上运行并使用元数据服务器作为身份
如果您不在 Azure 或 AWS 上,则可以很容易地使用类似的机制与 工作负载身份联合(也可以在其他环境上工作,但需要验证) 您必须创建一个包含此文件路径的环境变量 GOOGLE_APPLICATION_CREDENTIALS。您可以在运行时传递环境变量并将路径安装到容器上。 您可以从我的一篇文章
获取灵感最后,您可以使用服务帐户密钥文件来传输此身份。您不得将此文件包含在容器中。该容器不是一个安全的盒子,任何人都可以访问其中的数据。 最好将该文件放在运行时环境中,并执行与工作负载身份联合相同的操作
在 Google Cloud 的所有客户端库中实现的这种机制(搜索元数据服务器、搜索特定环境变量...)被命名为 ADC(应用程序默认凭证)
话虽这么说,您是否考虑过使用 BigQUery 远程功能