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 外部バケットを読み取る必要があるためです。境界で storage.googleapis.com が制限されている場合、外部バケットが境界外にあるため、RESOURCES_NOT_IN_SAME_SERVICE_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: サービス境界。

    レスポンスに次のものが含まれている場合、境界は Cloud Storage バケットの読み取りを制限します。

    resources:
    - projects/PROJECT_ID
    ...
    restrictedServices:
    - storage.googleapis.com
    
  2. 現在の下り(外向き)ルールをエクスポートし、Cloud Storage バケットの読み取りを許可するルールを追加します。

    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: サービス境界。

    このルールを egress-policies.yaml に追加して、境界外の Cloud Storage バケットを読み取れるようにします。

    - 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 テーブルを読み取るために Lakehouse API にクエリを実行する必要があります。プロジェクトの境界で 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: サービス境界。

    レスポンスに次のものが含まれている場合、サービス境界で 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: サービス境界。

    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 プールを含むプロジェクト ID。
    • POOL_NAME: Workload Identity プールの名前。
    • 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}
    

次のステップ