共用 VPC Service Controls 規則
透過輸入和輸出規則,BigQuery sharing (舊稱 Analytics Hub) 的發布者和訂閱者,可以存取受 VPC Service Controls 範圍保護的專案資料。設定這些規則前,請先熟悉 VPC Service Controls perimeter、共用資料集、資料交換、清單和連結資料集。
「呼叫端專案」 Google Cloud 是發出要求的網路或用戶端專案,例如 SQL 查詢或 Google Cloud CLI 指令。
建立資料交換
在下圖中,包含資料交換和共用資料集的專案位於不同的 service perimeter:
圖 1.建立資料交換作業的 VPC Service Controls 規則。
圖 1 標示了下列元件:
- 呼叫端:BigQuery 共用管理員。
- 專案 R:呼叫端專案。
- 專案 E:託管資料交換和清單。
如果您是 BigQuery sharing 管理員,在呼叫端專案以外的專案中建立資料交換時,必須新增下列輸入和輸出規則:
| 專案 | 規則 |
|---|---|
| Project R | 專案 E 的輸出規則 |
| 專案 E (資料交換) | 專案 R 的輸入規則 |
建立產品資訊
在下圖中,包含資料交換和共用資料集的專案位於不同的 service perimeter:
圖 2:建立產品資訊的 VPC Service Controls 規則。
圖 2 標示了下列元件:
- 呼叫端:BigQuery sharing 管理員或發布者。
- 專案 R:呼叫端專案。
- 專案 E:託管資料交換和清單。
- 專案 S:託管共用資料集。
在資料交換作業中建立資訊清單時,如果資料交換作業與共用資料集位於不同專案,您必須新增下列輸入和輸出規則,讓 BigQuery sharing 發布端建立資訊清單:
| 專案 | 規則 |
|---|---|
| Project R |
專案 E 的輸出規則 專案 S 的輸出規則 |
| 專案 E (資料交換) |
專案 S 的輸出規則 專案 R 的輸入規則 |
| 專案 S (共用資料集) |
專案 E 的輸出規則 專案 R 的輸入規則 |
訂閱產品資訊
在下圖中,包含清單和連結資料集的專案位於不同的 service perimeter:
圖 3:訂閱清單的 VPC Service Controls 規則。
圖 3 標示了下列元件:
- 呼叫端:BigQuery sharing 訂閱者。
- 專案 R:呼叫端專案。
- 專案 E:託管資料交換和清單。
- 專案 L:託管連結的資料集。
如果您是 BigQuery sharing 訂閱者,且訂閱的資料交換項目位於其他專案,則必須新增下列輸入和輸出規則:
| 專案 | 規則 |
|---|---|
| Project R |
專案 E 的輸出規則 專案 L 的輸出規則 |
| 專案 E (產品資訊) |
專案 L 的輸出規則 專案 R 的輸入規則 |
| 專案 L (連結的資料集) |
專案 E 的輸出規則 專案 R 的輸入規則 |
更新商店資訊
更新清單時 (例如修改受限匯出政策),BigQuery 共用功能會使用背景工作站,將這些變更套用至相關聯的連結資料集。如果 Google Cloud 專案受到 VPC Service Controls 範圍保護,且設有 IP 限制,源自 Google 基礎架構的背景工作站可能會遭到封鎖,導致連結的資料集無法成功同步。
如要讓背景 worker 更新連結的資料集,您必須明確設定輸入或輸出規則,讓執行 API 呼叫的主體使用者或主體服務帳戶略過 IP 限制。
如要修改訂閱者專案 perimeter 的輸入政策,請新增輸入規則,允許呼叫主體從任何來源 IP 位址 (*) 存取 bigquery.googleapis.com 服務:
ingressFrom:
sources:
- accessLevel: "*"
identities:
- "user:CALLING_USER_EMAIL"
- "serviceAccount:AUTOMATION_SA_EMAIL"
ingressTo:
resources:
- "projects/SUBSCRIBER_PROJECT_NUMBER"
operations:
- serviceName: "bigquery.googleapis.com"
methodSelectors:
- method: "*"
或者,如要修改發布者 perimeter 的輸出政策,請確認呼叫身分已明確新增至輸出規則的 identities 清單中,並導向訂閱者專案:
egressFrom:
identities:
- "user:CALLING_USER_EMAIL"
- "serviceAccount:AUTOMATION_SA_EMAIL"
egressTo:
resources:
- "projects/SUBSCRIBER_PROJECT_NUMBER"
operations:
- serviceName: "bigquery.googleapis.com"
methodSelectors:
- method: "*"
更改下列內容:
CALLING_USER_EMAIL:執行 API 呼叫來更新產品資訊的使用者電子郵件地址。如果是由真人使用者進行更新,請加入這個身分。AUTOMATION_SA_EMAIL:服務帳戶的電子郵件地址,該帳戶會執行 API 呼叫來更新產品資訊。如果是由自動化程序或指令碼進行更新,請加入這個身分。SUBSCRIBER_PROJECT_NUMBER:訂閱者專案的專案編號,該專案包含連結的資料集。
查詢連結資料集中的資料表
在下圖中,呼叫端專案和包含連結資料集的專案位於不同的 service perimeter:
圖 4:查詢連結資料集的 VPC Service Controls 規則。
圖 4 標示了下列元件:
- 呼叫端:BigQuery sharing 訂閱者,或連結資料集的任何 BigQuery 工作使用者。
- 專案 R:呼叫端專案。
- 專案 L:託管連結的資料集。
- 專案 V:託管含有資料表的共用資料集。
當您以 BigQuery sharing 訂閱者的身分,查詢連結資料集中的資料表時,必須新增下列輸入和輸出規則:
| 專案 | 規則 |
|---|---|
| Project R | 專案 L 的輸出規則 |
| 專案 L (連結的資料集) | 專案 R 的輸入規則 |
查詢連結資料集中的檢視表
本節說明查詢連結資料集中的檢視表時,必須遵守的 VPC Service Controls 規則。規則會因檢視表及其基礎資料表是否位於相同專案而異。
情境 1
在下圖中,包含連結資料集的專案,以及與檢視表相關聯的基礎資料表,位於不同的 service perimeter。檢視表 (專案 S) 和與檢視表相關聯的基礎資料表 (專案 V) 位於不同專案:
圖 5. 查詢連結資料集內檢視表的 VPC Service Controls 規則。
圖 5 標示了下列元件:
- 呼叫端:BigQuery sharing 訂閱者,或連結資料集的任何 BigQuery 工作使用者。
- 專案 R:呼叫端專案。
- 專案 L:託管連結的資料集。
- 專案 S:託管共用資料集。
- 專案 V:託管資料集,其中包含與檢視表相關聯的基礎資料表。
如果您是 BigQuery sharing 訂閱者,在連結的資料集中查詢檢視表時,必須新增下列輸入和輸出規則:
| 專案 | 規則 |
|---|---|
| Project R |
專案 L 的輸出規則 專案 V 的輸出規則 |
| 專案 L (連結的資料集) |
專案 R 的輸入規則 專案 V 的輸出規則 |
| Project V |
專案 L 的輸出規則 專案 R 的輸入規則 |
情境 2
在下圖中,檢視表 (Project V) 和與檢視表 (Project V) 相關聯的基礎資料表位於同一個專案中:
圖 6:查詢連結資料集內檢視表的 VPC Service Controls 規則。
圖 6 標示了下列元件:
- 呼叫端:BigQuery sharing 訂閱者,或連結資料集的任何 BigQuery 工作使用者。
- 專案 R:呼叫端專案。
- 專案 L:託管連結的資料集。
- 專案 V:同時託管檢視表和與檢視表相關聯的基礎資料表。
如果您是 BigQuery sharing 訂閱者,在連結的資料集中查詢檢視表時,必須新增下列輸入和輸出規則:
| 專案 | 規則 |
|---|---|
| Project R |
專案 L 的輸出規則 |
| 專案 L (連結的資料集) |
專案 R 的輸入規則 |
查詢連結資料集中的授權檢視表
在下圖中,授權檢視表和與授權檢視表 (專案 V) 相關聯的基礎資料表位於同一個專案中:
圖 7.查詢連結資料集內檢視表的 VPC Service Controls 規則。
圖 7 標示了下列元件:
- 呼叫端:BigQuery sharing 訂閱者,或連結資料集的任何 BigQuery 工作使用者。
- 專案 R:呼叫端專案。
- 專案 L:託管連結的資料集。
- 專案 V:託管授權檢視表和與檢視表相關聯的基礎資料表。
如果您是 BigQuery sharing 訂閱者,在連結的資料集中查詢檢視表時,必須新增下列輸入和輸出規則:
| 專案 | 規則 |
|---|---|
| Project R |
專案 L 的輸出規則 |
| 專案 L (連結的資料集) |
專案 R 的輸入規則 |
限制
BigQuery 共用功能不支援以方法為基礎的規則。您必須允許所有方法,才能啟用以方法為依據的規則。例如:
ingressTo:
operations:
- methodSelectors:
- method: '*'
serviceName: analyticshub.googleapis.com
resources:
- projects/PROJECT_ID
如果 BigQuery 資源也受到 service perimeter 保護,您必須允許 BigQuery 服務的輸入和輸出規則。建立資料交換時,不一定要允許輸入和輸出規則。BigQuery 的輸入和輸出規則與 BigQuery sharing 類似。例如:
ingressTo:
operations:
- methodSelectors:
- method: '*'
serviceName: bigquery.googleapis.com
resources:
- projects/PROJECT_ID