Skip to content

This tool is not affiliated with, endorsed by or sponsored by Amazon Web Services, Inc. or Amazon.com, Inc. AWS, Amazon Web Services, CloudTrail and GuardDuty are trademarks of Amazon.com, Inc. or its affiliates. Other names are trademarks of their respective owners.

CloudTrail events to monitor, mapped to MITRE ATT&CK

The CloudTrail events every AWS responder should know, from recon to impact, with the fields that carry the evidence and their MITRE ATT&CK technique ids.

Published on 5 min read

TL;DR. You do not need to know thousands of AWS API names. About fifty event names cover the common attack path on AWS: GetCallerIdentity and List/Describe bursts (recon), CreateUser / CreateAccessKey / CreateLoginProfile (persistence), AttachUserPolicy with AdministratorAccess (privilege escalation), StopLogging / DeleteDetector (defense evasion), GetObject bursts / ModifySnapshotAttribute (exfiltration), GPU RunInstances / ScheduleKeyDeletion (impact). The tables below give the event source, the fields that carry the evidence and the MITRE ATT&CK technique for each.

Every table here matches a rule in the analyzer's open rule set, so what you read is what the tool checks. The tables are organised by tactic, in the order an intrusion usually unfolds.

Fields you read on every event

FieldWhat it tells you
eventTimeUTC time of the request
eventSource / eventNameService and API, e.g. iam.amazonaws.com / CreateUser
userIdentity.typeRoot, IAMUser, AssumedRole, FederatedUser, AWSService…
userIdentity.arn, accessKeyIdWho, and with which credential (AKIA long-term, ASIA temporary)
sourceIPAddress, userAgentFrom where and with what client
errorCode, errorMessageAbsent when the call succeeded
requestParameters, responseElementsWhat was asked and what was created
awsRegion, recipientAccountIdWhere it happened

AWS documents the full schema in the CloudTrail record contents reference and the userIdentity element.

Initial access and credential abuse

EventEvidence to readATT&CK
Any call with an AKIA key from a new IPaccessKeyId, sourceIPAddress, userAgentT1078.004, T1552.001
Any call with userIdentity.type = RootSource IP; root should almost never actT1078.004
ConsoleLogin (signin)responseElements.ConsoleLogin = Success/Failure, additionalEventData.MFAUsedT1078.004
Repeated ConsoleLogin failures from one IPCount per IP per 15 minT1110

Discovery

EventEvidence to readATT&CK
sts:GetCallerIdentity with a long-term keyFirst call from a new addressT1087.004
Many different List* / Describe* / Get* in minutesDistinct eventName count per keyT1580, T1526
iam:GetAccountAuthorizationDetailsFull IAM dump in one callT1087.004
Burst of AccessDenied / UnauthorizedOperationerrorCode per principalT1069.003

GetCallerIdentity needs no permissions and is called by the CLI itself, so on its own it is low severity. It matters as the first event from an unfamiliar address.

Persistence

EventEvidence to readATT&CK
iam:CreateUserrequestParameters.userNameT1136.003
iam:CreateAccessKey for another userrequestParameters.userName ≠ caller; new key in responseElements.accessKey.accessKeyIdT1098.001
iam:CreateLoginProfile / UpdateLoginProfileConsole password on a userT1098
iam:UpdateAssumeRolePolicyNew principals trusted by a roleT1098
iam:CreateSAMLProvider, CreateOpenIDConnectProvider, UpdateOpenIDConnectProviderThumbprintNew federation trustT1484.002
lambda:AddPermission with principal *, CreateFunctionUrlConfig with authType: NONEPublic backdoor functionT1546, T1648
ec2:ModifyInstanceAttribute with userDataScript run at next bootT1059
ec2:CreateKeyPair / ImportKeyPairSSH access to new instancesT1098.004

Privilege escalation

EventEvidence to readATT&CK
AttachUserPolicy / AttachRolePolicy / AttachGroupPolicypolicyArn ending in AdministratorAccess or IAMFullAccessT1098.003
PutUserPolicy / PutRolePolicy / CreatePolicyVersionPolicy document with "Action": "*" on "Resource": "*"T1098.003
AddUserToGroupGroup name suggesting admin rightsT1098

Defense evasion

EventEvidence to readATT&CK
cloudtrail:StopLogging, DeleteTrailTrail name, regionT1562.008
cloudtrail:UpdateTrail, PutEventSelectorsDestination or selectors changedT1562.008
guardduty:DeleteDetector, UpdateDetector (disabled), CreateIPSet, archive filtersDetector ID, regionT1562.001
config:StopConfigurationRecorder, DeleteDeliveryChannelRegionT1562.001
securityhub:DisableSecurityHub, macie2:DisableMacie, inspector2:Disable, detective:DeleteGraphServiceT1562.001
s3:PutBucketLogging without a targetAccess logging turned offT1562.008
ec2:DeleteFlowLogsNetwork logging removedT1562.008
logs:DeleteLogGroup / DeleteLogStreamEvidence destroyedT1070
ec2:AuthorizeSecurityGroupIngress with 0.0.0.0/0Firewall openedT1562.007
Writes in a region not used beforeawsRegionT1535

The defense evasion post explains how to read the gap a StopLogging leaves.

Credential access and exfiltration

EventEvidence to readATT&CK
secretsmanager:GetSecretValue / BatchGetSecretValue on many secretsDistinct secretId per principalT1555.006
s3:GetObject bursts (data event)Count per principal and bucket; additionalEventData.bytesTransferredOutT1530
s3:PutBucketPolicy with Principal: "*", PutBucketAcl with AllUsersBucket made publicT1530
DeleteBucketPublicAccessBlock / weakened PutPublicAccessBlockGuard rail removedT1530
ec2:ModifySnapshotAttribute, ModifyImageAttribute, rds:ModifyDBSnapshotAttributecreateVolumePermission / restore shared with a foreign account or allT1537

GetObject is a data event: it is only there if the trail was configured for it. See S3 data exfiltration evidence.

Impact

EventEvidence to readATT&CK
ec2:RunInstances with p* / g* instance typesinstanceType, awsRegionT1496
servicequotas:RequestServiceQuotaIncreasequotaCode, regionT1496
Many Delete* / Terminate* by one principalCount per 10 minT1485
kms:ScheduleKeyDeletion, DisableKeyKey IDT1485, T1486

Turning the list into alerts

AWS's own guidance is to send the trail to CloudWatch Logs and create metric filters and alarms on events like these (re:Post guide); EventBridge rules work too. For investigation after the fact, filtering the exports is enough — or drop them in the analyzer, which evaluates these rules on every record and links each finding to its ATT&CK techniques. The step-by-step analysis guide shows how to confirm them.

Related articles

Defense evasion on AWS: StopLogging, DeleteTrail, event selectors, GuardDuty detectors deleted, Config and Flow Logs removed, and what CloudTrail keeps.
How attackers keep access to AWS through IAM: backdoor users, extra keys, admin policies, role trust and identity providers, and how CloudTrail shows it.
Prove or rule out S3 data theft: CloudTrail data events, S3 server access logs, public bucket policies, shared snapshots, and what you cannot see without them.

This tool is not affiliated with, endorsed by or sponsored by Amazon Web Services, Inc. or Amazon.com, Inc. AWS, Amazon Web Services, CloudTrail and GuardDuty are trademarks of Amazon.com, Inc. or its affiliates. Other names are trademarks of their respective owners.