SAP BDC 的 VPC Service Controls 設定

本文說明如何為 SAP Business Data Cloud (BDC) 設定 VPC Service Controls (VPC SC) 輸出和輸入規則。

視整合方式而定,您必須為下列資料流程設定規則:

  • 查詢 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 值區,以進行資料表查詢。

  1. 檢查目前的周邊範圍。

    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
    
  2. 匯出目前的輸出規則,並附加允許讀取 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:
        - '*'
    
  3. 更新服務範圍:

    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。

設定輸入規則

  1. 檢查目前的周邊範圍。

    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
    
  2. 匯出目前的輸入規則,並附加規則,允許 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。
  3. 更新服務範圍:

    gcloud access-context-manager perimeters update ${PERIMETER_NAME} \
        --set-ingress-policies=ingress-policies.yaml
    

    確認更新後的政策:

    gcloud access-context-manager perimeters describe ${PERIMETER_NAME}
    

後續步驟