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 버킷을 읽을 수 있도록 이그레스 규칙을 구성해야 합니다.
현재 경계를 확인합니다.
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: 서비스 경계입니다.
경계 외부의 Cloud Storage 버킷을 읽을 수 있도록 이 규칙을
egress-policies.yaml에 추가합니다.- 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에서 관리하는 Apache Iceberg 테이블을 읽기 위해 BigLake API를 쿼리해야 합니다. 프로젝트의 경계가 biglake.googleapis.com 서비스를 제한하는 경우 VPC 서비스 제어 규칙이 이를 차단할 수 있습니다.
프로젝트에 VPC 서비스 제어가 적용되고 프로젝트에 적용된 경계가 biglake.googleapis.com 서비스를 제한하는 경우 SAP 제휴 주 구성원이 BigLake API에 액세스할 수 있도록 인그레스 규칙을 구성해야 합니다.
인그레스 규칙 구성
현재 경계를 확인합니다.
PERIMETER_NAME=accessPolicies/ACCESS_POLICY/servicePerimeters/PERIMETER gcloud access-context-manager perimeters describe ${PERIMETER_NAME}다음을 바꿉니다.
ACCESS_POLICY: 액세스 정책입니다.PERIMETER: 서비스 경계입니다.
응답에 다음이 포함된 경우 서비스 경계에서 BigLake 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: 워크로드 아이덴티티 풀이 포함된 프로젝트 IDPOOL_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}