Collecter les journaux VMware vRealize

Compatible avec :

Ce document explique comment ingérer les journaux de la suite VMware Aria (anciennement VMware vRealize) dans Google Security Operations à l'aide de Bindplane. L'analyseur extrait les champs des messages syslog à l'aide de modèles Grok basés sur le champ msg_type. Il mappe ensuite ces champs extraits au modèle de données unifié, en gérant différents formats de journaux et en enrichissant les données avec un contexte supplémentaire, comme des informations sur le réseau, des détails sur les utilisateurs et des attributs de ressources.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Instance Google SecOps
  • Windows 2016 ou version ultérieure, ou un hôte Linux avec systemd
  • Si vous exécutez le programme derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
  • Accès privilégié au logiciel VMware Aria Suite

Obtenir le fichier d'authentification d'ingestion Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion. Enregistrez le fichier de manière sécurisée sur le système sur lequel Bindplane sera installé.

Obtenir l'ID client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Profil.
  3. Copiez et enregistrez le numéro client de la section Informations sur 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 fenêtres

  1. Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
  2. Exécutez la commande suivante :

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Installation de Linux

  1. Ouvrez un terminal avec les droits root ou sudo.
  2. 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 plus d'options d'installation, consultez le guide d'installation.

Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps

  1. Accédez au fichier de configuration :
    • Trouvez le fichier config.yaml. En règle générale, il se trouve dans le répertoire /etc/bindplane-agent/ sous Linux ou dans le répertoire d'installation sous Windows.
    • Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple, nano, vi ou le Bloc-notes).
  2. Modifiez le fichier config.yaml comme suit :

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:514"
    
    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: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            log_type: 'VMWARE_VREALIZE'
            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 <customer_id> par le numéro client réel.
    • Mettez à jour /path/to/ingestion-authentication-file.json en indiquant le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification pour l'ingestion Google SecOps.

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 bindplane-agent
    
  • Pour redémarrer l'agent Bindplane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante :

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurer Syslog pour VMware Aria Suite

  1. Connectez-vous à l'interface utilisateur Web de VMware Aria Suite.
  2. Accédez à Gestion > Transfert d'événements.
  3. Cliquez sur Nouvelle destination.
  4. Fournissez les informations de configuration suivantes :
    • Nom : saisissez un nom unique pour identifier le serveur.
    • Hôte : saisissez l'adresse IP de l'agent Bindplane.
    • Protocole : sélectionnez Syslog.
    • Transport : sélectionnez UDP ou TCP, en fonction de la configuration réelle de votre agent Bindplane.
    • Port : saisissez le numéro de port de l'agent Bindplane.
  5. Cliquez sur Test.
  6. Cliquez sur Enregistrer.

Table de mappage UDM

Champ de journal Mappage UDM Logique
actorDomain principal.hostname La valeur de actorDomain du journal brut est mappée au champ UDM.
actorId principal.resource.attribute.labels.key La chaîne "actorId" est attribuée à la clé.
actorId principal.resource.attribute.labels.value La valeur de actorId du journal brut est attribuée à la valeur.
actorId additional.fields.key La chaîne "actorId" est attribuée à la clé.
actorId additional.fields.value.string_value La valeur de actorId du journal brut est attribuée à la valeur.
actorUserName principal.user.userid La valeur de actorUserName du journal brut est mappée au champ UDM.
actorUuid principal.resource.attribute.labels.key La chaîne "actorUuid" est attribuée à la clé.
actorUuid principal.resource.attribute.labels.value La valeur de actorUuid du journal brut est attribuée à la valeur.
actorUuid additional.fields.key La chaîne "actorUuid" est attribuée à la clé.
actorUuid additional.fields.value.string_value La valeur de actorUuid du journal brut est attribuée à la valeur.
all_request_headers.sec-ch-ua-platform principal.platform La valeur est dérivée de all_request_headers.sec-ch-ua-platform. Si elle contient "win" ou "windows" (sans tenir compte de la casse), la valeur est "WINDOWS". Si elle contient "Mac" (sans tenir compte de la casse), la valeur est "MAC". Si elle contient "lin" ou "linux" (sans tenir compte de la casse), la valeur est "LINUX".
all_request_headers.X-Requested-With network.application_protocol Si la valeur contient "http" (sans tenir compte de la casse), elle est définie sur "HTTP".
automation_tag metadata.product_event_type La valeur de automation_tag du journal brut est mappée au champ UDM.
client_ip principal.ip La valeur de client_ip du journal brut est mappée au champ UDM.
client_src_port principal.port La valeur de client_src_port du journal brut est mappée au champ UDM.
comp about.resource.attribute.labels.key La chaîne "Component" est attribuée à la clé.
comp about.resource.attribute.labels.value La valeur de comp du journal brut est attribuée à la valeur.
compression additional.fields.key La chaîne "compression" est attribuée à la clé.
compression additional.fields.value.string_value La valeur de compression du journal brut est attribuée à la valeur.
data about.resource.attribute.labels.key La logique dépend de msg_type. Si msg_type est "Vpxa", "Hostd" ou "VSANMGMTSVC", le champ data est analysé à l'aide de paires clé-valeur, et des clés spécifiques (comme opID, sub) sont mappées sur about.resource.attribute.labels. Si msg_type est défini sur "SWITCHING", "FABRIC", "MONITORING", "SYSTEM", "ROUTING", "LOAD", "nsx", "nestdb", "cfgAgent", "NSX" ou "NSXV", le champ data est analysé pour rechercher des clés telles que comp, subcomp et s2comp, qui sont ensuite mappées sur about.resource.attribute.labels.
data about.resource.attribute.labels.value Consultez la logique pour about.resource.attribute.labels.key.
data security_result.description Si msg_type est "Vpxa", "Hostd" ou "VSANMGMTSVC", et qu'après l'analyse de data pour les paires clé-valeur, un champ msg existe, sa valeur est attribuée à security_result.description.
description security_result.description Si le champ description existe dans le journal brut, sa valeur est mappée au champ UDM.
deviceId principal.resource.attribute.labels.key La chaîne "deviceType" est attribuée à la clé.
deviceId principal.resource.attribute.labels.value La valeur de values.deviceType du journal brut est attribuée à la valeur.
deviceId additional.fields.key La chaîne "deviceType" est attribuée à la clé.
deviceId additional.fields.value.string_value La valeur de values.deviceType du journal brut est attribuée à la valeur.
direction network.direction Si la valeur est "OUT", elle est associée à "OUTBOUND". Si la valeur est "IN", elle est mappée sur "INBOUND".
dst_ip target.ip La valeur de dst_ip du journal brut est mappée au champ UDM.
dst_port target.port La valeur de dst_port du journal brut est mappée au champ UDM.
event_source principal.url La valeur de event_source du journal brut est mappée au champ UDM.
headers_received_from_server.Access-Control-Allow-Origin target.resource.attribute.labels.key La chaîne "headers_received_from_server.Access-Control-Allow-Origin" est attribuée à la clé.
headers_received_from_server.Access-Control-Allow-Origin target.resource.attribute.labels.value La valeur de headers_received_from_server.Access-Control-Allow-Origin du journal brut est attribuée à la valeur.
headers_received_from_server.Content-Security-Policy principal.resource.attribute.labels.key La chaîne "headers_received_from_server.Content-Security-Policy" est attribuée à la clé.
headers_received_from_server.Content-Security-Policy principal.resource.attribute.labels.value La valeur de headers_received_from_server.Content-Security-Policy du journal brut est attribuée à la valeur.
headers_received_from_server.Cookie target.resource.attribute.labels.key La chaîne "headers_received_from_server.Cookie" est attribuée à la clé.
headers_received_from_server.Cookie target.resource.attribute.labels.value La valeur de headers_sent_to_server.Cookie du journal brut est attribuée à la valeur.
headers_received_from_server.set-cookie target.resource.attribute.labels.key La chaîne "headers_received_from_server.set-cookie" est attribuée à la clé.
headers_received_from_server.set-cookie target.resource.attribute.labels.value La valeur de headers_received_from_server.set-cookie du journal brut est attribuée à la valeur.
headers_sent_to_server.sec-ch-ua principal.resource.attribute.labels.key La chaîne "headers_sent_to_server.sec-ch-ua" est attribuée à la clé.
headers_sent_to_server.sec-ch-ua principal.resource.attribute.labels.value La valeur de headers_sent_to_server.sec-ch-ua du journal brut est attribuée à la valeur.
headers_sent_to_server.X-CSRF-TOKEN principal.resource.attribute.labels.key La chaîne "headers_sent_to_server.X-CSRF-TOKEN" est attribuée à la clé.
headers_sent_to_server.X-CSRF-TOKEN principal.resource.attribute.labels.value La valeur de headers_sent_to_server.X-CSRF-TOKEN du journal brut est attribuée à la valeur.
hostname principal.hostname La valeur de hostname du journal brut est mappée au champ UDM.
hostname intermediary.hostname La valeur de hostname du journal brut est mappée au champ UDM.
host principal.hostname La valeur de host du journal brut est mappée au champ UDM.
isLocal additional.fields.key La chaîne "isLocal" est attribuée à la clé.
isLocal additional.fields.value.string_value La valeur de isLocal du journal brut est attribuée à la valeur.
json_data Différents champs dans principal, target, additional et security_result Le champ json_data du journal brut est analysé au format JSON, et les champs extraits sont mappés à différents champs UDM en fonction de leurs noms et de la logique de l'analyseur. Cela inclut les champs uuid, tenantId, actorId, actorUserName, actorDomain, sourceIp, objectName, objectType, objectId, values.resourceType, values.success et d'autres.
kv_data Différents champs Le champ kv_data est analysé en tant que paires clé/valeur, et les champs extraits sont mappés à différents champs UDM en fonction de leurs noms et de la logique de l'analyseur.
level security_result.severity Si la valeur est "info" (non sensible à la casse), elle est mappée sur "INFORMATIONAL".
log_id metadata.product_log_id La valeur de log_id du journal brut est mappée au champ UDM.
message Différents champs Le champ message est la principale source de données. Il est analysé de manière approfondie à l'aide de modèles grok pour extraire différents champs tels que ts, hostname, msg_type, sub_msg, etc. Ces champs extraits sont ensuite utilisés pour remplir différents champs UDM en fonction de la logique de l'analyseur.
method network.http.method La valeur de method du journal brut est mappée au champ UDM.
msg security_result.description Si msg_type est "Vpxa", "Hostd", "VSANMGMTSVC", "SWITCHING", "FABRIC", "ROUTING", "LOAD-BALANCER", "nsx", "nestdb", "cfgAgent", "NSX", "NSXV" ou "Rhttpproxy", et après toute analyse grok pertinente, si le champ msg existe, sa valeur est attribuée à security_result.description. Il existe des cas particuliers dans cette logique pour certains contenus de messages, comme "keepalive connection" (connexion keep-alive).
msg_type metadata.product_event_type Si msg_type est "FIREWALL_PKTLOG" ou "FIREWALL-PKTLOG", sa valeur est mappée au champ UDM.
msg_type event_type La valeur de event_type est déterminée en fonction de msg_type. Si msg_type est "FIREWALL_PKTLOG" ou "FIREWALL-PKTLOG", event_type est "NETWORK_CONNECTION". Si msg_type est "Vpxa", "Hostd", "VSANMGMTSVC", "nsx", "LOAD", "ROUTING", "SWITCHING", "FABRIC", "MONITORING", "SYSTEM", "nestdb", "cfgAgent", "NSX", "NSXV", "Rhttpproxy", "audispd" ou "vsantraceUrgent", event_type est "GENERIC_EVENT". Si msg_type est défini sur "queries" ou "responses", event_type est défini sur "NETWORK_DNS". Si msg_type est "sudo", event_type est "STATUS_UPDATE". Si le champ description contient "cmmdsTimeMachineDump", event_type est défini sur "GENERIC_EVENT". Si le champ description contient "prodjbossapp", event_type est défini sur "GENERIC_EVENT". Si le champ description contient "liagent@6876", event_type est défini sur "GENERIC_EVENT". Si aucune des conditions ci-dessus n'est remplie et que le champ description n'est pas vide, event_type est défini sur "GENERIC_EVENT". Si src_ip et dst_ip sont tous les deux présents, event_type est défini sur "NETWORK_CONNECTION". Si src_ip, dst_ip ou hostname est présent, event_type est défini sur "STATUS_UPDATE". Si has_principal_ip est "true" et has_target_ip est "true", event_type est "SCAN_UNCATEGORIZED". Si has_principal_ip est "true" ou si has_principal_host est "true", event_type est "STATUS_UPDATE". Si aucune des conditions ci-dessus n'est remplie, event_type est défini sur "GENERIC_EVENT".
objectName target.resource.attribute.labels.key La chaîne "objectName" est attribuée à la clé.
objectName target.resource.attribute.labels.value La valeur de objectName du journal brut est attribuée à la valeur.
objectName additional.fields.key La chaîne "objectName" est attribuée à la clé.
objectName additional.fields.value.string_value La valeur de objectName du journal brut est attribuée à la valeur.
objectId target.resource.attribute.labels.key La chaîne "objectId" est attribuée à la clé.
objectId target.resource.attribute.labels.value La valeur de objectId du journal brut est attribuée à la valeur.
objectId additional.fields.key La chaîne "objectId" est attribuée à la clé.
objectId additional.fields.value.string_value La valeur de objectId du journal brut est attribuée à la valeur.
objectType target.resource.attribute.labels.key La chaîne "objectType" est attribuée à la clé.
objectType target.resource.attribute.labels.value La valeur de objectType du journal brut est attribuée à la valeur.
objectType additional.fields.key La chaîne "objectType" est attribuée à la clé.
objectType additional.fields.value.string_value La valeur de objectType du journal brut est attribuée à la valeur.
objectType security_result.description Si objectType est défini sur "LAUNCH" et que success n'est pas défini sur "true", la description est "La tentative de lancement de l'application a réussi". Si objectType est défini sur "LAUNCH_ERROR" et que success n'est pas défini sur "true", la description est "L'utilisateur a lancé une application avec une requête non valide".
opID about.resource.attribute.labels.key La chaîne "opId" est attribuée à la clé.
opID about.resource.attribute.labels.value La valeur de opID du journal brut est attribuée à la valeur.
pool additional.fields.key La chaîne "pool" est attribuée à la clé.
pool additional.fields.value.string_value La valeur de pool du journal brut est attribuée à la valeur.
pool_name additional.fields.key La chaîne "pool_name" est attribuée à la clé.
pool_name additional.fields.value.string_value La valeur de pool_name du journal brut est attribuée à la valeur.
protocol network.ip_protocol La valeur de protocol du journal brut est convertie en majuscules et mappée au champ UDM. Si la valeur est "PROTO", elle n'est pas mappée.
protocol additional.fields.key Si la valeur de protocol est "PROTO", la chaîne "ip_protocol" est attribuée à la clé.
protocol additional.fields.value.string_value Si la valeur de protocol est "PROTO", la valeur de protocol du journal brut est attribuée à la valeur.
query_data network.dns.questions.name Le champ query_data est analysé pour extraire le question_name, qui est ensuite mappé au champ UDM.
query_data network.dns.questions.type Le champ query_data est analysé pour extraire le query_type, qui est ensuite mappé au champ UDM à l'aide d'une recherche incluse dans "dns_record_type.include".
query_data network.dns.questions.class Le champ query_data est analysé pour extraire le dns_class, qui est ensuite mappé au champ UDM à l'aide d'une recherche incluse dans "dns_query_class_mapping.include".
referer principal.url La valeur de referer du journal brut est mappée au champ UDM.
request_content_type additional.fields.key La chaîne "request_content_type" est attribuée à la clé.
request_content_type additional.fields.value.string_value La valeur de request_content_type du journal brut est attribuée à la valeur.
request_state additional.fields.key La chaîne "request_state" est attribuée à la clé.
request_state additional.fields.value.string_value La valeur de request_state du journal brut est attribuée à la valeur.
response_code network.http.response_code La valeur response_code ou server_response_code du journal brut est mappée au champ UDM.
response_content_type additional.fields.key La chaîne "response_content_type" est attribuée à la clé.
response_content_type additional.fields.value.string_value La valeur de response_content_type du journal brut est attribuée à la valeur.
rule_id security_result.rule_id La valeur de rule_id du journal brut est mappée au champ UDM.
s2comp about.resource.attribute.labels.key La chaîne "S2-Component" est attribuée à la clé.
s2comp about.resource.attribute.labels.value La valeur de s2comp du journal brut est attribuée à la valeur.
server_ip target.ip La valeur de server_ip du journal brut est mappée au champ UDM.
server_name target.hostname La valeur de server_name du journal brut est mappée au champ UDM.
server_response_code network.http.response_code Consultez la logique pour response_code.
server_src_port target.port La valeur de server_src_port du journal brut est mappée au champ UDM.
service_engine additional.fields.key La chaîne "service_engine" est attribuée à la clé.
service_engine additional.fields.value.string_value La valeur de service_engine du journal brut est attribuée à la valeur.
sourceIp principal.ip La valeur de sourceIp du journal brut est mappée au champ UDM.
ssl_cipher network.tls.cipher La valeur de ssl_cipher du journal brut est mappée au champ UDM.
ssl_session_id network.session_id La valeur de ssl_session_id du journal brut est mappée au champ UDM.
ssl_version network.tls.version_protocol La valeur de ssl_version du journal brut est mappée au champ UDM.
sub about.resource.attribute.labels.key La chaîne "Sub Component" est attribuée à la clé.
sub about.resource.attribute.labels.value La valeur de sub du journal brut est attribuée à la valeur.
subClusterUuid additional.fields.key La chaîne "subClusterUuid" est attribuée à la clé.
subClusterUuid additional.fields.value.string_value La valeur de subClusterUuid du journal brut est attribuée à la valeur.
sub_msg Différents champs dans principal, target, network, security_result et about Le champ sub_msg est analysé différemment en fonction de msg_type. Il peut être analysé en tant que JSON, à l'aide de modèles grok ou à l'aide de paires clé/valeur. Les champs extraits sont ensuite mappés à différents champs UDM en fonction de leurs noms et de la logique de l'analyseur. Cela inclut les champs ip_type, action, rule_id, direction, protocol, tcp_flag, src_ip, src_port, dst_ip, dst_port, data, msg et d'autres.
subcomp about.resource.attribute.labels.key La chaîne "Sub Component" est attribuée à la clé.
subcomp about.resource.attribute.labels.value La valeur de subcomp du journal brut est attribuée à la valeur.
tenantId principal.resource.attribute.labels.key La chaîne "tenantId" est attribuée à la clé.
tenantId principal.resource.attribute.labels.value La valeur de tenantId du journal brut est attribuée à la valeur.
tenantId additional.fields.key La chaîne "tenantId" est attribuée à la clé.
tenantId additional.fields.value.string_value La valeur de tenantId du journal brut est attribuée à la valeur.
ts metadata.event_timestamp La valeur de ts du journal brut est analysée en tant qu'horodatage et mappée au champ UDM.
ts timestamp La valeur de ts du journal brut est analysée en tant qu'horodatage et mappée au champ UDM.
updateType additional.fields.key La chaîne "updateType" est attribuée à la clé.
updateType additional.fields.value.string_value La valeur de updateType du journal brut est attribuée à la valeur.
uri_path network.http.referral_url La valeur de uri_path du journal brut est mappée au champ UDM.
user_agent network.http.user_agent La valeur de user_agent du journal brut est mappée au champ UDM.
user_agent network.http.parsed_user_agent La valeur de user_agent du journal brut est analysée en tant que chaîne d'agent utilisateur et mappée au champ UDM.
USER principal.user.user_display_name La valeur de USER du journal brut est mappée au champ UDM.
values.actorExternalId principal.resource.attribute.labels.key La chaîne "actorExternalId" est attribuée à la clé.
values.actorExternalId principal.resource.attribute.labels.value La valeur de values.actorExternalId du journal brut est attribuée à la valeur.
values.actorExternalId additional.fields.key La chaîne "actorExternalId" est attribuée à la clé.
values.actorExternalId additional.fields.value.string_value La valeur de values.actorExternalId du journal brut est attribuée à la valeur.
values.deviceType principal.resource.attribute.labels.key La chaîne "deviceType" est attribuée à la clé.
values.deviceType principal.resource.attribute.labels.value La valeur de values.deviceType du journal brut est attribuée à la valeur.
values.deviceType additional.fields.key La chaîne "deviceType" est attribuée à la clé.
values.deviceType additional.fields.value.string_value La valeur de values.deviceType du journal brut est attribuée à la valeur.
values.resourceType principal.resource.resource_subtype La valeur de values.resourceType du journal brut est mappée au champ UDM. La valeur de principal.resource.type est définie sur "VIRTUAL_MACHINE".
values.success security_result.action Si la valeur est "true" (non sensible à la casse), elle est mappée sur "ALLOW". Si la valeur est "false" (non sensible à la casse), elle est mappée sur "BLOCK".
virtualservice additional.fields.key La chaîne "virtualservice" est attribuée à la clé.
virtualservice additional.fields.value.string_value La valeur de virtualservice du journal brut est attribuée à la valeur.
vmw_vr_ops_appname about.resource.attribute.labels.key La chaîne "Ops AppName" est attribuée à la clé.
vmw_vr_ops_appname about.resource.attribute.labels.value La valeur de vmw_vr_ops_appname du journal brut est attribuée à la valeur.
vmw_vr_ops_clustername about.resource.attribute.labels.key La chaîne "Ops ClusterName" est attribuée à la clé.
vmw_vr_ops_clustername about.resource.attribute.labels.value La valeur de vmw_vr_ops_clustername du journal brut est attribuée à la valeur.
vmw_vr_ops_logtype about.resource.attribute.labels.key La chaîne "Ops Logtype" est attribuée à la clé.
vmw_vr_ops_logtype about.resource.attribute.labels.value La valeur de vmw_vr_ops_logtype du journal brut est attribuée à la valeur.
vmw_vr_ops_nodename about.resource.attribute.labels.key La chaîne "Ops NodeName" est attribuée à la clé.
vmw_vr_ops_nodename about.resource.attribute.labels.value La valeur de vmw_vr_ops_nodename du journal brut est attribuée à la valeur.
vs_name additional.fields.key La chaîne "vs_name" est attribuée à la clé.
vs_name additional.fields.value.string_value La valeur de vs_name du journal brut est attribuée à la valeur. La chaîne "VMWARE" est attribuée. La chaîne "VMWARE_VREALIZE" est attribuée. La chaîne "VMWARE_VREALIZE" est attribuée.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.