AWS Bedrock Model Invocation From High Number of Countries

Last updated 5 days ago on 2026-10-23
Created 5 days ago on 2026-10-23

About

Detects a single AWS principal invoking Amazon Bedrock models from three or more countries and three or more source IPs within the lookback window. LLMjacking operators often distribute stolen AWS credentials across proxies or resell them to multiple buyers, which produces inference traffic for one identity from many unrelated locations.
Tags
Domain: CloudDomain: GenAIData Source: AWSData Source: Amazon Web ServicesData Source: AWS CloudTrailPlatform: AWSService: AWS BedrockUse Case: Threat DetectionTactic: Credential AccessTactic: Initial AccessThreat: Impossible TravelThreat: LLMjackingThreat: Unauthorized AI UsageMitre Atlas: AML.T0012Mitre Atlas: AML.T0091Mitre Atlas: AML.T0091.000Rule Type: ES|QLLanguage: esql
Severity
critical
Risk Score
99
MITRE ATT&CK™

Credential Access (TA0006)(external, opens in a new tab or window)

Initial Access (TA0001)(external, opens in a new tab or window)

False Positive Examples
Globally distributed applications or CI runners that call Bedrock with one shared IAM user or role. Prefer per-region identities, or raise the country threshold for these principals. Users on VPNs or privacy relays that rotate exit countries. Corroborate with ASN and user agent before acting.
License
Elastic License v2(external, opens in a new tab or window)

Definition

Integration Pack
Prebuilt Security Detection Rules
Related Integrations

aws(external, opens in a new tab or window)

Query
text code block:
from logs-aws.cloudtrail-* | where data_stream.dataset == "aws.cloudtrail" and event.provider == "bedrock.amazonaws.com" and event.action in ("InvokeModel", "InvokeModelWithResponseStream", "Converse", "ConverseStream") and event.outcome == "success" and aws.cloudtrail.user_identity.arn is not null and source.ip is not null and source.geo.country_name is not null | eval Esql.identity = coalesce( aws.cloudtrail.user_identity.session_context.session_issuer.arn, aws.cloudtrail.user_identity.arn ) | stats Esql.country_count = count_distinct(source.geo.country_name), Esql.source_ip_count = count_distinct(source.ip), Esql.user_agent_count = count_distinct(user_agent.original), Esql.event_count = count(*), Esql.event_action_values = values(event.action), Esql.source_ip_values = values(source.ip), Esql.source_geo_country_name_values = values(source.geo.country_name), Esql.source_geo_city_name_values = values(source.geo.city_name), Esql.source_as_organization_name_values = values(source.as.organization.name), Esql.user_agent_original_values = values(user_agent.original), Esql.aws_cloudtrail_user_identity_arn_values = values(aws.cloudtrail.user_identity.arn), Esql.aws_cloudtrail_user_identity_type_values = values(aws.cloudtrail.user_identity.type), Esql.aws_cloudtrail_user_identity_access_key_id_values = values(aws.cloudtrail.user_identity.access_key_id), Esql.cloud_region_values = values(cloud.region), Esql.timestamp_first_seen = min(@timestamp), Esql.timestamp_last_seen = max(@timestamp) by Esql.identity, cloud.account.id | where Esql.country_count >= 3 and Esql.source_ip_count >= 3 | eval source.ip = mv_first(Esql.source_ip_values) | keep Esql.identity, cloud.account.id, source.ip, Esql.country_count, Esql.source_ip_count, Esql.user_agent_count, Esql.event_count, Esql.event_action_values, Esql.source_ip_values, Esql.source_geo_country_name_values, Esql.source_geo_city_name_values, Esql.source_as_organization_name_values, Esql.user_agent_original_values, Esql.aws_cloudtrail_user_identity_arn_values, Esql.aws_cloudtrail_user_identity_type_values, Esql.aws_cloudtrail_user_identity_access_key_id_values, Esql.cloud_region_values, Esql.timestamp_first_seen, Esql.timestamp_last_seen

Install detection rules in Elastic Security

Detect AWS Bedrock Model Invocation From High Number of Countries in the Elastic Security detection engine by installing this rule into your Elastic Stack.

To setup this rule, check out the installation guide for Prebuilt Security Detection Rules(external, opens in a new tab or window).