Accéder aux journaux d'audit de l'utilisation de Gemini Enterprise avec Cloud Logging

Cette page explique comment configurer les journaux d'audit d'utilisation pour Gemini Enterprise et y accéder.

Concepts clés

Cette section présente les concepts clés liés à l'observabilité dans Gemini Enterprise.

Concept Description
Journaux d'audit d'utilisation Les journaux d'audit d'utilisation sont des enregistrements des activités d'administration et des accès dans vos ressources Google Cloud . Ils fournissent des informations détaillées sur qui a effectué quelle action, quand et d'où. Ces journaux sont essentiels pour l'audit de sécurité, la conformité et la compréhension de l'utilisation de vos ressources.

Avant de commencer

Avant de configurer les journaux d'audit, assurez-vous de disposer des éléments suivants :

Informations consignées

Le tableau suivant récapitule les données d'utilisation enregistrées par Gemini Enterprise. Chaque champ est libellé comme suit :

  • Sensible : le champ peut contenir des requêtes, des réponses ou d'autres contenus client. Il n'est consigné que lorsque le paramètre Activer la journalisation des entrées de prompt et des sorties de réponse est activé. Lorsque le paramètre est désactivé, les valeurs de texte sont remplacées par <elided> et les autres valeurs sont omises. Pour en savoir plus, consultez Activer les paramètres d'observabilité.
  • Non sensible : le champ est consigné, que le paramètre soit activé ou non.
  • Partiellement sensibles : seuls les sous-champs listés sont sensibles. Tous les autres sous-champs ne sont pas sensibles.
Chemin d'accès au service Données enregistrées
SearchService.Search

Enregistre les données sur les sources utilisées pour l'ancrage ou comme entrée LLM.

Demande :
  • query (sensible)
  • user_info (partiellement sensible). Seuls les sous-champs suivants sont sensibles :
    • time_zone
    • precise_location

Réponse :
  • attribution_token (non sensible)
  • results.id (non sensible)
AssistantService.Assist

Enregistre la requête et la réponse de l'assistant Gemini Enterprise.

Demande :
  • name (non sensible)
  • query.text (sensible)
  • query.parts (sensible)

Réponse :
  • assist_token (non sensible)
  • answer.name (non sensible)
  • answer.state (non sensible)
  • answer.replies.grounded_content.text (sensible)
  • answer.replies.grounded_content.text_grounding_metadata.segments (sensible)
  • answer.replies.grounded_content.text_grounding_metadata.references (partiellement sensible). Tous les sous-champs sont sensibles, sauf document_metadata.document et document_metadata.uri.
  • answer.skipped_reasons (non sensible)
  • agent_info.agent (non sensible)
  • agent_info.display_name (sensible)
  • agent_info.core_assistant (non sensible)
  • agent_info.agent_kind (non sensible)
  • agent_info.spiffe_id (non sensible)
AssistantService.StreamAssist Demande :
  • name (non sensible)
  • query.text (sensible)
  • query.parts (sensible)
  • agents_spec (partiellement sensible). Seuls les sous-champs suivants sont sensibles :
    • agent_specs.input_variables
    • agent_specs.node_context.node_input
    • agent_specs.node_context.agent_description
    • agent_specs.node_context.node_instruction
    • agent_specs.artifact_spec.tagged_artifact_content

Réponse :
  • assist_token (non sensible)
  • answer.name (non sensible)
  • answer.state (non sensible)
  • answer.replies.grounded_content.text (sensible)
  • answer.replies.grounded_content.text_grounding_metadata.segments (sensible)
  • answer.replies.grounded_content.text_grounding_metadata.references (partiellement sensible). Tous les sous-champs sont sensibles, sauf document_metadata.document et document_metadata.uri.
  • answer.skipped_reasons (non sensible)
  • agent_info.agent (non sensible)
  • agent_info.display_name (sensible)
  • agent_info.core_assistant (non sensible)
  • agent_info.agent_kind (non sensible)
  • agent_info.spiffe_id (non sensible)
  • model_info.model (non sensible)
  • model_info.requested_model (non sensible)
  • model_info.model_selection_mode (non sensible)

model_info.model est le modèle que l'assistant a exécuté pour le tour. Lorsque la requête n'épingle pas de modèle, model_selection_mode est MODEL_SELECTION_MODE_AUTO et requested_model est vide. Lorsque la requête en épingle un, model_selection_mode est MODEL_SELECTION_MODE_EXPLICIT et requested_model contient le modèle demandé.

Un tour peut être transféré à un agent spécialisé qui exécute un modèle différent. model_info.model ne signale pas le modèle de cet agent, et un tour qui effectue tout son travail dans un tel agent laisse model_info.model vide.

ConversationSearchService.AnswerQuery Demande :
  • serving_config (non sensible)
  • query.query_id (non sensible)
  • query.text (sensible)
  • session (non sensible)
  • user_pseudo_id (non sensible)
  • end_user_spec (partiellement sensible). Seuls les sous-champs suivants sont sensibles :
    • end_user_metadata.chunk_info.content
    • end_user_metadata.chunk_info.document_metadata.title
  • answer_generation_spec.model_spec.model_version (non sensible)
  • answer_generation_spec.prompt_spec.preamble (sensible)
  • answer_generation_spec.include_citations (non sensible)
  • answer_generation_spec.answer_language_code (sensible)
  • answer_generation_spec.ignore_adversarial_query (non sensible)
  • answer_generation_spec.ignore_non_answer_seeking_query (non sensible)
  • answer_generation_spec.ignore_jail_breaking_query (non sensible)

Réponse :
  • answer (partiellement sensible). Seuls les sous-champs suivants sont sensibles :
    • answer_text
    • grounding_supports
    • references
    • blob_attachments
    • steps.actions
  • answer_query_token (non sensible)
EngineService.CreateEngine Demande :
  • engine_id (non sensible)
  • engine.name (non sensible)
  • engine.create_time (non sensible)
  • engine.display_name (non sensible)
  • engine.update_time (non sensible)
  • engine.data_store_ids (non sensible)
  • engine.data_stores (non sensible)

Réponse :
  • engine_id (non sensible)
  • engine.name (non sensible)
  • engine.create_time (non sensible)
  • engine.display_name (non sensible)
  • engine.update_time (non sensible)
  • engine.data_store_ids (non sensible)
  • engine.data_stores (non sensible)
EngineService.UpdateEngine Demande :
  • engine.name (non sensible)
  • engine.create_time (non sensible)
  • engine.display_name (non sensible)
  • engine.update_time (non sensible)
  • engine.data_store_ids (non sensible)
  • engine.data_stores (non sensible)
  • update_mask (non sensible)

Réponse :
  • engine.name (non sensible)
  • engine.create_time (non sensible)
  • engine.display_name (non sensible)
  • engine.update_time (non sensible)
  • engine.data_store_ids (non sensible)
  • engine.data_stores (non sensible)
AgentService.SetIamPolicy Demande :
  • policy.bindings.roles (non sensible)
  • policy.bindings.members (non sensible)

Réponse :
  • policy.bindings.roles (non sensible)
  • policy.bindings.members (non sensible)
AgentService.CreateAgent Demande :
  • parent (non sensible)
  • agent_id (non sensible)
  • agent.name (non sensible)
  • agent.display_name (sensible)
  • agent.create_time (non sensible)
  • agent.update_time (non sensible)
  • agent.definition_case (non sensible)

Réponse :
  • agent.name (non sensible)
  • agent.display_name (sensible)
  • agent.create_time (non sensible)
  • agent.update_time (non sensible)
  • agent.definition_case (non sensible)
AgentService.UpdateAgent Demande :
  • agent.name (non sensible)
  • agent.display_name (sensible)
  • agent.create_time (non sensible)
  • agent.update_time (non sensible)
  • agent.definition_case (non sensible)
  • update_mask (non sensible)

Réponse :
  • agent.name (non sensible)
  • agent.display_name (sensible)
  • agent.create_time (non sensible)
  • agent.update_time (non sensible)
  • agent.definition_case (non sensible)
AgentService.DeleteAgent Demande :
  • name (non sensible)

Réponse :
  • Aucun champ n'est consigné
GroundedGenerationService.GenerateGroundedContent Demande :
  • contents (sensible)
  • location (non sensible)
  • generation_spec (partiellement sensible). Seuls les sous-champs suivants sont sensibles :
    • language_code
  • system_instruction (sensible)
  • safety_settings (non sensible)
  • user_labels (sensible)
  • grounding_spec.explicit_search_queries (sensible)
  • grounding_spec.grounding_sources (partiellement sensible). Seuls les sous-champs suivants sont sensibles :
    • inline_source
    • search_source.filter
    • api_source.manifest.api_spec.open_api_yaml
    • elastic_source.search_template
    • elastic_source.num_hits
    • parallel_ai_source.custom_configs
    • exa_ai_source.custom_configs

Réponse :
  • content (sensible)
  • grounding_metadata (partiellement sensible). Seuls les sous-champs suivants sont sensibles :
    • support_chunks, sauf source et index
    • google_maps_support_chunks, sauf source et index
    • api_calls.request_payload
    • api_calls.response_body
    • api_calls.uri
  • grounding_score (non sensible)
DataConnectorService.UpdateDataConnector Demande :
  • data_connector.name (non sensible)
  • data_connector.create_time (non sensible)
  • data_connector.update_time (non sensible)
  • data_connector.data_source (non sensible)
  • data_connector.refresh_interval (non sensible)
  • data_connector.bap_config (non sensible)

Réponse :
  • data_connector.name (non sensible)
  • data_connector.create_time (non sensible)
  • data_connector.update_time (non sensible)
  • data_connector.data_source (non sensible)
  • data_connector.refresh_interval (non sensible)
  • data_connector.bap_config (non sensible)
AssistantService.AddContextFile Demande :
  • name (non sensible)
  • file_name (sensible)

Réponse :
  • session (non sensible)
  • file_id (non sensible)
AssistantService.UploadSessionFile Demande :
  • name (non sensible)
  • blob.filename (sensible)

Réponse :
  • file_id (non sensible)
UserEventService.WriteUserEvent Demande :
  • Tous les champs du corps de la requête (partiellement sensibles). Seuls les sous-champs suivants sont sensibles :
    • user_event.user_info.time_zone
    • user_event.user_info.precise_location
    • user_event.filter
    • user_event.attributes
    • user_event.panel.documents
    • user_event.panels.documents
    • user_event.search_info.search_query
    • user_event.completion_info.selected_suggestion
    • user_event.feedback.comment
    • user_event.feedback.conversation_info.query

Réponse :
  • Aucun champ n'est consigné

Accéder aux journaux d'audit d'utilisation

Pour accéder à tous les journaux d'audit sur l'utilisation de Gemini Enterprise et les consulter :

  1. Dans la console Google Cloud , accédez à la page Explorateur de journaux.

    Accéder à l'explorateur de journaux

  2. Sélectionnez le projet Google Cloud pour lequel vous avez activé la journalisation d'audit.

  3. Pour n'afficher que les journaux Gemini Enterprise, saisissez la requête suivante dans le champ de l'éditeur de requête, puis cliquez sur Exécuter la requête :

      logName="projects/PROJECT_ID/logs/discoveryengine.googleapis.com%2Fgemini_enterprise_user_activity" OR logName=~"projects/PROJECT_ID/logs/discoveryengine.googleapis.com%2Fgen_ai.*"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : par l'ID du projet.

Contrôler l'accès aux journaux

Vous pouvez contrôler l'accès aux journaux dans Cloud Logging. Pour obtenir des conseils détaillés sur les méthodes de contrôle des accès, y compris sur l'utilisation des conditions IAM pour un accès précis, consultez Contrôle des accès avec IAM.

Contrôle des accès par défaut

Par défaut, Gemini Enterprise envoie les données Cloud Logging au bucket _Default. Les rôles IAM suivants contrôlent l'accès à ce bucket :

Contrôle précis des accès

Si votre projet contient des journaux avec différents niveaux de sensibilité, vous pouvez utiliser plusieurs Google Cloud et outils Cloud Logging pour configurer un contrôle des accès plus précis.

Vous pouvez configurer un contrôle précis des accès à l'aide des options suivantes :

Option Description
Conditions IAM Configurez un contrôle des accès précis à l'aide des conditions IAM. Pour en savoir plus, consultez Rôles de journalisation.
Vues de journaux Utilisez des vues de journaux pour limiter l'accès des utilisateurs à un sous-ensemble de journaux dans un bucket de journaux. Pour en savoir plus, consultez Configurer des vues de journaux dans un bucket de journaux.
Récepteurs de journaux Utilisez des récepteurs de journaux pour acheminer les journaux sensibles vers un projet distinct avec un accès IAM plus restrictif. Pour en savoir plus, consultez Acheminer les journaux vers des destinations compatibles.
Tags Utilisez des tags pour gérer l'accès IAM à des buckets de journaux individuels dans un projet. Pour en savoir plus, consultez Utiliser des tags pour gérer l'accès aux buckets de journaux.
Contrôle des accès au niveau des champs Utilisez le contrôle des accès au niveau des champs pour masquer ou restreindre l'accès à des champs spécifiques dans les entrées de journal. Pour en savoir plus, consultez Configurer l'accès au niveau des champs.

Étapes suivantes