統合に応じて、次のデータフローのルールを構成する必要があります。
- 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 バケットを読み取れるように下り(外向き)ルールを構成する必要があります。
現在の境界を確認します。
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現在の下り(外向き)ルールをエクスポートし、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: - '*'サービス境界を更新します。
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 にアクセスできるようにする上り(内向き)ルールを構成する必要があります。
上り(内向き)ルールを構成する
現在の境界を確認します。
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現在の上り(内向き)ルールをエクスポートし、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。
サービス境界を更新します。
gcloud access-context-manager perimeters update ${PERIMETER_NAME} \ --set-ingress-policies=ingress-policies.yaml更新されたポリシーを確認します。
gcloud access-context-manager perimeters describe ${PERIMETER_NAME}