Cloud Logging で Gemini Enterprise の使用状況監査ログにアクセスする

このページでは、Gemini Enterprise の使用状況の監査ログを設定してアクセスする方法について説明します。

主なコンセプト

このセクションでは、Gemini Enterprise のオブザーバビリティに関連する主なコンセプトについて説明します。

コンセプト 説明
使用状況の監査ログ 使用状況の監査ログは、 Google Cloud リソース内の管理アクティビティとアクセスを記録したものです。これらのログには、誰が、いつ、どこから、どのような操作を行ったかに関する詳細な情報が記録されます。これらのログは、セキュリティ監査、コンプライアンス、リソースの使用状況の把握に不可欠です。

始める前に

監査ログを構成する前に、次のことを確認してください。

ログに記録される情報

次の表に、Gemini Enterprise によってロギングされる使用状況データの概要を示します。各フィールドには次のラベルが付けられています。

  • 機密情報: フィールドには、プロンプト、レスポンス、その他の顧客コンテンツを含めることができます。このログは、[プロンプト入力とレスポンス出力のロギングを有効化] 設定がオンになっている場合にのみ記録されます。この設定がオフの場合、テキスト値は <elided> に置き換えられ、他の値は省略されます。詳細については、オブザーバビリティ設定を有効にするをご覧ください。
  • 機密情報ではない: 設定がオンになっているかどうかに関係なく、フィールドがログに記録されます。
  • 部分的に機密情報: リストされているサブフィールドのみが機密情報です。他のサブフィールドはすべて機密情報ではありません。
サービスパス ログデータ
SearchService.Search

グラウンディングまたは LLM 入力に使用されるソースのデータをログに記録します。

リクエスト:
  • query(機密情報)
  • user_info(部分的に機密情報)。次のサブフィールドのみが機密情報です。
    • time_zone
    • precise_location

レスポンス:
  • attribution_token(機密情報ではない)
  • results.id(機密情報ではない)
AssistantService.Assist

Gemini Enterprise アシスタントからのリクエストとレスポンスをログに記録します。

リクエスト:
  • name(機密情報ではない)
  • query.text(機密情報)
  • query.parts(機密情報)

レスポンス:
  • assist_token(機密情報ではない)
  • answer.name(機密情報ではない)
  • answer.state(機密情報ではない)
  • answer.replies.grounded_content.text(機密情報)
  • answer.replies.grounded_content.text_grounding_metadata.segments(機密情報)
  • answer.replies.grounded_content.text_grounding_metadata.references(部分的に機密情報)。document_metadata.document と document_metadata.uri を除くすべてのサブフィールドは機密情報です。
  • answer.skipped_reasons(機密情報ではない)
  • agent_info.agent(機密情報ではない)
  • agent_info.display_name(機密情報)
  • agent_info.core_assistant(機密情報ではない)
  • agent_info.agent_kind(機密情報ではない)
  • agent_info.spiffe_id(機密情報ではない)
AssistantService.StreamAssist リクエスト:
  • name(機密情報ではない)
  • query.text(機密情報)
  • query.parts(機密情報)
  • agents_spec(部分的に機密情報)。次のサブフィールドのみが機密情報です。
    • 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

レスポンス:
  • assist_token(機密情報ではない)
  • answer.name(機密情報ではない)
  • answer.state(機密情報ではない)
  • answer.replies.grounded_content.text(機密情報)
  • answer.replies.grounded_content.text_grounding_metadata.segments(機密情報)
  • answer.replies.grounded_content.text_grounding_metadata.references(部分的に機密情報)。document_metadata.document と document_metadata.uri を除くすべてのサブフィールドは機密情報です。
  • answer.skipped_reasons(機密情報ではない)
  • agent_info.agent(機密情報ではない)
  • agent_info.display_name(機密情報)
  • agent_info.core_assistant(機密情報ではない)
  • agent_info.agent_kind(機密情報ではない)
  • agent_info.spiffe_id(機密情報ではない)
  • model_info.model(機密情報ではない)
  • model_info.requested_model(機密情報ではない)
  • model_info.model_selection_mode(機密情報ではない)

model_info.model は、アシスタントがターンで実行したモデルです。リクエストでモデルが固定されていない場合、model_selection_mode は MODEL_SELECTION_MODE_AUTO で、requested_model は空です。リクエストでモデルが固定されている場合、model_selection_mode は MODEL_SELECTION_MODE_EXPLICIT で、requested_model にはリクエストされたモデルが保持されます。

ターンは、別のモデルを実行する専門のエージェントに引き継ぐことができます。model_info.model は、そのエージェントのモデルを報告しません。このようなエージェントですべての作業を行うターンでは、model_info.model は空になります。

ConversationSearchService.AnswerQuery リクエスト:
  • serving_config(機密情報ではない)
  • query.query_id(機密情報ではない)
  • query.text(機密情報)
  • session(機密情報ではない)
  • user_pseudo_id(機密情報ではない)
  • end_user_spec(部分的に機密情報)。次のサブフィールドのみが機密情報です。
    • end_user_metadata.chunk_info.content
    • end_user_metadata.chunk_info.document_metadata.title
  • answer_generation_spec.model_spec.model_version(機密情報ではない)
  • answer_generation_spec.prompt_spec.preamble(機密情報)
  • answer_generation_spec.include_citations(機密情報ではない)
  • answer_generation_spec.answer_language_code(機密情報)
  • answer_generation_spec.ignore_adversarial_query(機密情報ではない)
  • answer_generation_spec.ignore_non_answer_seeking_query(機密情報ではない)
  • answer_generation_spec.ignore_jail_breaking_query(機密情報ではない)

レスポンス:
  • answer(部分的に機密情報)。次のサブフィールドのみが機密情報です。
    • answer_text
    • grounding_supports
    • references
    • blob_attachments
    • steps.actions
  • answer_query_token(機密情報ではない)
EngineService.CreateEngine リクエスト:
  • engine_id(機密情報ではない)
  • engine.name(機密情報ではない)
  • engine.create_time(機密情報ではない)
  • engine.display_name(機密情報ではない)
  • engine.update_time(機密情報ではない)
  • engine.data_store_ids(機密情報ではない)
  • engine.data_stores(機密情報ではない)

レスポンス:
  • engine_id(機密情報ではない)
  • engine.name(機密情報ではない)
  • engine.create_time(機密情報ではない)
  • engine.display_name(機密情報ではない)
  • engine.update_time(機密情報ではない)
  • engine.data_store_ids(機密情報ではない)
  • engine.data_stores(機密情報ではない)
EngineService.UpdateEngine リクエスト:
  • engine.name(機密情報ではない)
  • engine.create_time(機密情報ではない)
  • engine.display_name(機密情報ではない)
  • engine.update_time(機密情報ではない)
  • engine.data_store_ids(機密情報ではない)
  • engine.data_stores(機密情報ではない)
  • update_mask(機密情報ではない)

レスポンス:
  • engine.name(機密情報ではない)
  • engine.create_time(機密情報ではない)
  • engine.display_name(機密情報ではない)
  • engine.update_time(機密情報ではない)
  • engine.data_store_ids(機密情報ではない)
  • engine.data_stores(機密情報ではない)
AgentService.SetIamPolicy リクエスト:
  • policy.bindings.roles(機密情報ではない)
  • policy.bindings.members(機密情報ではない)

レスポンス:
  • policy.bindings.roles(機密情報ではない)
  • policy.bindings.members(機密情報ではない)
AgentService.CreateAgent リクエスト:
  • parent(機密情報ではない)
  • agent_id(機密情報ではない)
  • agent.name(機密情報ではない)
  • agent.display_name(機密情報)
  • agent.create_time(機密情報ではない)
  • agent.update_time(機密情報ではない)
  • agent.definition_case(機密情報ではない)

レスポンス:
  • agent.name(機密情報ではない)
  • agent.display_name(機密情報)
  • agent.create_time(機密情報ではない)
  • agent.update_time(機密情報ではない)
  • agent.definition_case(機密情報ではない)
AgentService.UpdateAgent リクエスト:
  • agent.name(機密情報ではない)
  • agent.display_name(機密情報)
  • agent.create_time(機密情報ではない)
  • agent.update_time(機密情報ではない)
  • agent.definition_case(機密情報ではない)
  • update_mask(機密情報ではない)

レスポンス:
  • agent.name(機密情報ではない)
  • agent.display_name(機密情報)
  • agent.create_time(機密情報ではない)
  • agent.update_time(機密情報ではない)
  • agent.definition_case(機密情報ではない)
AgentService.DeleteAgent リクエスト:
  • name(機密情報ではない)

レスポンス:
  • フィールドはログに記録されません
GroundedGenerationService.GenerateGroundedContent リクエスト:
  • contents(機密情報)
  • location(機密情報ではない)
  • generation_spec(部分的に機密情報)。次のサブフィールドのみが機密情報です。
    • language_code
  • system_instruction(機密情報)
  • safety_settings(機密情報ではない)
  • user_labels(機密情報)
  • grounding_spec.explicit_search_queries(機密情報)
  • grounding_spec.grounding_sources(部分的に機密情報)。次のサブフィールドのみが機密情報です。
    • 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

レスポンス:
  • content(機密情報)
  • grounding_metadata(部分的に機密情報)。次のサブフィールドのみが機密情報です。
    • support_chunks(source と index を除く)
    • google_maps_support_chunks(source と index を除く)
    • api_calls.request_payload
    • api_calls.response_body
    • api_calls.uri
  • grounding_score(機密情報ではない)
DataConnectorService.UpdateDataConnector リクエスト:
  • data_connector.name(機密情報ではない)
  • data_connector.create_time(機密情報ではない)
  • data_connector.update_time(機密情報ではない)
  • data_connector.data_source(機密情報ではない)
  • data_connector.refresh_interval(機密情報ではない)
  • data_connector.bap_config(機密情報ではない)

レスポンス:
  • data_connector.name(機密情報ではない)
  • data_connector.create_time(機密情報ではない)
  • data_connector.update_time(機密情報ではない)
  • data_connector.data_source(機密情報ではない)
  • data_connector.refresh_interval(機密情報ではない)
  • data_connector.bap_config(機密情報ではない)
AssistantService.AddContextFile リクエスト:
  • name(機密情報ではない)
  • file_name(機密情報)

レスポンス:
  • session(機密情報ではない)
  • file_id(機密情報ではない)
AssistantService.UploadSessionFile リクエスト:
  • name(機密情報ではない)
  • blob.filename(機密情報)

レスポンス:
  • file_id(機密情報ではない)
UserEventService.WriteUserEvent リクエスト:
  • リクエスト本文のすべてのフィールド(部分的に機密情報)。次のサブフィールドのみが機密情報です。
    • 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

レスポンス:
  • フィールドはログに記録されません

使用状況の監査ログにアクセスする

Gemini Enterprise のすべての使用状況の監査ログにアクセスして表示する手順は次のとおりです。

  1. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

  2. 監査ロギングを有効にした Google Cloud プロジェクトを選択します。

  3. Gemini Enterprise ログのみを表示するには、クエリエディタ フィールドに次のクエリを入力し、[クエリを実行] をクリックします。

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

    次のように置き換えます。

    • PROJECT_ID: 実際のプロジェクトの ID。

ログへのアクセスを制御する

Cloud Logging のログへのアクセスを制御できます。IAM 条件を使用してきめ細かいアクセスを実現するなど、アクセス制御方法の詳細なガイダンスについては、IAM によるアクセス制御をご覧ください。

デフォルトのアクセス制御

デフォルトでは、Gemini Enterprise は Cloud Logging データを _Default バケットに送信します。次の IAM ロールは、このバケットへのアクセスを制御します。

細分化されたアクセス制御

プロジェクトにさまざまな機密レベルのログが含まれている場合は、複数の Google Cloud と Cloud Logging ツールを使用して、よりきめ細かいアクセス制御を構成できます。

きめ細かいアクセス制御は、次のオプションを使用して構成できます。

オプション 説明
IAM の条件 IAM 条件を使用してきめ細かいアクセス制御を設定する。詳細については、Logging のロールをご覧ください。
ログビュー ログビューを使用して、ログバケット内のログのサブセットに対するユーザー アクセスを制限します。詳細については、ログバケットのログビューを構成するをご覧ください。
ログシンク ログシンクを使用して、機密ログを IAM アクセスがより制限されている別のプロジェクトに転送します。詳細については、サポートされている宛先にログをルーティングするをご覧ください。
タグ タグを使用して、プロジェクト内の個々のログバケットに対する IAM アクセスを管理します。詳細については、タグを使用してログバケットへのアクセスを管理するをご覧ください。
フィールド レベルのアクセス制御 フィールド レベルのアクセス制御を使用して、ログエントリ内の特定のフィールドへのアクセスを非表示にしたり、制限したりします。詳細については、フィールド レベルのアクセスを構成するをご覧ください。

次のステップ