google-cloud-platform - 创建 bigquery 身份验证。在使用 python 存在源数据集的不同云项目中的视图
问题描述
我们可以在谷歌云项目 A 中创建一个授权的 bigquery 视图,它的源数据存在于与 python API 不同的云项目 B 中。
我可以从 BQ UI 手动创建上述过程,但我想自动化创建大约 800 个身份验证的过程。来自 python 进程的视图。
我面临的问题是在给定时间,我只能调用一个 bigquery 服务凭据,所以每当我触发我的进程/代码时,我都会获取源数据集或视图数据集凭据丢失
from google.cloud import bigquery
import os
from config_files import config
from config_files import db2_table_config
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = config.bq_service_account #service credentials of project B
client = bigquery.Client()
project = 'project_A'
source_dataset_id = 'dataset_b' # which is in different project
source_table_id = 'table' # which is in different project
shared_dataset_ref = client.dataset('dataset_a') #target dataset for project B
view_ref = shared_dataset_ref.table("my_shared_view") #need to be created in project B
view = bigquery.Table(view_ref)
view.view_query = "select query"
view = client.create_table(view) # API request
print("Successfully created view at {}".format(view.full_table_id))
解决方案
如果您的用例是与具有不同需求的不同组“共享视图”。我建议您查看这篇文章。在 BigQuery 中共享“视图”的微妙艺术,准确地解释了实现目标所需的条件。尽管本演练专门针对通过控制台 UI 进行设置。我认为这是一篇非常好的文章,可以帮助理解为具有不同需求的用户在不同项目中共享视图所需的权限。
“我们使用项目级 IAM 角色或数据集级访问控制共享对 BigQuery 表和视图的访问权限。目前,访问控制并不直接适用于表或视图。”</p>
为了与最小权限原则保持一致,您应该使用数据集级别的访问控制,而不是项目级别的访问控制。本质上,这是设置适当权限的问题。尤其是对数据集和视图的访问控制
根据官方文档,您不能直接共享对表或视图的访问。特别是您控制对数据集的访问,以及对视图的访问
使用自定义角色可能最好地满足您的特定情况。这些使您能够强制执行最小权限原则,确保用户/服务帐户仅具有执行其任务所需的最低权限。了解 IAM 自定义角色,了解 IAM 自定义角色
至于使用 Python Client 库的实现。我建议查看列出的文档,所有这些文档都包含 Python 中的代码片段,展示了每个步骤是如何在代码中实现的。
延伸阅读:
推荐阅读
- python - 在python中读取偶数编号的文件
- parsing - 无法使用 Java 7 对 jar 进行签名
- sql - 在两个表上结合 INNER 和 OUTER JOIN
- concurrency - 如何遍历同时变化的图?
- php - Whatsapp 聊天链接没有在 php 网站中显示手机号码
- c# - 无法关闭在单独线程上打开的表单
- node.js - 当我指示它使用 dev 时,为什么我的 express 服务器使用 prod 配置
- node.js - Flutter:如何打印服务器错误“连接被服务器拒绝。” 使用基于 dio 和 NodeJs 的后端
- api - JIRA REST API 创建问题,包括“Components/s”字段
- c# - 如何使用 C# 执行映射规则