SAP BDC의 VPC 서비스 제어 구성

이 문서에서는 SAP Business Data Cloud (BDC)의 VPC 서비스 제어 (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 서비스 제어를 사용하고 경계에서 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 서비스 제어가 적용되어 있고 프로젝트에 적용된 경계에서 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}
    

다음 단계