視整合方式而定,您必須為下列資料流程設定規則:
- 查詢 SAP 資料 (SAP 至 BDC):如要從Google Cloud查詢 SAP 資料表,必須設定輸出規則。
- 將資料發布至 SAP (BDC 至 SAP):如要將資料發布至 SAP,您必須設定輸入規則。
查詢 SAP 的輸出規則
查詢 SAP 資料表時,可能會看到這則錯誤訊息:
VPC Service Controls: Request is prohibited by organization's policy. File: gs://example-bucket/path/to/file
這是因為 BigQuery 必須讀取 Cloud Storage 外部 bucket,才能存取資料表資料。如果您的 perimeter 限制 storage.googleapis.com,您可能會收到 RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER 錯誤,因為外部 bucket 位於 perimeter 外部。如要解決這個問題,請設定輸出規則。詳情請參閱「不在同一邊界內的資源」。
設定輸出規則
如果 SAP 環境部署在Google Cloud,則適用這項設定。
如果專案使用 VPC Service Controls,且範圍限制 storage.googleapis.com,您必須設定輸出規則,允許 BigQuery 讀取 SAP Cloud Storage 值區,以進行資料表查詢。
檢查目前的周邊範圍。
PERIMETER_NAME=accessPolicies/ACCESS_POLICY/servicePerimeters/PERIMETER gcloud access-context-manager perimeters describe ${PERIMETER_NAME}更改下列內容:
ACCESS_POLICY:存取權政策。PERIMETER:您的 service perimeter。
如果回應包含下列內容,表示安全防護範圍會限制 Cloud Storage 值區的讀取作業:
resources: - projects/PROJECT_ID ... restrictedServices: - storage.googleapis.com匯出目前的輸出規則,並附加允許讀取 Cloud Storage bucket 的規則。
PERIMETER_NAME=accessPolicies/ACCESS_POLICY/servicePerimeters/PERIMETER gcloud access-context-manager perimeters describe ${PERIMETER_NAME} \ --format="yaml(status.egressPolicies)" | sed '1,2d; s/^ //' > egress-policies.yaml更改下列內容:
ACCESS_POLICY:存取權政策。PERIMETER:您的 service perimeter。
將這項規則附加至
egress-policies.yaml,即可讀取 perimeter 外部的 Cloud Storage bucket:- egressFrom: identityType: ANY_IDENTITY egressTo: operations: - methodSelectors: - method: google.storage.buckets.get - method: google.storage.objects.get - method: google.storage.objects.list serviceName: storage.googleapis.com resources: - '*'更新服務範圍:
gcloud access-context-manager perimeters update ${PERIMETER_NAME} \ --set-egress-policies=egress-policies.yaml驗證更新後的輸出政策:
gcloud access-context-manager perimeters describe ${PERIMETER_NAME}
將資料發布至 SAP 的輸入規則
SAP 需要查詢 Lakehouse API,才能讀取 Lakehouse 資料表。如果專案的 perimeter 限制 biglake.googleapis.com 服務,VPC SC 規則可能會封鎖這項作業。
如果專案強制執行 VPC Service Controls,且套用至專案的範圍限制了 biglake.googleapis.com 服務,您必須設定輸入規則,允許 SAP 聯邦主體存取 Lakehouse API。
設定輸入規則
檢查目前的周邊範圍。
PERIMETER_NAME=accessPolicies/ACCESS_POLICY/servicePerimeters/PERIMETER gcloud access-context-manager perimeters describe ${PERIMETER_NAME}更改下列內容:
ACCESS_POLICY:存取權政策。PERIMETER:您的 service perimeter。
如果回應包含下列項目,服務範圍可能會限制 Lakehouse API:
resources: - projects/PROJECT_ID ... restrictedServices: - biglake.googleapis.com匯出目前的輸入規則,並附加規則,允許 SAP 聯盟主體呼叫 Lakehouse API。
PERIMETER_NAME=accessPolicies/ACCESS_POLICY/servicePerimeters/PERIMETER gcloud access-context-manager perimeters describe ${PERIMETER_NAME} \ --format="yaml(status.ingressPolicies)" | sed '1,2d; s/^ //' > ingress-policies.yaml更改下列內容:
ACCESS_POLICY:存取權政策。PERIMETER:您的 service perimeter。
為 SAP 聯合主體附加規則:
- ingressFrom: identities: - principal://iam.googleapis.com/projects/PROJECT_ID/locations/global/workloadIdentityPools/POOL_NAME/subject/SUBJECT sources: - accessLevel: '*' ingressTo: operations: - methodSelectors: - method: '*' serviceName: biglake.googleapis.com resources: - '*'更改下列內容:
PROJECT_ID:包含 Workload Identity Pool 的專案 ID。POOL_NAME:Workload Identity Pool 的名稱。SUBJECT:SAP 端簽發者為工作負載核發的 UUID。
更新服務範圍:
gcloud access-context-manager perimeters update ${PERIMETER_NAME} \ --set-ingress-policies=ingress-policies.yaml確認更新後的政策:
gcloud access-context-manager perimeters describe ${PERIMETER_NAME}