Collecter les journaux WatchGuard Firebox
Ce document explique comment ingérer des journaux WatchGuard Firebox dans Google Security Operations à l'aide de Bindplane. WatchGuard Firebox est un pare-feu UTM (Unified Threat Management, gestion unifiée des menaces) qui fournit des fonctionnalités de sécurité réseau, y compris l'inspection des paquets avec état, la prévention des intrusions, le contrôle des applications, le filtrage des URL, l'antivirus de passerelle et la connectivité VPN. Les journaux Firebox enregistrent les événements de trafic, les alertes de sécurité, l'activité d'authentification et les informations sur l'état du système.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps.
- Un hôte Windows 2016 ou version ultérieure, ou Linux avec systemd.
- Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports de pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.
- Accès privilégié à l'interface utilisateur Web WatchGuard Firebox (interface utilisateur Web Fireware) ou à WatchGuard System Manager.
Obtenir les identifiants Google SecOps pour l'agent Bindplane
Pour authentifier l'agent Bindplane auprès de Google SecOps, choisissez l'une des méthodes suivantes :
- Nouveaux déploiements : utilisez l'API Chronicle (option 1).
- Anciens déploiements : continuez à utiliser le fichier d'authentification d'ingestion (option 2) jusqu'à l'arrêt de l'API Ingestion le 20 juillet 2027.
Option 1 : Créer un compte de service pour l'API Chronicle (recommandé)
- Connectez-vous à la consoleGoogle Cloud et sélectionnez le projet Google Cloud associé à votre instance Google SecOps.
- Accédez à IAM et administration > Comptes de service.
- Cliquez sur Créer un compte de service.
- Fournissez les informations de configuration suivantes :
- Nom du compte de service : saisissez un nom pour le compte (par exemple,
bindplane-ingest). - Description du compte de service : saisissez une description (par exemple,
Bindplane agent log ingestion).
- Nom du compte de service : saisissez un nom pour le compte (par exemple,
- Cliquez sur Créer et continuer.
- Dans la section Autoriser ce compte de service à accéder au projet, cliquez sur Sélectionner un rôle, puis sélectionnez Éditeur Chronicle.
- Cliquez sur Continue (Continuer), puis sur Done (OK).
- Cliquez sur le compte de service que vous avez créé, puis accédez à l'onglet Clés.
- Cliquez sur Ajouter une clé > Créer une clé.
- Sélectionnez JSON, puis cliquez sur Créer. Le fichier de clé est téléchargé sur votre ordinateur.
- Enregistrez le fichier de clé sous le nom
ingestion-auth.jsondans le répertoire du collecteur Bindplane (/opt/observiq-otel-collector/ingestion-auth.jsonsous Linux ouC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.jsonsous Windows), ou mettez à jourcreds_file_pathdansconfig.yamlpour qu'il corresponde au chemin d'accès où vous l'enregistrez. - Accédez à IAM et administration > Paramètres, puis copiez le numéro du projet. Vous en aurez besoin pour la configuration de l'exportateur.
Option 2 : Télécharger le fichier d'authentification d'ingestion (ancien)
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Agents de collecte.
- Téléchargez le fichier d'authentification d'ingestion.
- Enregistrez le fichier de manière sécurisée sur le système où l'agent BindPlane sera installé.
Obtenir l'ID client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM > Profil.
- Copiez et enregistrez le numéro client dans la section Détails de l'organisation.
Installer l'agent BindPlane
Installez l'agent BindPlane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.
Installation de Windows
- Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installation sous Linux
- Ouvrez un terminal avec des privilèges root ou sudo.
Exécutez la commande suivante :
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Ressources d'installation supplémentaires
- Pour découvrir d'autres options d'installation, consultez ce guide d'installation.
Configurer l'agent Bindplane pour ingérer les journaux syslog et les envoyer à Google SecOps
Accédez au fichier de configuration :
- Trouvez le fichier
config.yaml. Il se trouve généralement dans le répertoire/opt/observiq-otel-collector/sous Linux ou dans le répertoire d'installation sous Windows. - Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple,
nano,viou Bloc-notes).
- Trouvez le fichier
Modifiez le fichier
config.yamlcomme suit :receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: protocol: https # Region of your instance, for example us, europe, asia-southeast1 location: <LOCATION> # Project number of the Google Cloud project linked to the instance project: '<PROJECT_NUMBER>' compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: YOUR_CUSTOMER_ID endpoint: chronicle.googleapis.com # Add optional ingestion labels for better organization log_type: 'WATCHGUARD' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.
- Remplacez
<LOCATION>par la région de votre instance Google SecOps (par exemple,us,europeouasia-southeast1). L'exportateur ajoute cette valeur en préfixe àchronicle.googleapis.com. - Remplacez
<PROJECT_NUMBER>par le numéro de projet indiqué dans IAM et administration > Paramètres. - Remplacez
YOUR_CUSTOMER_IDpar le numéro client réel. - Remplacez
/path/to/ingestion-authentication-file.jsonpar le chemin d'accès au fichier de clé du compte de service (option 1) enregistré à l'étape 1.
Ancien exportateur d'API d'ingestion
Si vous utilisez le fichier d'authentification d'ingestion de l'option 2, remplacez le bloc
exporterspar ce qui suit. Définissezcreds_file_pathsur le chemin d'accès au fichier d'authentification d'ingestion. Si votre instance se trouve en dehors des États-Unis, remplacezmalachiteingestion-pa.googleapis.compar votre point de terminaison régional (par exemple,europe-malachiteingestion-pa.googleapis.com).exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: YOUR_CUSTOMER_ID endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'WATCHGUARD' raw_log_field: body ingestion_labels:
Redémarrez l'agent BindPlane pour appliquer les modifications.
Pour redémarrer l'agent BindPlane sous Linux, exécutez la commande suivante :
sudo systemctl restart observiq-otel-collectorPour redémarrer l'agent Bindplane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante :
net stop observiq-otel-collector && net start observiq-otel-collector
Configurer le transfert syslog WatchGuard Firebox
Pour configurer le WatchGuard Firebox afin qu'il transfère les messages syslog à l'agent Bindplane, procédez comme suit à l'aide de l'interface utilisateur Web Fireware :
- Connectez-vous à l'interface utilisateur Web Fireware (
https://<firebox-ip>:8080). - Accédez à Système > Journalisation.
- Cliquez sur Ajouter dans la section Serveurs Syslog.
Fournissez les informations de configuration suivantes :
- Adresse IP : saisissez l'adresse IP de l'hôte de l'agent BindPlane (par exemple,
192.168.1.100). - Port : saisissez
514(ou le port configuré dans l'agent Bindplane). - Format du journal : sélectionnez Syslog (format Syslog BSD standard).
- Adresse IP : saisissez l'adresse IP de l'hôte de l'agent BindPlane (par exemple,
Dans la section Paramètres Syslog, configurez le niveau de journalisation :
- Définissez le niveau de journalisation sur Informations ou un niveau supérieur pour capturer les événements liés au trafic, à la sécurité et au système.
Cliquez sur Enregistrer.
Configurer les types de journaux à transférer
- Dans l'interface utilisateur Web Fireware, accédez à System> Logging> Syslog (Système > Journalisation > Syslog).
Assurez-vous que les types de journaux suivants sont activés pour le transfert syslog :
- Trafic : événements de trafic du pare-feu (autoriser, refuser).
- Alarme : événements d'alarme de sécurité et d'IPS.
- Événement : événements système et changements d'état.
- Debug (facultatif, pour le dépannage uniquement).
Cliquez sur Enregistrer.
(Autre option) Configurer via WatchGuard System Manager
- Ouvrez WatchGuard System Manager et connectez-vous à la Firebox.
- Accédez à Setup> Logging > Send log messages to this syslog server (Configuration > Journalisation > Envoyer les messages de journal à ce serveur syslog).
- Cliquez sur Ajouter.
Fournissez les informations de configuration suivantes :
- Adresse IP : saisissez l'adresse IP de l'hôte de l'agent Bindplane.
- Port : saisissez
514. - Format du journal : sélectionnez Syslog.
Cliquez sur OK et enregistrez la configuration dans le Firebox.
Pour en savoir plus, consultez la documentation sur la journalisation WatchGuard Fireware.
Table de mappage UDM
| Champ du journal | Mappage UDM | Logique |
|---|---|---|
action |
security_result.action_details |
La valeur de action du journal brut est attribuée à security_result.action_details. |
action |
target.labels.value |
La valeur de action du journal brut est attribuée à target.labels.value, target.labels.key étant "Action over resource". |
arg |
target.file.full_path |
La valeur de arg du journal brut est attribuée à target.file.full_path. |
app_cat_id |
about.labels.value |
La valeur de app_cat_id du journal brut est attribuée à about.labels.value, about.labels.key étant "app_cat_id". |
app_cat_name |
target.application |
Utilisé en combinaison avec app_name pour former la valeur de target.application (par exemple, "Google - Web services"). |
app_id |
about.labels.value |
La valeur de app_id du journal brut est attribuée à about.labels.value, about.labels.key étant "app_id". |
app_name |
target.application |
Utilisé en combinaison avec app_cat_name pour former la valeur de target.application (par exemple, "Google - Web services"). |
cats |
security_result.category_details |
La valeur de cats du journal brut est attribuée à security_result.category_details. |
cert_issuer |
network.tls.server.certificate.issuer |
La valeur de cert_issuer du journal brut est attribuée à network.tls.server.certificate.issuer. |
cert_subject |
network.tls.server.certificate.subject |
La valeur de cert_subject du journal brut est attribuée à network.tls.server.certificate.subject. |
cn |
network.tls.server.certificate.subject |
La valeur de cn du journal brut est attribuée à network.tls.server.certificate.subject. |
conn_action |
security_result.action_details |
La valeur de conn_action du journal brut est attribuée à security_result.action_details. |
content_type |
Non mappé | Non mappé à l'objet IDM dans les exemples d'UDM fournis. |
description |
metadata.description |
La valeur de description dérivée du journal brut est attribuée à metadata.description. |
dhcp_type |
network.dhcp.type |
La valeur de dhcp_type du journal brut est mappée au type DHCP correspondant dans network.dhcp.type (par exemple, "REQUEST", "ACK"). |
dst_host |
target.hostname |
La valeur de dst_host du journal brut est attribuée à target.hostname. |
dst_ip |
target.ip |
La valeur de dst_ip du journal brut est attribuée à target.ip. |
dst_mac |
target.mac |
La valeur de dst_mac du journal brut est attribuée à target.mac. |
dst_port |
target.port |
La valeur de dst_port du journal brut est attribuée à target.port. |
dst_user |
target.user.user_display_name |
La valeur de dst_user du journal brut est attribuée à target.user.user_display_name. |
dstname |
target.administrative_domain |
La valeur de dstname du journal brut est attribuée à target.administrative_domain. |
duration |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
elapsed_time |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
endpoint |
intermediary.labels.value |
La valeur de endpoint du journal brut est attribuée à intermediary.labels.value, intermediary.labels.key étant "Gateway-Endpoint". |
event_name |
principal.application |
La valeur de event_name du journal brut est attribuée à principal.application. |
firewall_id |
intermediary.asset_id |
La valeur de firewall_id du journal brut est précédée de "Firewall ID : " et attribuée à intermediary.asset_id. |
firewall_name |
principal.asset_id |
La valeur de firewall_name du journal brut est précédée de "Firewall: " et attribuée à principal.asset_id. |
firewallname |
intermediary.hostname |
La valeur de firewallname du journal brut est attribuée à intermediary.hostname. |
firewallname |
principal.hostname |
La valeur de firewallname du journal brut est attribuée à principal.hostname. |
fqdn_dst_match |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
geo |
Non mappé | Non mappé à l'objet IDM dans les exemples d'UDM fournis. |
geo_dst |
target.location.country_or_region |
La valeur de geo_dst du journal brut est attribuée à target.location.country_or_region. |
geo_src |
principal.location.country_or_region |
La valeur de geo_src du journal brut est attribuée à principal.location.country_or_region. |
host |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
ike_policy |
security_result.rule_id |
La valeur de ike_policy du journal brut est attribuée à security_result.rule_id. |
ike_policy_version |
security_result.rule_version |
La valeur de ike_policy_version du journal brut est attribuée à security_result.rule_version. |
intermediary_host |
intermediary.hostname |
La valeur de intermediary_host du journal brut est attribuée à intermediary.hostname. |
ipaddress |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
ipsec_policy |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
ipsec_policy_version |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
keyword |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
line |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
log_message |
metadata.description |
La valeur de log_message du journal brut est attribuée à metadata.description lorsque d'autres descriptions plus spécifiques ne sont pas disponibles. |
log_reason |
security_result.summary |
La valeur de log_reason du journal brut est attribuée à security_result.summary. |
log_type |
metadata.log_type |
La valeur de log_type du journal brut est attribuée à metadata.log_type. Toujours défini sur "WATCHGUARD". |
msg |
security_result.summary |
La valeur de msg du journal brut est attribuée à security_result.summary. |
msg_id |
metadata.product_event_type |
La valeur de msg_id du journal brut est attribuée à metadata.product_event_type. |
new_action |
security_result.action_details |
Utilisé avec conn_action pour former la valeur de security_result.action_details (par exemple, "ProxyReplace: IP protocol - HTTPS-Client.DPI-Off"). |
op |
network.http.method |
La valeur de op du journal brut est attribuée à network.http.method. |
path |
target.url |
La valeur de path du journal brut est attribuée à target.url. |
pid |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
policy_name |
intermediary.resource.name |
La valeur de policy_name du journal brut est attribuée à intermediary.resource.name. |
policy_name |
security_result.rule_name |
La valeur de policy_name du journal brut est attribuée à security_result.rule_name. |
policyname_label.value |
security_result.rule_labels.value |
La valeur de policy_name du journal brut est attribuée à security_result.rule_labels.value, security_result.rule_labels.key étant "PolicyName". |
prin_host |
principal.hostname |
La valeur de prin_host du journal brut est attribuée à principal.hostname. |
proc_id |
Non mappé | Non mappé à l'objet IDM dans les exemples d'UDM fournis. |
protocol |
network.ip_protocol |
La valeur de protocol du journal brut, convertie en majuscules, est attribuée à network.ip_protocol. Traitement spécial pour "EXTERNAL ICMP" qui est mappé sur "ICMP". |
proxy_act |
security_result.rule_id |
La valeur de proxy_act du journal brut est attribuée à security_result.rule_id. |
proxy_act |
security_result.rule_name |
La valeur de proxy_act du journal brut est attribuée à security_result.rule_name. |
query_name |
network.dns.questions.name |
La valeur de query_name du journal brut est attribuée à network.dns.questions.name. |
query_type |
network.dns.questions.type |
La valeur de query_type du journal brut est attribuée à network.dns.questions.type. Gestion spéciale des types de requêtes numériques et mappage vers les types de requêtes DNS standards. |
rc |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
reason |
security_result.summary |
La valeur de reason du journal brut est attribuée à security_result.summary. |
record_type |
network.dns.answers.type |
La valeur de record_type du journal brut est mappée au type d'enregistrement DNS correspondant dans network.dns.answers.type. |
redirect_action |
Non mappé | Non mappé à l'objet IDM dans les exemples d'UDM fournis. |
reputation |
additional.fields.value.string_value |
La valeur de reputation du journal brut est attribuée à additional.fields.value.string_value, additional.fields.key étant "reputation". |
response |
Non mappé | Non mappé à l'objet IDM dans les exemples d'UDM fournis. |
response_code |
network.dns.response_code |
La valeur de response_code du journal brut est mappée au code de réponse DNS correspondant dans network.dns.response_code. |
route_type |
Non mappé | Non mappé à l'objet IDM dans les exemples d'UDM fournis. |
rule_name |
security_result.rule_name |
La valeur de rule_name du journal brut est attribuée à security_result.rule_name. |
rcvd_bytes |
network.received_bytes |
La valeur de rcvd_bytes du journal brut est attribuée à network.received_bytes. |
sent_bytes |
network.sent_bytes |
La valeur de sent_bytes du journal brut est attribuée à network.sent_bytes. |
server_ssl |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
severity |
Non mappé | Non mappé à l'objet IDM dans les exemples d'UDM fournis. |
sig_vers |
network.tls.server.certificate.version |
La valeur de sig_vers du journal brut est attribuée à network.tls.server.certificate.version. |
signature_cat |
additional.fields.value.string_value |
La valeur de signature_cat du journal brut est attribuée à additional.fields.value.string_value, additional.fields.key étant "signature_cat". |
signature_id |
additional.fields.value.string_value |
La valeur de signature_id du journal brut est attribuée à additional.fields.value.string_value, additional.fields.key étant "signature_id". |
signature_name |
additional.fields.value.string_value |
La valeur de signature_name du journal brut est attribuée à additional.fields.value.string_value, additional.fields.key étant "signature_name". |
sni |
network.tls.client.server_name |
La valeur de sni du journal brut est attribuée à network.tls.client.server_name. |
src_ctid |
Non mappé | Non mappé à l'objet IDM dans les exemples d'UDM fournis. |
src_host |
principal.hostname |
La valeur de src_host du journal brut est attribuée à principal.hostname. |
src_ip |
principal.ip |
La valeur de src_ip du journal brut est attribuée à principal.ip. |
src_ip_nat |
Non mappé | Non mappé à l'objet IDM dans les exemples d'UDM fournis. |
src_mac |
principal.mac |
La valeur de src_mac du journal brut est attribuée à principal.mac. |
src_port |
principal.port |
La valeur de src_port du journal brut est attribuée à principal.port. |
src_user |
principal.user.user_display_name |
La valeur de src_user du journal brut est attribuée à principal.user.user_display_name. |
src_user_name |
principal.user.user_display_name |
La valeur de src_user_name du journal brut est attribuée à principal.user.user_display_name. |
src_vpn_ip |
principal.ip |
La valeur de src_vpn_ip du journal brut est attribuée à principal.ip. |
srv_ip |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
srv_port |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
ssl_offload |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
tcp_info |
Non mappé | Non mappé à l'objet IDM dans les exemples d'UDM fournis. |
time |
metadata.event_timestamp.seconds, timestamp.seconds |
La valeur de time du journal brut est analysée et utilisée pour renseigner metadata.event_timestamp.seconds et timestamp.seconds. |
time1 |
metadata.event_timestamp.seconds, timestamp.seconds |
La valeur de time1 du journal brut est analysée et utilisée pour remplir metadata.event_timestamp.seconds et timestamp.seconds. |
tls_profile |
about.labels.value |
La valeur de tls_profile du journal brut est attribuée à about.labels.value, avec about.labels.key défini sur "tls_profile". |
tls_version |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
user_name |
principal.user.userid, principal.user.user_display_name |
La valeur de user_name du journal brut est attribuée à principal.user.userid ou principal.user.user_display_name selon le contexte. |
user_type |
Non mappé | Non mappé à l'objet IDM dans les exemples UDM fournis. |
| (N/A) | intermediary.resource.type |
Toujours défini sur "ACCESS_POLICY". |
| (N/A) | metadata.event_type |
Déterminé par la logique de l'analyseur en fonction de msg_id, log_type, event_name et d'autres champs. Il peut s'agir de NETWORK_CONNECTION, SERVICE_MODIFICATION, NETWORK_SMTP, NETWORK_DNS, NETWORK_HTTP, USER_LOGIN, USER_LOGOUT, USER_RESOURCE_UPDATE_CONTENT, RESOURCE_PERMISSIONS_CHANGE, RESOURCE_CREATION, GENERIC_EVENT, STATUS_UPDATE ou USER_UNCATEGORIZED. |
| (N/A) | metadata.product_name |
Toujours défini sur "Fireware". |
| (N/A) | metadata.vendor_name |
Toujours défini sur "Watchguard". |
| (N/A) | security_result.action |
Déterminé par la logique de l'analyseur en fonction de disposition. Valeurs possibles : "ALLOW" ou "BLOCK". |
| (N/A) | extensions.auth.type |
Définissez la valeur sur "AUTHTYPE_UNSPECIFIED" pour les événements de connexion/déconnexion des utilisateurs et sur "VPN" pour les événements réseau liés aux VPN. |
| (N/A) | network.application_protocol |
Déterminé par la logique de l'analyseur en fonction de msg_id et event_name. Valeurs possibles : "DNS", "DHCP", "HTTP" ou "HTTPS". |
| (N/A) | network.dns.questions.type |
Définissez cette valeur sur 1 pour les requêtes d'enregistrement "A". |
| (N/A) | target.labels.key |
Définissez cette option sur "Action over resource" (Action sur la ressource) lorsque action est mappé sur target.labels.value. |
| (N/A) | intermediary.labels.key |
Définissez la valeur sur "Nom du membre du pare-feu" lorsque prin_host est mappé sur intermediary.labels.value. |
| (N/A) | intermediary.labels.key |
Définissez cette option sur "Gateway-Endpoint" lorsque endpoint est mappé sur intermediary.labels.value. |
| (N/A) | principal.labels.key |
Définissez la valeur sur "Gateway" (Passerelle) lorsque gateway est mappé sur principal.labels.value. |
| (N/A) | target.labels.key |
Définissez cette option sur "Passerelle" lorsque gateway est mappé sur target.labels.value. |
| (N/A) | principal.labels.key |
Définissez sur "state" lorsque status est mappé sur principal.labels.value. |
| (N/A) | target.labels.key |
Définissez cette option sur "État de la passerelle" lorsque status est mappé sur target.labels.value. |
| (N/A) | additional.fields.key |
Définissez sur "signature_name", "signature_cat", "signature_id" ou "reputation" lorsque les valeurs correspondantes sont mappées à partir du journal brut. |
Journal des modifications
Afficher le journal des modifications de cet analyseur
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.