Recopila Google Cloud registros de Secure Web Proxy
En este documento, se explica cómo transferir registros Google Cloud del proxy web seguro a Google Security Operations con Google Cloud Storage V2.
El Proxy web seguro es un servicio centrado en la nube que te ayuda a proteger el tráfico web de salida (HTTP y HTTPS). Proporciona una solución de proxy administrada que permite políticas flexibles y detalladas basadas en identidades centradas en la nube y aplicaciones web. El proxy web seguro identifica el tráfico que no cumple con la política y lo registra en Cloud Logging, lo que te permite supervisar el uso de Internet, descubrir amenazas a tu red y responder a incidentes de seguridad.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Una instancia de Google SecOps
- Un Google Cloud proyecto con la API de Cloud Storage habilitada
- Permisos para crear y administrar buckets de GCS
- Permisos para administrar políticas de IAM en buckets de GCS
- El proxy web seguro está activo y configurado en tu entorno de Google Cloud.
- Acceso privilegiado a Google Cloud y permisos adecuados para acceder a los registros de Secure Web Proxy
- Permisos para crear y administrar receptores de Cloud Logging
Crea un bucket de Google Cloud Storage
Usa la consola de Google Cloud
- Ve a Google Cloud Console.
- Selecciona tu proyecto o crea uno nuevo.
- En el menú de navegación, ve a Cloud Storage > Buckets.
- Haz clic en Crear bucket.
Proporciona los siguientes detalles de configuración:
Configuración Valor Asigna un nombre a tu bucket Ingresa un nombre global único (por ejemplo, Google Cloud-swp-logs).Tipo de ubicación Elige según tus necesidades (región, birregional, multirregional) Ubicación Selecciona la ubicación (por ejemplo, us-central1).Clase de almacenamiento Estándar (recomendado para los registros a los que se accede con frecuencia) Control de acceso Uniforme (recomendado) Herramientas de protección Opcional: Habilita el control de versiones de objetos o la política de retención Haz clic en Crear.
Usa la herramienta de línea de comandos de gcloud
Como alternativa, crea un bucket con el comando
gcloud:gcloud storage buckets create gs://gcp-swp-logs \ --location=us-central1 \ --default-storage-class=STANDARD- Reemplaza:
gcp-swp-logs: Es el nombre del bucket que deseas (único a nivel global).us-central1: Tu región preferida (por ejemplo,us-central1,europe-west1).
- Reemplaza:
Configura Cloud Logging para exportar registros de Secure Web Proxy a GCS
El Proxy web seguro registra automáticamente los registros de transacciones del proxy en Cloud Logging. Para exportar estos registros a Cloud Storage, debes crear un receptor de Cloud Logging.
Usa la consola de Google Cloud
- En la consola de Google Cloud, ve a Logging > Enrutador de registros.
- Haz clic en Crear un receptor.
- Proporciona los siguientes detalles de configuración:
- Nombre del receptor: Ingresa un nombre descriptivo (por ejemplo,
swp-export-sink). - Descripción del receptor: Es una descripción opcional.
- Nombre del receptor: Ingresa un nombre descriptivo (por ejemplo,
- Haz clic en Siguiente.
- En la sección Selecciona el servicio de receptor, haz lo siguiente:
- Servicio de receptor: Selecciona Bucket de Cloud Storage.
- Selecciona un bucket de Cloud Storage: Selecciona
gcp-swp-logsen el menú desplegable.
- Haz clic en Siguiente.
En la sección Elige registros para incluirlos en el receptor, ingresa la siguiente consulta de filtro:
logName="projects/<YOUR_PROJECT_ID>/logs/networkservices.googleapis.com/gateway_requests"- Reemplaza
<YOUR_PROJECT_ID>por el ID del proyecto de Google Cloud.
- Reemplaza
Haz clic en Siguiente.
Revisa la configuración y haz clic en Crear receptor.
Después de crear el receptor, Cloud Logging mostrará su identidad de escritor (una dirección de correo electrónico de la cuenta de servicio). Copia el correo electrónico de esta cuenta de servicio para el siguiente paso.
Usa la herramienta de línea de comandos de gcloud
Como alternativa, puedes crear un receptor con el comando
gcloud:gcloud logging sinks create swp-export-sink \ storage.googleapis.com/gcp-swp-logs \ --log-filter='logName="projects/<YOUR_PROJECT_ID>/logs/networkservices.googleapis.com/gateway_requests"'- Reemplaza:
swp-export-sink: Es el nombre del receptor que deseas.gcp-swp-logs: Es el nombre de tu bucket de GCS.<YOUR_PROJECT_ID>es el ID del proyecto de Google Cloud.
- Reemplaza:
Otorga permisos a la cuenta de servicio de Cloud Logging
La cuenta de servicio de identidad del escritor del receptor de Cloud Logging necesita permisos para escribir registros en tu bucket de GCS.
Usa la consola de Google Cloud
- Ve a Cloud Storage > Buckets.
- Haz clic en el nombre de tu bucket (
gcp-swp-logs). - Ve a la pestaña Permisos.
- Haz clic en Otorgar acceso.
- Proporciona los siguientes detalles de configuración:
- Agregar principales: Pega el correo electrónico de la cuenta de servicio de identidad del escritor del receptor de Cloud Logging (por ejemplo,
serviceAccount:service-123456789@gcp-sa-logging.iam.gserviceaccount.com). - Asignar roles: Selecciona Administrador de objetos de Storage.
- Agregar principales: Pega el correo electrónico de la cuenta de servicio de identidad del escritor del receptor de Cloud Logging (por ejemplo,
Haz clic en Guardar.
Usa la herramienta de línea de comandos de gcloud
Como alternativa, otorga permisos con el comando
gcloud:gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \ --member="serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>" \ --role="roles/storage.objectAdmin"- Reemplaza:
gcp-swp-logs: Es el nombre de tu bucket.<LOGGING_SERVICE_ACCOUNT_EMAIL>: Es el correo electrónico de la cuenta de servicio de identidad del escritor del receptor de Cloud Logging.
- Reemplaza:
Usa la herramienta de línea de comandos de gsutil (heredada)
Asigna el rol de administrador de objetos a tu cuenta de servicio de registro:
gsutil iam ch serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>:objectAdmin \ gs://gcp-swp-logs
Verifica los permisos
Para verificar que los permisos se hayan otorgado correctamente, haz lo siguiente:
gcloud storage buckets get-iam-policy gs://gcp-swp-logs \ --flatten="bindings[].members" \ --filter="bindings.role:roles/storage.objectAdmin"
Deberías ver el correo electrónico de la cuenta de servicio de Cloud Logging en el resultado.
Recupera la cuenta de servicio de Google SecOps
Las Operaciones de seguridad de Google usan una cuenta de servicio única para leer datos de tu bucket de GCS. Debes otorgar acceso a tu bucket a esta cuenta de servicio.
Configura un feed en Google SecOps para transferir registros del proxy web seguro de GCP
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar feed nuevo.
- Haz clic en Configura un feed único.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo,
GGoogle CloudCP Secure Web Proxy Logs). - Selecciona Google Cloud Storage V2 como el Tipo de fuente.
Selecciona Proxy web seguro de GCP como el Tipo de registro.
Haz clic en Obtener cuenta de servicio. Se mostrará un correo electrónico único de la cuenta de servicio, por ejemplo:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia esta dirección de correo electrónico para usarla en el siguiente paso.
Haz clic en Siguiente.
Especifica valores para los siguientes parámetros de entrada:
- URL del bucket de almacenamiento: Ingresa el URI del bucket de GCS con la ruta de acceso del prefijo:
gs://gcp-swp-logs/- Reemplaza:
gcp-swp-logs: Es el nombre de tu bucket de GCS.
Opción de borrado de la fuente: Selecciona la opción de borrado según tu preferencia:
- Nunca: Nunca borra ningún archivo después de las transferencias (se recomienda para las pruebas).
- Borrar archivos transferidos: Borra los archivos después de la transferencia exitosa.
Borrar los archivos transferidos y los directorios vacíos: Borra los archivos y los directorios vacíos después de la transferencia exitosa.
Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días especificada. El valor predeterminado es de 180 días.
Espacio de nombres del recurso: Es el espacio de nombres del recurso.
Etiquetas de transmisión: Es la etiqueta que se aplicará a los eventos de este feed.
Haz clic en Siguiente.
Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
Otorga permisos de IAM a la cuenta de servicio de Google SecOps
La cuenta de servicio de Google SecOps necesita el rol de visualizador de objetos de almacenamiento en tu bucket de GCS.
Usa la consola de Google Cloud
- Ve a Cloud Storage > Buckets.
- Haz clic en el nombre de tu bucket.
- Ve a la pestaña Permisos.
- Haz clic en Otorgar acceso.
- Proporciona los siguientes detalles de configuración:
- Agregar principales: Pega el correo electrónico de la cuenta de servicio de Google SecOps.
- Asignar roles: Selecciona Visualizador de objetos de Storage.
- Haz clic en Guardar.
Usa la herramienta de línea de comandos de gcloud
Como alternativa, otorga permisos con el comando
gcloud:gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \ --member="serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>" \ --role="roles/storage.objectViewer"- Reemplaza:
gcp-swp-logs: Es el nombre de tu bucket.<SECOPS_SERVICE_ACCOUNT_EMAIL>: Es el correo electrónico de la cuenta de servicio de Google SecOps.
- Reemplaza:
Usa la herramienta de línea de comandos de gsutil (heredada)
Ejecuta el siguiente comando para otorgar permisos de visualizador de objetos a la cuenta de servicio de SecOps:
gsutil iam ch serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>:objectViewer \ gs://gcp-swp-logs
Verifica los permisos
Para verificar que los permisos se hayan otorgado correctamente, haz lo siguiente:
gcloud storage buckets get-iam-policy gs://gcp-swp-logs \ --flatten="bindings[].members" \ --filter="bindings.role:roles/storage.objectViewer"
Deberías ver el correo electrónico de la cuenta de servicio de Google SecOps en el resultado.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
| httpRequest.latency, jsonPayload.@type, logName | additional.fields | Se combinó con latency_label (clave "Latencia de la solicitud HTTP", valor de latencia), type_label (clave "Tipo de registro", valor de @type) y logname (clave "Nombre del registro", valor de logName). |
| receiveTimestamp | metadata.collected_timestamp | Se analizó como marca de tiempo RFC3339. |
| metadata.event_type | Se establece en NETWORK_HTTP si has_principal es verdadero, has_target es verdadero y el protocolo coincide con (?i)http; NETWORK_CONNECTION si has_principal es verdadero, has_target es verdadero y network != ""; USER_LOGIN si has_principal es verdadero, has_target es verdadero y has_principal_user es verdadero; STATUS_UPDATE si has_principal es verdadero; GENERIC_EVENT en cualquier otro caso. | |
| insertId | metadata.product_log_id | Valor copiado directamente |
| httpRequest.protocol | network.application_protocol | Protocolo extraído con el patrón de Grok %{DATA:protocol}/%{INT:http_version}, establecido si está en ["HTTP","HTTPS"] |
| httpRequest.protocol | network.application_protocol_version | Se extrajo http_version con el patrón de Grok %{DATA:protocol}/%{INT:http_version} |
| httpRequest.requestMethod | network.http.method | Valor copiado directamente |
| httpRequest.userAgent | network.http.parsed_user_agent | Valor copiado directamente y convertido a parseduseragent |
| httpRequest.status | network.http.response_code | Se convierte en una cadena y, luego, en un número entero. |
| httpRequest.userAgent | network.http.user_agent | Valor copiado directamente |
| httpRequest.responseSize | network.received_bytes | Valor copiado directamente y convertido en entero sin signo |
| httpRequest.requestSize | network.sent_bytes | Valor copiado directamente y convertido en entero sin signo |
| httpRequest.serverIp | principal.asset.ip | Se extrajo la IP con el patrón de Grok %{IP:server_ip}, se configuró si no está vacía |
| httpRequest.serverIp | principal.ip | Se extrajo la IP con el patrón de Grok %{IP:server_ip}, se configuró si no está vacía |
| jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action | security_result.action | Se establece en ALLOW si rule.action == ALLOW y en BLOCK si rule.action == DENIED. |
| jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action | security_result.action_details | Valor copiado directamente de rule.action |
| jsonPayload.enforcedGatewaySecurityPolicy.requestWasTlsIntercepted, resource.labels.gateway_name, resource.labels.resource_container, resource.labels.gateway_type | security_result.detection_fields | Se fusionó con tls_intercepted_label (clave "requestWasTlsIntercepted", valor de requestWasTlsIntercepted), gateway_name_label (clave "gateway-name", valor de gateway_name), resource_container_label (clave "resource_container", valor de resource_container) y gateway_type_label (clave "gateway-type", valor de gateway_type). |
| jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].name | security_result.rule_name | Valor copiado directamente |
| gravedad, | security_result.severity | Se establece en CRITICAL si severity == CRITICAL; ERROR si severity == ERROR; HIGH si severity está en [ALERT, EMERGENCY]; INFORMATIONAL si severity está en [INFO, NOTICE]; LOW si severity == DEBUG; MEDIUM si severity == WARNING; UNKNOWN_SEVERITY en cualquier otro caso. |
| jsonPayload.enforcedGatewaySecurityPolicy.hostname | target.asset.hostname | Valor copiado directamente |
| httpRequest.remoteIp | target.asset.ip | Se extrajo la IP con el patrón de Grok %{IP:remote_ip}, se configuró si no está vacío |
| jsonPayload.enforcedGatewaySecurityPolicy.hostname | target.hostname | Valor copiado directamente |
| httpRequest.remoteIp | target.ip | Se extrajo la IP con el patrón de Grok %{IP:remote_ip}, se configuró si no está vacío |
| resource.labels.location | target.resource.attribute.cloud.availability_zone | Valor copiado directamente |
| resource.labels.network_name, resource.type | target.resource.attribute.labels | Se combinó con rc_network_name_label (clave "rc_network_name", valor de network_name), resource_type (clave "Resource Type", valor de resource.type) |
| httpRequest.requestUrl | target.url | Valor copiado directamente |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.