Reglas de salida para consultar SAP
Es posible que veas este error cuando consultes tablas de SAP:
VPC Service Controls: Request is prohibited by organization's policy. File: gs://example-bucket/path/to/file
Esto ocurre porque BigQuery debe leer los buckets externos de Cloud Storage
que alojan los datos de la tabla. Si tu perímetro restringe
storage.googleapis.com, es posible que recibas un
error RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER porque el bucket externo está
fuera de tu perímetro. Para resolver este problema, configura una regla de salida.
Para obtener más información, consulta Recursos que no están en el mismo
perímetro.
Configura reglas de salida
Esta configuración se aplica si tu entorno de SAP se implementa en Google Cloud.
Si tu proyecto usa los Controles del servicio de VPC y el perímetro restringe
storage.googleapis.com, debes configurar una regla de salida para permitir que
BigQuery lea los buckets de Cloud Storage de SAP para las consultas de tablas.
Verifica el perímetro actual.
PERIMETER_NAME=accessPolicies/ACCESS_POLICY/servicePerimeters/PERIMETER gcloud access-context-manager perimeters describe ${PERIMETER_NAME}Reemplaza lo siguiente:
ACCESS_POLICY: Es tu política de acceso.PERIMETER: Es tu perímetro de servicio.
Tu perímetro restringe las lecturas del bucket de Cloud Storage si la respuesta incluye lo siguiente:
resources: - projects/PROJECT_ID ... restrictedServices: - storage.googleapis.comExporta las reglas de salida actuales y agrega una regla para permitir las lecturas del bucket de 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.yamlReemplaza lo siguiente:
ACCESS_POLICY: Es tu política de acceso.PERIMETER: Es tu perímetro de servicio.
Agrega esta regla a
egress-policies.yamlpara permitirte leer buckets de Cloud Storage fuera del perímetro:- 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: - '*'Actualiza el perímetro de servicio:
gcloud access-context-manager perimeters update ${PERIMETER_NAME} \ --set-egress-policies=egress-policies.yamlVerifica las políticas de salida actualizadas:
gcloud access-context-manager perimeters describe ${PERIMETER_NAME}
Reglas de entrada para publicar datos en SAP
SAP necesita consultar la API de BigLake para leer
las tablas de Apache Iceberg que administra Lakehouse. Es posible que las reglas de los Controles del servicio de VPC
bloqueen esto si el perímetro del proyecto restringe el servicio de
biglake.googleapis.com.
Si tu proyecto tiene aplicados los Controles del servicio de VPC y el perímetro aplicado en
el proyecto restringe el servicio biglake.googleapis.com, debes configurar
una regla de entrada para permitir que las principales federadas de SAP accedan a la
API de BigLake.
Configura las reglas de entrada
Verifica el perímetro actual.
PERIMETER_NAME=accessPolicies/ACCESS_POLICY/servicePerimeters/PERIMETER gcloud access-context-manager perimeters describe ${PERIMETER_NAME}Reemplaza lo siguiente:
ACCESS_POLICY: Es tu política de acceso.PERIMETER: Es tu perímetro de servicio.
Tu perímetro de servicio puede restringir la API de BigLake si la respuesta contiene lo siguiente:
resources: - projects/PROJECT_ID ... restrictedServices: - biglake.googleapis.comExporta las reglas de entrada actuales y agrega una regla para permitir que los principales federados de SAP llamen a las APIs de Lakehouse.
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.yamlReemplaza lo siguiente:
ACCESS_POLICY: Es tu política de acceso.PERIMETER: Es tu perímetro de servicio.
Agrega una regla para el principal federado de 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: - '*'Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto que contiene el grupo de identidades para cargas de trabajo.POOL_NAME: Es el nombre del grupo de identidades para cargas de trabajo.SUBJECT: el UUID que emite la entidad emisora del lado de SAP para la carga de trabajo.
Actualiza el perímetro de servicio:
gcloud access-context-manager perimeters update ${PERIMETER_NAME} \ --set-ingress-policies=ingress-policies.yamlVerifica las políticas actualizadas:
gcloud access-context-manager perimeters describe ${PERIMETER_NAME}