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 API 才能读取 Lakehouse 表。如果项目的边界限制了 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:包含工作负载身份池的项目 ID。
    • POOL_NAME:工作负载身份池的名称。
    • 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}
    

后续步骤