Wie kann ich meine CloudTrail-Protokolle mit CloudWatch Logs Insights abrufen und dann analysieren?
Ich möchte Amazon CloudWatch Logs Insights verwenden, um meine Amazon CloudTrail-Protokolle abzurufen und anschließend zu analysieren.
Kurzbeschreibung
Nachdem Sie CloudTrail für die Protokollierung von CloudWatch Logs konfiguriert haben, können Sie Abfragen in CloudWatch Logs Insights verwenden, um die CloudTrail-Protokolle abzurufen. Anschließend können Sie bestimmte Kontoaktivitäten überwachen.
Lösung
Verwenden Sie die folgenden Abfragen, um CloudWatch Logs abzurufen, um die Bucket- und Objektaktivitäten von Amazon Simple Storage Service (Amazon S3) zu analysieren und zu untersuchen. Beachten Sie, dass CloudTrail standardmäßig keine Amazon S3-Datenereignisse erfasst. Sie müssen die Ereignisprotokollierung in CloudTrail aktivieren, um Ereignisprotokolle für S3-Buckets und -Objekte abzurufen.
Sie können auf diesen Beispielabfragen aufbauen, um zusätzliche und komplexere Logs Insights-Abfragen zu erstellen, die Ihrem Anwendungsfall entsprechen. Sie können Abfragen auch in Ihr CloudWatch-Dashboard integrieren, um Ihre Abfragen zusammen mit zugehörigen Metriken als Diagramme und Grafiken zu visualisieren.
Abfrage 1: Aktuelle Ereignisse
Zielsetzung
Ruft die neuesten CloudTrail Protokollereignisse mit den Standardfeldern @timestamp und @message ab.
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" (Ausgabe gekürzt) |
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": (Ausgabe gekürzt) |
Abfrage 2: Einzelne Felder aufteilen
Zielsetzung
- Isolieren der einzelnen Felder in @message.
- Zeigt die ausgewählten Felder im CloudTrail-Ereignis an.
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: Nach ausgeführten Amazon Elastic Compute Cloud (Amazon EC2) -Instances filtern
Zielsetzung
- Ruft bestimmte Felder im CloudTrail-Ereignis ab.
- Benennen Sie Felder um, um aussagekräftigere Beschriftungen zu verwenden.
- Filtern Sie die neuesten EC2-Instances, die in diesem Konto gestartet wurden, 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: Nach der letzten Konsolenanmeldung filtern
Zielsetzung
- Ruft bestimmte Felder im CloudTrail-Ereignis ab.
- Benennen Sie Felder um, um aussagekräftigere Beschriftungen zu verwenden.
- Filtern Sie die neuesten Anmeldungen in der Konsole anhand des API-Aufrufs.
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 | Antwort | 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 der Konsolenanmeldung mit fehlgeschlagener Authentifizierung filtern
Zielsetzung
- Ruft bestimmte Felder im CloudTrail-Ereignis ab.
- Benennen Sie Felder um, um aussagekräftigere Beschriftungen zu verwenden.
- Filtern Sie die letzten erfolglosen Anmeldungen von der Konsole aus.
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 | Antwort | Benutzer | User_Type | sourceIPAddress | errorMessage |
---|---|---|---|---|---|---|
2022-02-18T20:10:55Z | ConsoleLogin | Fehler | echo | IAMUser | 12.34.56.89 | Fehlgeschlagene Authentifizierung |
2022-02-18T20:10:43Z | ConsoleLogin | Fehler | echo | IAMUser | 12.34.56.89 | Fehlgeschlagene Authentifizierung |
Abfrage 6: Nach dem Hochladen von Amazon Simple Storage Service (Amazon S3) -Objekten filtern
Zielsetzung
- Ruft bestimmte Felder im CloudTrail-Ereignis ab.
- Benennen Sie Felder um, um aussagekräftigere Beschriftungen zu verwenden.
- Filtern Sie nach dem API-Aufruf und dem 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: S3-Aktivität zusammenfassen
Zielsetzung
- Filtern basierend auf dem Amazon S3-Service.
- Aggregieren Sie alle übereinstimmenden Ereignisse auf der Grundlage der Zählstatistik.
- Teilen Sie die Ergebnisse auf der Grundlage der API, des S3-Buckets und des Schlüssels auf.
- Benennen Sie die Felder mit dem Befehl stats um.
- Sortiert in 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 AWS KMS-Entschlüsselungsaktivitäten
Zielsetzung
- Filtern basierend auf dem AWS Key Management Service (AWS KMS) -Service und der Decrypt API.
- Verwenden Sie den Befehl fields, um Felder umzubenennen, und aggregieren Sie dann anhand der benutzerfreundlichen Namen.
- Aggregieren Sie alle übereinstimmenden Ereignisse auf der Grundlage der Zählstatistik.
- Teilen Sie die Ergebnisse anhand des AWS-KMS-Schlüssels und des Benutzers auf.
- Sortiert in 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: API-Aufrufe mit Fehlern zusammenfassen
Zielsetzung
- Filtern basierend auf dem Vorhandensein des Felds errorCode.
- Aggregieren Sie alle übereinstimmenden Ereignisse auf der Grundlage der Zählstatistik.
- Teilen Sie die Ergebnisse basierend auf dem AWS-Service, der API und dem errorCode auf.
- Benennen Sie die Felder mit dem Befehl stats um.
- Sortiert nach der größten Anzahl von Treffern.
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: S3-API-Aufrufe mit Fehlercodes zusammenfassen
Zielsetzung
- Filtern basierend auf dem Amazon S3-Service und dem Vorhandensein eines errorCode-Felds.
- Aggregieren Sie alle übereinstimmenden Ereignisse auf der Grundlage der Zählstatistik.
- Teilen Sie die Ergebnisse basierend auf errorCode und errorMessage auf.
- Sortiert nach der größten Anzahl von Treffern.
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 existiert nicht | 80 |
NoSuchPublicAccessBlockConfiguration | Die Konfiguration der Blockade des öffentlichen Zugriffs wurde nicht gefunden | 79 |
ObjectLockConfigurationNotFoundError | Die Object Lock-Konfiguration ist für diesen Bucket nicht vorhanden | 3 |
ServerSideEncryptionConfigurationNotFoundError | Die serverseitige Verschlüsselungskonfiguration wurde nicht gefunden | 3 |
Abfrage 11: Fassen Sie AccessDenied/UnauthorizedOperation-API-Aufrufe nach AWS-Service, API und AWS Identity and Access Management (IAM) -Benutzer zusammen
Zielsetzung
- Filtern Sie entweder nach AccessDenied- oder UnauthorizedOperation CloudTrail-Ereignissen.
- Aggregieren Sie alle übereinstimmenden Ereignisse auf der Grundlage der Zählstatistik.
- Teilen Sie die Ergebnisse nach errorCode, AWS-Service, API und IAM-Benutzer oder -Rolle auf.
- Benennen Sie Felder mit dem Befehl stats um.
- 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: Stündliches Aurufvolumen von AWS KMS
Zielsetzung
- Filtern basierend auf dem AWS-KMS-Service und der Decrypt-API.
- Fassen Sie alle passenden Ereignisse in einstündigen Ablagen zusammen.
- Visualisieren Sie die 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
bin(1h) | 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 |
Ähnliche Informationen
Überwachen der AWS CloudTrail-Protokolldaten in Amazon CloudWatch (Video)
Hinzufügen einer Abfrage zum Dashboard oder Exportieren von Abfrageergebnissen

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 10 Monaten
- AWS OFFICIALAktualisiert vor 5 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 4 Jahren