您必须根据集成情况,为以下数据流配置规则:
- 查询 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 API 才能读取由 Lakehouse 管理的 Apache Iceberg 表。如果项目的边界限制了
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:包含工作负载身份池的项目 ID。POOL_NAME:工作负载身份池的名称。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}