Anthropic Compliance API Key Created
Compliance-scoped API keys read organization audit activity and compliance data. Once an attacker has administrative access, creating one gives them programmatic read of chats, files, and membership without an interactive session. This is separate from admin API key creation, which covers organization administration rather than compliance read scopes.
Elastic rule (View on GitHub)
1[metadata]
2creation_date = "2026/09/12"
3integration = ["anthropic"]
4maturity = "production"
5updated_date = "2026/09/21"
6
7[rule]
8author = ["Elastic"]
9description = """
10Compliance-scoped API keys read organization audit activity and compliance data. Once an attacker has administrative
11access, creating one gives them programmatic read of chats, files, and membership without an interactive session. This
12is separate from admin API key creation, which covers organization administration rather than compliance read scopes.
13"""
14false_positives = [
15 """
16 Platform and security teams create compliance-scoped API keys when onboarding the Anthropic Fleet integration or
17 setting up SIEM ingestion. Verify the actor and confirm the key is in the approved credentials inventory.
18 """,
19]
20from = "now-9m"
21language = "esql"
22license = "Elastic License v2"
23name = "Anthropic Compliance API Key Created"
24note = """## Triage and analysis
25
26### Investigating Anthropic Compliance API Key Created
27
28A new API key was created with compliance read scopes (audit/compliance data), distinct from admin API keys used for
29org administration. Review `anthropic.audit.scopes` for exact permissions.
30
31Unauthorized = key not in approved inventory / no Fleet or investigation ticket, or creation by an unexpected actor
32followed by `compliance_api_accessed` / audit export activity.
33
34#### Possible investigation steps
35
36- Record `anthropic.audit.api_key_id` and scopes. Branch actor (`user_actor` vs `admin_api_key_actor`) and validate
37 against known platform admins or parent admin keys.
38- Pivot on that `api_key_id` for later `compliance_api_accessed` (programmatic use of the new key).
39- Correlate ±hours for admin role grants, logging disablement, or data exports — recon before further intrusion.
40
41### False positive analysis
42
43- First Fleet onboarding key for an org is expected — require inventory / ticket evidence.
44
45### Response and remediation
46
47- On unauthorized creation: revoke the key and review Compliance API / export activity during the exposure window.
48"""
49references = [
50 "https://platform.claude.com/docs/en/api/compliance/activities/list",
51]
52risk_score = 73
53rule_id = "b8c429a1-67f3-448c-a960-951807dd2cd8"
54severity = "high"
55tags = [
56 "Domain: GenAI",
57 "Platform: Anthropic",
58 "Data Source: Anthropic Audit Logs",
59 "Use Case: Identity and Access Audit",
60 "Use Case: Threat Detection",
61 "Resources: Investigation Guide",
62 "Rule Type: ES|QL",
63 "Tactic: Persistence",
64]
65timestamp_override = "event.ingested"
66type = "esql"
67
68query = '''
69from logs-anthropic.audit-* metadata _id, _version, _index
70| where
71 data_stream.dataset == "anthropic.audit" and
72 event.action == "api_key_created" and
73 event.outcome == "success" and
74 anthropic.audit.scopes is not null and
75 (
76 mv_contains(anthropic.audit.scopes, "read:compliance_activities") or
77 mv_contains(anthropic.audit.scopes, "read:compliance_org_data")
78 )
79| keep _id, _version, _index, @timestamp, event.*, organization.*, user.*, source.*, user_agent.*, anthropic.audit.*, data_stream.*
80'''
81
82
83[[rule.threat]]
84framework = "MITRE ATT&CK"
85[[rule.threat.technique]]
86id = "T1098"
87name = "Account Manipulation"
88reference = "https://attack.mitre.org/techniques/T1098/"
89[[rule.threat.technique.subtechnique]]
90id = "T1098.001"
91name = "Additional Cloud Credentials"
92reference = "https://attack.mitre.org/techniques/T1098/001/"
93
94
95
96[rule.threat.tactic]
97id = "TA0003"
98name = "Persistence"
99reference = "https://attack.mitre.org/tactics/TA0003/"
100
101[rule.investigation_fields]
102field_names = [
103 "@timestamp",
104 "event.action",
105 "event.id",
106 "organization.id",
107 "anthropic.audit.api_key_id",
108 "anthropic.audit.scopes",
109 "anthropic.audit.actor.type",
110 "anthropic.audit.actor.admin_api_key_id",
111 "user.email",
112 "user.id",
113 "source.ip",
114 "user_agent.original",
115]
Triage and analysis
Investigating Anthropic Compliance API Key Created
A new API key was created with compliance read scopes (audit/compliance data), distinct from admin API keys used for
org administration. Review anthropic.audit.scopes for exact permissions.
Unauthorized = key not in approved inventory / no Fleet or investigation ticket, or creation by an unexpected actor
followed by compliance_api_accessed / audit export activity.
Possible investigation steps
- Record
anthropic.audit.api_key_idand scopes. Branch actor (user_actorvsadmin_api_key_actor) and validate against known platform admins or parent admin keys. - Pivot on that
api_key_idfor latercompliance_api_accessed(programmatic use of the new key). - Correlate ±hours for admin role grants, logging disablement, or data exports — recon before further intrusion.
False positive analysis
- First Fleet onboarding key for an org is expected — require inventory / ticket evidence.
Response and remediation
- On unauthorized creation: revoke the key and review Compliance API / export activity during the exposure window.
References
Related rules
- Anthropic Admin API Key Created
- Anthropic Admin Role Assigned to User
- Anthropic Organization Domain Boundary Changed
- Anthropic Organization User Invite Sent
- Anthropic Admin API Key Deleted