Wie kann ich meine CloudTrail-Protokolle mit CloudWatch Logs Insights analysieren?
Ich möchte meine Amazon-CloudTrail-Protokolle mit Amazon CloudWatch Logs Insights analysieren. Wie kann ich vorgehen?
Kurzbeschreibung
Sie können CloudTrail für die Protokollierung an CloudWatch Logs konfigurieren. Auf diese Weise können Sie CloudWatch Logs Insights verwenden, um die CloudTrail-Protokolle zu analysieren und bestimmte Kontoaktivitäten zu überwachen.
Um die Fähigkeit von Logs Insights zu demonstrieren, CloudTrail-Protokolle zu analysieren, enthält die folgende Auflösung Beispielabfragen. Diese Abfragen decken die häufigsten Anwendungsfälle ab:
- Bestimmte Protokollfelder isolieren.
- Filtern unter verschiedenen Bedingungen.
- Ereignisse aggregieren.
- Aufbau einer Zeitreihe.
Auflösung
Die folgenden Abfragen untersuchen den Amazon Simple Storage Service (Amazon S3)-Bucket und die Objektaktivität. Standardmäßig erfasst CloudTrail keine S3-Datenereignisse. Sie können die Ereignisprotokollierung in CloudTrail einschalten. Weitere Informationen finden Sie unter CloudTrail-Ereignisprotokollierung für S3-Buckets und Objekte aktivieren.
Sie können auf diesen Beispielabfragen aufbauen, um zusätzliche und komplexere Logs-Insights-Abfragen zu erstellen, die auf Ihren Anwendungsfall abgestimmt sind. Sie können auch Abfragen in Ihr CloudWatch-Dashboard integrieren, um Ihre Abfragen neben verwandten Metriken als Diagramme und Grafiken zu visualisieren.
Abfrage 1: Letzte Ereignisse
Zielsetzung
Abrufen der neuesten CloudTrail-Protokollereignisse mit den Standardfeldern @timestamp und @message.
Abfrage
#Retrieve the most recent CloudTrail events fields @timestamp, @message | sort @timestamp desc | limit 2
Ergebnisse
@timestamp | @message |
2022-02-18 17:52:31.118 | {"eventVersion":"1.08","userIdentity":{"type":"AssumedRole","principalId":"AROAWZKRRJU47ARZN7ECC:620d7d78144334d6933c27195cae2a98", "arn":"arn:aws:sts::123456789012:assumed- role/Amazon_EventBridge_Invoke_Run_Command_371790151/620d7d78144334d6933c27195cae2a98","accountId":"123456789012", "accessKeyId":"ASIAWZKRRJU4Y45M4SC6","sessionContext":{"sessionIssuer": {"type":"Role","principalId":"AROAWZKRRJU47ARZN7ECC","arn":"arn:aws:iam::123456789012:role/service- role/Amazon_EventBridge_Invoke_Run_Command_371790151","accountId":"123456789012","userName": "Amazon_EventBridge_Invoke_Run_Command_371790151" (output truncated) |
2022-02-18 17:51:52.137 | {"eventVersion":"1.08","userIdentity":{"type":"AssumedRole","principalId":"AROAWZKRRJU43YP4FHR2N:StateManagerService","arn":"arn:aws:sts::123456789012:assumed-role/AWSServiceRoleForAmazonSSM/StateManagerService","accountId":"123456789012","sessionContext":{"sessionIssuer":{"type":"Role","principalId":"AROAWZKRRJU43YP4FHR2N","arn":"arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM","accountId":"123456789012","userName":"AWSServiceRoleForAmazonSSM"}, "webIdFederationData":{},"attributes":{"creationDate":"2022-02-18T17:50:06Z","mfaAuthenticated":"false"}},"invokedBy":"ssm.amazonaws.com"},"eventTime":"2022-02-18T17:50:06Z","eventSource":"ec2.amazonaws.com","eventName":"DescribeInstances","awsRegion":"eu-west-1","sourceIPAddress":"ssm.amazonaws.com","userAgent":"ssm.amazonaws.com","requestParameters":{"maxResults":50,"instancesSet": (output truncated) |
Abfrage 2: Zerteilen einzelner Felder
Zielsetzung
- Isolieren der einzelnen Felder in @message.
- Anzeigen von ausgewählten Feldern im CloudTrail-Ereignis.
Abfrage
#Breakout Individual Fields fields @timestamp, awsRegion, eventCategory, eventSource, eventName, eventType, sourceIPAddress, userIdentity.type | sort @timestamp desc | limit 2
Ergebnisse
@timestamp | awsRegion | eventCategory | eventSource | eventName | eventType | sourceIPAddress | userIdentity.type |
---|---|---|---|---|---|---|---|
2022-02-18 18:00:09.647 | ca-central-1 | Verwaltung | sts.amazonaws.com | AssumeRole | AwsApiCall | cloudtrail.amazonaws.com | AWSService |
2022-02-18 18:00:09.647 | ca-central-1 | Verwaltung | sts.amazonaws.com | AssumeRole | AwsApiCall | cloudtrail.amazonaws.com | AWSService |
Abfrage 3: Filtern nach Amazon Elastic Compute Cloud (Amazon EC2)-RunInstances
Zielsetzung
- Abrufen bestimmter Felder im Cloudtrail-Ereignis.
- Umbenennen der Felder mit sinnvolleren Markierungen.
- Filtern der neuesten in diesem Konto gelaunchten EC2-Instances basierend auf dem API-Aufruf.
Abfrage
#EC2: Recently Launched Instances fields eventTime, eventName as API, responseElements.instancesSet.items.0.instanceId as InstanceID, userIdentity.sessionContext.sessionIssuer.type as IssuerType, userIdentity.type as IdentityType, userIdentity.sessionContext.sessionIssuer.userName as userName | filter eventName = 'RunInstances' | sort eventTime desc | limit 2
Ergebnisse
eventTime | API | InstanceID | IssuerType | IdentityType | userName |
---|---|---|---|---|---|
2022-02-18T17:36:38Z | RunInstances | i-0325b4d6ae4e93c75 | Rolle | AssumedRole | AWSServiceRoleForAutoScaling |
2022-02-18T13:45:18Z | RunInstances | i-04d17a8425b7cb59a | Rolle | AssumedRole | AWSServiceRoleForAutoScaling |
Abfrage 4: Filtern nach Konsolenanmeldung: Aktuellste
Zielsetzung
- Abrufen bestimmter Felder im Cloudtrail-Ereignis.
- Umbenennen der Felder mit sinnvolleren Markierungen.
- Filtern der neuesten Anmeldungen über die AWS-Konsole basierend auf dem API-Aufruf.
Abfrage
#Console Login: Most Recent API Calls fields eventTime, eventName, responseElements.ConsoleLogin as Response, userIdentity.arn as ARN, userIdentity.type as User_Type | filter eventName = 'ConsoleLogin' | sort eventTime desc | limit 10
Ergebnisse
eventTime | eventName | Reaktion | ARN | User_Type |
---|---|---|---|---|
2022-02-18T17:35:44Z | ConsoleLogin | Erfolg | arn:aws:iam::123456789012:user/test_user | IAMUser |
2022-02-17T13:53:58Z | ConsoleLogin | Erfolg | arn:aws:sts::123456789012:assumed-role/Admin/test_user | AssumedRole |
Abfrage 5: Nach Konsolenanmeldung filtern: Authentifizierung fehlgeschlagen
Zielsetzung
- Abrufen bestimmter Felder (z. B. Benutzername, Benutzertyp, Quell-IP) im Cloudtrail-Ereignis.
- Umbenennen der Felder mit sinnvolleren Markierungen.
- Filtern der neuesten erfolglosen Anmeldungen über die AWS-Konsole.
Abfrage
#ConsoleLogin: Filter on Failed Logins fields eventTime, eventName, responseElements.ConsoleLogin as Response, userIdentity.userName as User, userIdentity.type as User_Type, sourceIPAddress, errorMessage | filter eventName = 'ConsoleLogin' and responseElements.ConsoleLogin = 'Failure' | sort eventTime desc | limit 10
Ergebnisse
eventTime | eventName | Reaktion | Benutzer | User_Type | sourceIPAddress | errorMessage |
---|---|---|---|---|---|---|
2022-02-18T20:10:55Z | ConsoleLogin | Fehler | Echo | IAMUser | 12.34.56.89 | Authentifizierung fehlgeschlagen |
2022-02-18T20:10:43Z | ConsoleLogin | Fehler | Echo | IAMUser | 12.34.56.89 | Authentifizierung fehlgeschlagen |
Abfrage 6: Filtern nach Amazon Simple Storage Solution (Amazon S3)-Objekt-Upload
Zielsetzung
- Abrufen bestimmter Felder im Cloudtrail-Ereignis.
- Umbenennen der Felder mit sinnvolleren Markierungen.
- Filtern nach API-Aufruf und Ziel-S3-Bucket.
Abfrage
#Filter PutObject API Calls on a specific S3 Bucket fields @timestamp, eventName as API, requestParameters.bucketName as BucketName, requestParameters.key as Key, userIdentity.sessionContext.sessionIssuer.userName as UserName | filter eventName = 'PutObject' and BucketName = 'target-s3-bucket' | sort @timestamp desc | limit 2
Ergebnisse
@timestamp | API | BucketName | Schlüssel | UserName |
---|---|---|---|---|
2022-02-12 17:16:07.415 | PutObject | test_bucket1 | w4r9Hg4V7g.jpg | |
2022-02-12 16:29:43.470 | PutObject | test_bucket2 | 6wyBy0hBoB.jpg |
Abfrage 7: Zusammenfassen von S3-Aktivitäten
Zielsetzung
- Filter basierend auf S3-Service.
- Aggregieren aller übereinstimmenden Ereignisse basierend auf der Zählungs-Statistik.
- Splice der Ergebnisse basierend auf API, S3-Bucket und Schlüssel.
- Umbenennen von Feldern mit dem Befehl stats.
- Sortiert nach absteigender Reihenfolge.
Abfrage
#S3 Activity: Bucket & Key Details filter eventSource = 's3.amazonaws.com' | stats count(*) as Hits by eventName as API, requestParameters.bucketName as BucketName, requestParameters.key as Key | sort Hits desc | limit 5
Ergebnisse
API | BucketName | Schlüssel | Treffer |
---|---|---|---|
ListAccessPoints | 44 | ||
GetBucketAcl | team1-ctrail-multi-region | 27 | |
GetBucketAcl | team2-dub-cloudtrail | 27 | |
GetBucketAcl | aws-cloudtrail-logs-123456789012-ba940dd7 | 26 | |
GetObject | devsupport-prod | rdscr/individual/123456789012 | 18 |
Abfrage 8: Zusammenfassen der Entschlüsselungsaktivität des AWS Key Management Service (AWS KMS)
Zielsetzung
- Filter basierend auf dem KMS-Service und der Decrypt-API.
- Verwenden des Befehls fields, um Felder umzubenennen und die benutzerfreundlichen Namen zu aggregieren.
- Aggregieren aller übereinstimmenden Ereignisse basierend auf der Zählungs-Statistik.
- Splice der Ergebnisse basierend auf KMS-Schlüssel und Benutzer.
- Sortiert nach absteigender Reihenfolge.
Abfrage
#KMS Decrypt Activity: Key & User Details fields resources.0.ARN as KMS_Key, userIdentity.sessionContext.sessionIssuer.userName as User | filter eventSource='kms.amazonaws.com' and eventName='Decrypt' | stats count(*) as Hits by KMS_Key, User | sort Hits desc | limit 2
Ergebnisse
KMS_Key | Benutzer | Treffer |
---|---|---|
arn:aws:kms:us-east-1:123456789012:key/03f2923d-e213-439d-92cf-cbb444bd85bd | AWSServiceRoleForConfig | 12 |
arn:aws:kms:us-east-1:123456789012:key/03f2923d-e213-439d-92cf-cbb444bd85bd | FoxTrot-1UQJBODTWZYZ6 | 8 |
Abfrage 9: Zusammenfassen von API-Aufrufen mit Fehlern
Zielsetzung
- Filtern basierend auf dem Vorhandensein des errorCode-Feldes.
- Aggregieren aller übereinstimmenden Ereignisse basierend auf der Zählungs-Statistik.
- Splice der Ergebnisse basierend auf AWS-Service, API und errorCode.
- Umbenennen von Feldern mit dem Befehl stats.
- Sortieren nach der größten Anzahl von Übereinstimmungen.
Abfrage
#Summarize API Calls with Errors filter ispresent(errorCode) | stats count(*) as Num_of_Events by eventSource as AWS_Service, eventName as API, errorCode | sort Num_of_Events desc | limit 5
Ergebnisse
AWS_Service | API | errorCode | Num_of_Events |
---|---|---|---|
s3.amazonaws.com | GetBucketPublicAccessBlock | NoSuchPublicAccessBlockConfiguration | 79 |
lambda.amazonaws.com | GetLayerVersionPolicy20181031 | ResourceNotFoundException | 66 |
s3.amazonaws.com | GetBucketPolicyStatus | NoSuchBucketPolicy | 60 |
s3.amazonaws.com | HeadBucket | AccessDenied | 47 |
logs.amazonaws.com | CreateLogStream | ResourceNotFoundException | 21 |
Abfrage 10: Zusammenfassen von S3-API-Aufrufen mit Fehlercodes
Zielsetzung
- Filtern basierend auf S3-Service und dem Vorhandensein eines errorCode-Feldes.
- Aggregieren aller übereinstimmenden Ereignisse basierend auf der Zählungs-Statistik.
- Splice der Ergebnisse basierend auf errorCode und errorMessage.
- Sortieren nach der größten Anzahl von Übereinstimmungen.
Abfrage
#S3: Summarize Error Codes filter eventSource = 's3.amazonaws.com' and ispresent(errorCode) | stats count(*) as Hits by errorCode, errorMessage | sort Hits desc | limit 5
Ergebnisse
errorCode | errorMessage | Treffer |
---|---|---|
AccessDenied | Zugriff verweigert | 86 |
NoSuchBucketPolicy | Die Bucket-Richtlinie ist nicht vorhanden | 80 |
NoSuchPublicAccessBlockConfiguration | Die Blockkonfiguration für den öffentlichen Zugriff wurde nicht gefunden | 79 |
ObjectLockConfigurationNotFoundError | Die Objektsperren-Konfiguration ist für diesen Bucket nicht vorhanden | 3 |
ServerSideEncryptionConfigurationNotFoundError | Die serverseitige Verschlüsselungs-Konfiguration wurde nicht gefunden | 3 |
Abfrage 11: Zusammenfassen von AccessDenied-/UnauthorizedOperation-API-Aufrufen von AWS-Service-, API- und AWS Identity and Access Management (IAM)-Benutzern
Zielsetzung
- Filtern entweder nach AccessDenied- oder UnauthorizedOperation-CloudTrail-Ereignissen.
- Aggregieren aller übereinstimmenden Ereignisse basierend auf der Zählungs-Statistik.
- Splice der Ergebnisse basierend auf errorCode, AWS Service, API und IAM-Benutzer/-Rolle.
- Umbenennen von Feldern mit dem Befehl stats.
- In absteigender Reihenfolge sortieren.
Abfrage
#Summarize AccessDenied/UnauthorizedOperation API Calls by AWS Service, API, IAM User filter (errorCode='AccessDenied' or errorCode='UnauthorizedOperation') | stats count(*) as NumberOfEvents by errorCode, eventSource as AWS_Service, eventName as API, userIdentity.type as IdentityType, userIdentity.invokedBy as InvokedBy | sort NumberOfEvents desc | limit 10
Ergebnisse
errorCode | AWS_Service | API | IdentityType | InvokedBy | NumberOfEvents |
---|---|---|---|---|---|
AccessDenied | s3.amazonaws.com | HeadBucket | AWSService | delivery.logs.amazonaws.com | 83 |
AccessDenied | s3.amazonaws.com | GetObject | AssumedRole | 9 |
Abfrage 12: Zeitreihen: Stündliches KMS-Anrufvolumen
Zielsetzung
- Filter basierend auf dem KMS-Service und der Decrypt-API.
- Zusammenfassen aller übereinstimmenden Ereignisse in 1-Stunden-Behälter.
- Visualisieren der Ergebnisse in einem Liniendiagramm.
Abfrage
#KMS: Hourly Decrypt Call Volume filter eventSource='kms.amazonaws.com' and eventName='Decrypt' | stats count(*) as Hits by bin(1h)
Ergebnisse
Behälter (1 Std.) | Treffer |
---|---|
2022-02-18 19:00:00.000 | 16 |
2022-02-18 18:00:00.000 | 25 |
2022-02-18 17:00:00.000 | 28 |
2022-02-18 16:00:00.000 | 14 |
2022-02-18 15:00:00.000 | 16 |
Relevante Informationen
Überwachen von AWS-CloudTrail-Protokolldaten in Amazon CloudWatch (Video)
Abfrage zum Dashboard hinzufügen oder Abfrageergebnisse exportieren

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 7 Monaten
- AWS OFFICIALAktualisiert vor einem Jahr