Collecter les journaux Secure Web Proxy Google Cloud
Ce document explique comment ingérer les journaux de proxy Web sécurisé dans Google Security Operations à l'aide de Google Cloud Storage V2. Google Cloud
Le proxy Web sécurisé est un service cloud-first qui vous aide à sécuriser le trafic Web de sortie (HTTP et HTTPS). Il fournit une solution de proxy gérée qui permet de créer des stratégies flexibles et précises basées sur les identités cloud et les applications Web. Le proxy Web sécurisé identifie le trafic non conforme aux règles et l'enregistre dans Cloud Logging. Vous pouvez ainsi surveiller l'utilisation d'Internet, découvrir les menaces qui pèsent sur votre réseau et répondre aux incidents de sécurité.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Une instance Google SecOps
- Un projet Google Cloud avec l'API Cloud Storage activée
- Autorisations pour créer et gérer des buckets GCS
- Autorisations permettant de gérer les stratégies IAM sur les buckets GCS
- Le proxy Web sécurisé est actif et configuré dans votre environnement Google Cloud.
- Accès privilégié à Google Cloud et autorisations appropriées pour accéder aux journaux du proxy Web sécurisé
- Autorisations pour créer et gérer des récepteurs Cloud Logging
Créer un bucket Google Cloud Storage
Utiliser la console Google Cloud
- Accédez à Google Cloud Console.
- Sélectionnez votre projet ou créez-en un.
- Dans le menu de navigation, accédez à Cloud Storage> Buckets.
- Cliquez sur Créer un bucket.
Fournissez les informations de configuration suivantes :
Paramètre Valeur Nommer votre bucket Saisissez un nom unique (par exemple, Google Cloud-swp-logs).Type d'emplacement Choisissez en fonction de vos besoins (région, birégion ou multirégion). Emplacement Sélectionnez l'emplacement (par exemple, us-central1).Classe de stockage Standard (recommandé pour les journaux auxquels vous accédez fréquemment) Access control (Contrôle des accès) Uniforme (recommandé) Outils de protection Facultatif : Activer la gestion des versions des objets ou la règle de conservation Cliquez sur Créer.
Utiliser l'outil de ligne de commande gcloud
Vous pouvez également créer un bucket à l'aide de la commande
gcloud:gcloud storage buckets create gs://gcp-swp-logs \ --location=us-central1 \ --default-storage-class=STANDARD- Remplacez :
gcp-swp-logs: nom de bucket de votre choix (unique au niveau mondial).us-central1: région de votre choix (par exemple,us-central1,europe-west1).
- Remplacez :
Configurer Cloud Logging pour exporter les journaux Secure Web Proxy vers GCS
Le proxy Web sécurisé enregistre automatiquement les journaux des transactions de proxy dans Cloud Logging. Pour exporter ces journaux vers Cloud Storage, vous devez créer un récepteur Cloud Logging.
Utiliser la console Google Cloud
- Dans la console Google Cloud, accédez à Journalisation > Routeur de journaux.
- Cliquez sur Créer un récepteur.
- Fournissez les informations de configuration suivantes :
- Nom du récepteur : saisissez un nom descriptif (par exemple,
swp-export-sink). - Description du récepteur : description facultative.
- Nom du récepteur : saisissez un nom descriptif (par exemple,
- Cliquez sur Suivant.
- Dans la section Sélectionner le service de récepteur :
- Service de récepteur : sélectionnez Bucket Cloud Storage.
- Sélectionner un bucket Cloud Storage : sélectionnez
gcp-swp-logsdans le menu déroulant.
- Cliquez sur Suivant.
Dans la section Sélectionner les journaux à inclure dans le récepteur, saisissez la requête de filtre suivante :
logName="projects/<YOUR_PROJECT_ID>/logs/networkservices.googleapis.com/gateway_requests"- Remplacez
<YOUR_PROJECT_ID>par l'ID de votre projet Google Cloud.
- Remplacez
Cliquez sur Suivant.
Vérifiez la configuration, puis cliquez sur Créer un récepteur.
Une fois le récepteur créé, Cloud Logging affiche l'identité du rédacteur du récepteur (adresse e-mail d'un compte de service). Copiez l'adresse e-mail de ce compte de service pour l'étape suivante.
Utiliser l'outil de ligne de commande gcloud
Vous pouvez également créer un récepteur à l'aide de la commande
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"'- Remplacez :
swp-export-sink: nom du récepteur de votre choix.gcp-swp-logs: nom de votre bucket GCS.<YOUR_PROJECT_ID>: ID de votre projet Google Cloud.
- Remplacez :
Accorder des autorisations au compte de service Cloud Logging
Le compte de service de l'identité de l'enregistreur de récepteur Cloud Logging doit être autorisé à écrire des journaux dans votre bucket GCS.
Utiliser la console Google Cloud
- Accédez à Cloud Storage > Buckets.
- Cliquez sur le nom de votre bucket (
gcp-swp-logs). - Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- Fournissez les informations de configuration suivantes :
- Ajouter des comptes principaux : collez l'adresse e-mail du compte de service de l'identité du rédacteur de récepteur Cloud Logging (par exemple,
serviceAccount:service-123456789@gcp-sa-logging.iam.gserviceaccount.com). - Attribuer des rôles : sélectionnez Administrateur des objets Storage.
- Ajouter des comptes principaux : collez l'adresse e-mail du compte de service de l'identité du rédacteur de récepteur Cloud Logging (par exemple,
Cliquez sur Enregistrer.
Utiliser l'outil de ligne de commande gcloud
Vous pouvez également accorder des autorisations à l'aide de la commande
gcloud:gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \ --member="serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>" \ --role="roles/storage.objectAdmin"- Remplacez :
gcp-swp-logs: nom de votre bucket.<LOGGING_SERVICE_ACCOUNT_EMAIL>: adresse e-mail du compte de service de l'identité du rédacteur du récepteur Cloud Logging.
- Remplacez :
Utiliser l'outil de ligne de commande gsutil (ancienne version)
Attribuez le rôle Administrateur d'objets à votre compte de service de journalisation :
gsutil iam ch serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>:objectAdmin \ gs://gcp-swp-logs
Vérifier les autorisations
Pour vérifier que les autorisations ont été accordées correctement :
gcloud storage buckets get-iam-policy gs://gcp-swp-logs \ --flatten="bindings[].members" \ --filter="bindings.role:roles/storage.objectAdmin"
L'adresse e-mail du compte de service Cloud Logging devrait s'afficher dans le résultat.
Récupérer le compte de service Google SecOps
Google SecOps utilise un compte de service unique pour lire les données de votre bucket GCS. Vous devez accorder à ce compte de service l'accès à votre bucket.
Configurer un flux dans Google SecOps pour ingérer les journaux Secure Web Proxy GCP
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Cliquez sur Configurer un flux unique.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
GGoogle CloudCP Secure Web Proxy Logs). - Sélectionnez Google Cloud Storage V2 comme Type de source.
Sélectionnez Proxy Web sécurisé GCP comme Type de journal.
Cliquez sur Obtenir un compte de service. Une adresse e-mail unique pour le compte de service s'affiche, par exemple :
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopiez cette adresse e-mail pour l'utiliser à l'étape suivante.
Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants :
- URL du bucket Storage : saisissez l'URI du bucket GCS avec le préfixe du chemin d'accès :
gs://gcp-swp-logs/- Remplacez :
gcp-swp-logs: nom de votre bucket GCS.
Option de suppression de la source : sélectionnez l'option de suppression de votre choix :
- Jamais : ne supprime jamais aucun fichier après les transferts (recommandé pour les tests).
- Supprimer les fichiers transférés : supprime les fichiers après un transfert réussi.
Supprimer les fichiers transférés et les répertoires vides : supprime les fichiers et les répertoires vides après un transfert réussi.
Âge maximal des fichiers : incluez les fichiers modifiés au cours des derniers jours. La valeur par défaut est de 180 jours.
Espace de noms de l'élément : espace de noms de l'élément.
Libellés d'ingestion : libellé à appliquer aux événements de ce flux.
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Accorder des autorisations IAM au compte de service Google SecOps
Le compte de service Google SecOps a besoin du rôle Lecteur des objets Storage sur votre bucket GCS.
Utiliser la console Google Cloud
- Accédez à Cloud Storage > Buckets.
- Cliquez sur le nom de votre bucket.
- Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- Fournissez les informations de configuration suivantes :
- Ajouter des comptes principaux : collez l'adresse e-mail du compte de service Google SecOps.
- Attribuez des rôles : sélectionnez Lecteur des objets de l'espace de stockage.
- Cliquez sur Enregistrer.
Utiliser l'outil de ligne de commande gcloud
Vous pouvez également accorder des autorisations à l'aide de la commande
gcloud:gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \ --member="serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>" \ --role="roles/storage.objectViewer"- Remplacez :
gcp-swp-logs: nom de votre bucket.<SECOPS_SERVICE_ACCOUNT_EMAIL>: adresse e-mail du compte de service Google SecOps.
- Remplacez :
Utiliser l'outil de ligne de commande gsutil (ancienne version)
Exécutez la commande suivante pour accorder au compte de service SecOps les autorisations de lecteur d'objets :
gsutil iam ch serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>:objectViewer \ gs://gcp-swp-logs
Vérifier les autorisations
Pour vérifier que les autorisations ont été accordées correctement :
gcloud storage buckets get-iam-policy gs://gcp-swp-logs \ --flatten="bindings[].members" \ --filter="bindings.role:roles/storage.objectViewer"
L'adresse e-mail du compte de service Google SecOps doit s'afficher dans le résultat.
Table de mappage UDM
| Champ de journal | Mappage UDM | Logique |
|---|---|---|
| httpRequest.latency, jsonPayload.@type, logName | additional.fields | Fusionné avec latency_label (clé "Latence HTTPRequest", valeur de latence), type_label (clé "Type de journal", valeur de @type), logname (clé "Nom du journal", valeur de logName) |
| receiveTimestamp | metadata.collected_timestamp | Analysé en tant que code temporel RFC3339 |
| metadata.event_type | Défini sur NETWORK_HTTP si has_principal est défini sur "true", has_target sur "true" et que le protocole correspond à (?i)http ; sur NETWORK_CONNECTION si has_principal est défini sur "true", has_target sur "true" et que le réseau est différent de "" ; sur USER_LOGIN si has_principal est défini sur "true", has_target sur "true" et has_principal_user sur "true" ; sur STATUS_UPDATE si has_principal est défini sur "true" ; sur GENERIC_EVENT dans le cas contraire. | |
| insertId | metadata.product_log_id | Valeur copiée directement |
| httpRequest.protocol | network.application_protocol | Protocole extrait à l'aide du modèle Grok %{DATA:protocol}/%{INT:http_version}, défini si dans ["HTTP","HTTPS"] |
| httpRequest.protocol | network.application_protocol_version | Version HTTP extraite à l'aide du modèle Grok %{DATA:protocol}/%{INT:http_version} |
| httpRequest.requestMethod | network.http.method | Valeur copiée directement |
| httpRequest.userAgent | network.http.parsed_user_agent | Valeur copiée directement, convertie en parseduseragent |
| httpRequest.status | network.http.response_code | Converti en chaîne, puis en entier |
| httpRequest.userAgent | network.http.user_agent | Valeur copiée directement |
| httpRequest.responseSize | network.received_bytes | Valeur copiée directement, convertie en uinteger |
| httpRequest.requestSize | network.sent_bytes | Valeur copiée directement, convertie en uinteger |
| httpRequest.serverIp | principal.asset.ip | Adresse IP extraite à l'aide du modèle Grok %{IP:server_ip}, définie si elle n'est pas vide |
| httpRequest.serverIp | principal.ip | Adresse IP extraite à l'aide du modèle Grok %{IP:server_ip}, définie si elle n'est pas vide |
| jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action | security_result.action | Défini sur "ALLOW" si rule.action == ALLOW, "BLOCK" si rule.action == DENIED |
| jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action | security_result.action_details | Valeur copiée directement à partir de rule.action |
| jsonPayload.enforcedGatewaySecurityPolicy.requestWasTlsIntercepted, resource.labels.gateway_name, resource.labels.resource_container, resource.labels.gateway_type | security_result.detection_fields | Fusionné avec tls_intercepted_label (clé "requestWasTlsIntercepted", valeur de requestWasTlsIntercepted), gateway_name_label (clé "gateway-name", valeur de gateway_name), resource_container_label (clé "resource_container", valeur de resource_container), gateway_type_label (clé "gateway-type", valeur de gateway_type) |
| jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].name | security_result.rule_name | Valeur copiée directement |
| de gravité, | security_result.severity | Défini sur CRITICAL si la gravité est CRITICAL, sur ERROR si la gravité est ERROR, sur HIGH si la gravité est ALERT ou EMERGENCY, sur INFORMATIONAL si la gravité est INFO ou NOTICE, sur LOW si la gravité est DEBUG, sur MEDIUM si la gravité est WARNING, ou sur UNKNOWN_SEVERITY dans les autres cas. |
| jsonPayload.enforcedGatewaySecurityPolicy.hostname | target.asset.hostname | Valeur copiée directement |
| httpRequest.remoteIp | target.asset.ip | Adresse IP extraite à l'aide du modèle Grok %{IP:remote_ip}, définie si elle n'est pas vide |
| jsonPayload.enforcedGatewaySecurityPolicy.hostname | target.hostname | Valeur copiée directement |
| httpRequest.remoteIp | target.ip | Adresse IP extraite à l'aide du modèle Grok %{IP:remote_ip}, définie si elle n'est pas vide |
| resource.labels.location | target.resource.attribute.cloud.availability_zone | Valeur copiée directement |
| resource.labels.network_name, resource.type | target.resource.attribute.labels | Fusionné avec rc_network_name_label (clé "rc_network_name", valeur issue de network_name), resource_type (clé "Resource Type", valeur issue de resource.type) |
| httpRequest.requestUrl | target.url | Valeur copiée directement |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.