LoFP LoFP / documentation and unit tests that paste example keys (for example an aws access key ending in example) match the token patterns. confirm the value is live before rotating it.

Techniques

Sample rules

GCP Vertex AI Prompt or Response Containing Credentials

Description

Detects a GCP Vertex AI GenerateContent exchange whose prompt or model reply contains a known credential pattern (AWS access keys, GitHub tokens, PEM private keys, and similar), or whose assistant reply warns about exposed keys and revocation. Secrets in prompt/response logs are visible to anyone with access to BigQuery prompt-response export and Elastic.

Detection logic

from logs-gcp_vertexai.prompt_response_logs-* metadata _id, _version, _index
| where data_stream.dataset == "gcp_vertexai.prompt_response_logs"
| eval request_text = coalesce(mv_concat(gcp.vertexai.prompt_response_logs.full_request.contents.parts.text, " "), ""),
       response_raw = coalesce(mv_concat(gcp.vertexai.prompt_response_logs.full_response.candidates.content.parts.text, " "), ""),
       response_text = to_lower(response_raw)
| where
    request_text rlike """.*(AKIA|ASIA)[A-Z0-9]{16}.*""" or
    response_raw rlike """.*(AKIA|ASIA)[A-Z0-9]{16}.*""" or
    request_text rlike """.*gh[pousr]_[A-Za-z0-9]{36}.*""" or
    response_raw rlike """.*gh[pousr]_[A-Za-z0-9]{36}.*""" or
    request_text rlike """.*github_pat_[A-Za-z0-9_]+.*""" or
    response_raw rlike """.*github_pat_[A-Za-z0-9_]+.*""" or
    request_text rlike """.*-----BEGIN [A-Z ]*PRIVATE KEY-----.*""" or
    response_raw rlike """.*-----BEGIN [A-Z ]*PRIVATE KEY-----.*""" or
    request_text rlike """.*xox[baprs]-[0-9]+-[0-9]+-[A-Za-z0-9]+.*""" or
    response_raw rlike """.*xox[baprs]-[0-9]+-[0-9]+-[A-Za-z0-9]+.*""" or
    request_text rlike """.*sk_live_[A-Za-z0-9]+.*""" or
    response_raw rlike """.*sk_live_[A-Za-z0-9]+.*""" or
    request_text rlike """.*AIza[-A-Za-z0-9_]+.*""" or
    response_raw rlike """.*AIza[-A-Za-z0-9_]+.*""" or
    request_text rlike """.*glpat-[-A-Za-z0-9_]+.*""" or
    response_raw rlike """.*glpat-[-A-Za-z0-9_]+.*""" or
    response_text like "*serious security concern*" or
    response_text like "*exposing api keys*" or
    response_text like "*revoke/delete the api key*"
| keep
    _id,
    _version,
    _index,
    @timestamp,
    cloud.project.id,
    gcp.vertexai.prompt_response_logs.model,
    gcp.vertexai.prompt_response_logs.api_method,
    gcp.vertexai.prompt_response_logs.full_request.contents.parts.text,
    gcp.vertexai.prompt_response_logs.full_response.candidates.content.parts.text,
    gcp.vertexai.prompt_response_logs.full_response.candidates.finish_reason,
    gcp.vertexai.prompt_response_logs.full_response.usage_metadata.prompt_token_count,
    gcp.vertexai.prompt_response_logs.full_response.usage_metadata.candidates_token_count