Impact: Gemini Discovery Engine API Document Import by External User

This document describes a threat finding type in Security Command Center. Threat findings are generated by threat detectors when they detect a potential threat in your cloud resources. For a full list of available threat findings, see Threat findings index.

Overview

A principal outside of your organization initiated a document import into a Gemini Enterprise datastore. Findings are classified as Medium severity by default.

Event Threat Detection is the source of this finding.

How to respond

To respond to this finding, do the following:

Step 1: Review finding details

  1. Open the Impact: Gemini Discovery Engine API Document Import by External User finding as directed in Reviewing findings. The details panel for the finding opens to the Summary tab.

  2. On the Summary tab, review the information in the following sections:

    • What was detected, especially the following fields:
      • Principal email: the email address for the external user, service account, or AI agent that initiated the document import.
      • Method name: the API method that was called (google.cloud.discoveryengine.v1.DocumentService.ImportDocuments).
    • Affected resource:
      • Resource full name: the full resource name of the project, folder, or organization where the Gemini Enterprise datastore resides.
    • Related links, especially the following fields:
      • Cloud Logging URI: a link to Logging entries.
      • MITRE ATT&CK method: a link to the MITRE ATT&CK documentation.

Step 2: Check logs

  1. On the Summary tab of the finding details panel, click the Cloud Logging URI link to open the Logs Explorer.
  2. On the page that loads, look for Gemini Enterprise document import operations using the following filters:
    • protoPayload.serviceName="discoveryengine.googleapis.com"
    • protoPayload.methodName="google.cloud.discoveryengine.v1.DocumentService.ImportDocuments"
  3. Inspect protoPayload.request to identify the target datastore (parent) and the imported data source (gcsSource, bigquerySource, or inlineSource).

Step 3: Research attack and response methods

  1. Review MITRE ATT&CK framework entries for this finding type: Data Manipulation: Stored Data Manipulation.
  2. To develop a response plan, combine your investigation results with MITRE research.

Step 4: Implement your response

The following response plan might be appropriate for this finding, but might also impact operations. Carefully evaluate the information you gather in your investigation to determine the best way to resolve findings.

  1. Contact the owner of the project that contains the affected Gemini Enterprise datastore to verify whether the import was authorized. If this activity is authorized (for example, an external contractor or partner domain), add the user's domain to your organization's list of verified domains in Cloud Identity or Google Workspace.
  2. Revoke unauthorized IAM roles granted to external users, service accounts, or AI agents on the project or Gemini Enterprise resources.
  3. Review and purge any unauthorized or untrusted documents imported into the Gemini Enterprise datastore to prevent knowledge store poisoning or indirect prompt injection.
  4. To restrict adding external principals to your resources, use the Domain restricted sharing organization policy constraint.

For response recommendations, see Respond to AI threat findings.

Example finding JSON

The following is an example of the finding JSON, with default values omitted.

{
  "finding": {
    "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/locations/global/findings/FINDING_ID",
    "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/locations/global",
    "resourceName": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
    "state": "ACTIVE",
    "category": "Impact: Gemini Discovery Engine API Document Import by External User",
    "securityMarks": {
      "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/locations/global/findings/FINDING_ID/securityMarks"
    },
    "eventTime": "TIMESTAMP",
    "createTime": "TIMESTAMP",
    "severity": "MEDIUM",
    "canonicalName": "projects/PROJECT_NUMBER/sources/SOURCE_ID/locations/global/findings/FINDING_ID",
    "findingClass": "THREAT",
    "access": {
      "principalEmail": "PRINCIPAL_EMAIL",
      "callerIp": "IP_ADDRESS",
      "callerIpGeo": {
        "regionCode": "COUNTRY_CODE"
      },
      "userAgent": "USER_AGENT",
      "serviceName": "discoveryengine.googleapis.com",
      "methodName": "google.cloud.discoveryengine.v1.DocumentService.ImportDocuments",
      "principalSubject": "user:PRINCIPAL_EMAIL"
    },
    "mitreAttack": {
      "primaryTactic": "IMPACT",
      "additionalTactics": [
        "DEFENSE_EVASION",
        "PERSISTENCE"
      ]
    },
    "parentDisplayName": "Event Threat Detection",
    "domains": [
      {
        "category": "AI"
      }
    ],
    "logEntries": [
      {
        "cloudLoggingEntry": {
          "insertId": "INSERT_ID",
          "logId": "cloudaudit.googleapis.com/data_access",
          "resourceContainer": "projects/PROJECT_ID",
          "timestamp": "TIMESTAMP"
        }
      }
    ]
  },
  "resource": {
    "name": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
    "displayName": "PROJECT_ID",
    "type": "google.cloud.resourcemanager.Project",
    "cloudProvider": "GOOGLE_CLOUD_PLATFORM",
    "service": "cloudresourcemanager.googleapis.com",
    "gcpMetadata": {
      "project": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
      "projectDisplayName": "PROJECT_ID",
      "parent": "//cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_ID",
      "parentDisplayName": "ORGANIZATION_DISPLAY_NAME",
      "organization": "organizations/ORGANIZATION_ID"
    },
    "resourcePath": {
      "nodes": [
        {
          "nodeType": "GCP_PROJECT",
          "id": "projects/PROJECT_NUMBER",
          "displayName": "PROJECT_ID"
        },
        {
          "nodeType": "GCP_ORGANIZATION",
          "id": "organizations/ORGANIZATION_ID"
        }
      ]
    },
    "resourcePathString": "organizations/ORGANIZATION_ID/projects/PROJECT_NUMBER"
  },
  "sourceProperties": {
    "sourceId": {
      "projectNumber": "PROJECT_NUMBER",
      "customerOrganizationNumber": "ORGANIZATION_ID"
    },
    "detectionCategory": {
      "ruleName": "gemini_enterprise_datastore_document_import_by_external_user"
    },
    "detectionPriority": "MEDIUM",
    "affectedResources": [
      {
        "gcpResourceName": "//discoveryengine.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/branches/0"
      },
      {
        "gcpResourceName": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER"
      }
    ],
    "evidence": [
      {
        "sourceLogId": {
          "projectId": "PROJECT_ID",
          "resourceContainer": "projects/PROJECT_ID",
          "timestamp": {
            "seconds": "TIMESTAMP_SECONDS",
            "nanos": TIMESTAMP_NANOS
          },
          "insertId": "INSERT_ID",
          "logId": "cloudaudit.googleapis.com/data_access"
        }
      }
    ],
    "findingId": "FINDING_ID",
    "contextUris": {
      "mitreUri": {
        "displayName": "MITRE Link",
        "url": "https://attack.mitre.org/techniques/T1565/001/"
      },
      "cloudLoggingQueryUri": [
        {
          "displayName": "Cloud Logging Query Link",
          "url": "https://console.cloud.google.com/logs/query;query=timestamp%3D%22TIMESTAMP%22%0AinsertId%3D%22INSERT_ID%22?project=PROJECT_ID"
        }
      ]
    },
    "domains": [
      {
        "category": "AI"
      }
    ]
  }
}

What's next