Wie kann ich meine CloudTrail-Protokolle mit CloudWatch Logs Insights abrufen und dann analysieren?

Lesedauer: 9 Minute
0

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

@timestampawsRegioneventCategoryeventSourceeventNameeventTypesourceIPAddressuserIdentity.type
2022-02-18 18:00:09.647ca-central-1Verwaltungsts.amazonaws.comAssumeRoleAwsApiCallcloudtrail.amazonaws.comAWSService
2022-02-18 18:00:09.647ca-central-1Verwaltungsts.amazonaws.comAssumeRoleAwsApiCallcloudtrail.amazonaws.comAWSService

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

eventTimeAPIInstanceIDIssuerTypeIdentityTypeuserName
2022-02-18T17:36:38ZRunInstancesi-0325b4d6ae4e93c75RolleAssumedRoleAWSServiceRoleForAutoScaling
2022-02-18T13:45:18ZRunInstancesi-04d17a8425b7cb59aRolleAssumedRoleAWSServiceRoleForAutoScaling

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

eventTimeeventNameAntwortARNUser_Type
2022-02-18T17:35:44ZConsoleLoginErfolgarn:aws:iam::123456789012:user/test_userIAMUser
2022-02-17T13:53:58ZConsoleLoginErfolgarn:aws:sts::123456789012:assumed-role/Admin/test_userAssumedRole

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

eventTimeeventNameAntwortBenutzerUser_TypesourceIPAddresserrorMessage
2022-02-18T20:10:55ZConsoleLoginFehlerechoIAMUser12.34.56.89Fehlgeschlagene Authentifizierung
2022-02-18T20:10:43ZConsoleLoginFehlerechoIAMUser12.34.56.89Fehlgeschlagene 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

@timestampAPIBucketNameSchlüsselUserName
2022-02-12 17:16:07.415PutObjecttest_bucket1w4r9Hg4V7g.jpg
2022-02-12 16:29:43.470PutObjecttest_bucket26wyBy0hBoB.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

APIBucketNameSchlüsselTreffer
ListAccessPoints44
GetBucketAclteam1-ctrail-multi-region27
GetBucketAclteam2-dub-cloudtrail27
GetBucketAclaws-cloudtrail-logs-123456789012-ba940dd726
GetObjectdevsupport-prodrdscr/individual/12345678901218

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_KeyBenutzerTreffer
arn:aws:kms:us-east-1:123456789012:key/03f2923d-e213-439d-92cf-cbb444bd85bdAWSServiceRoleForConfig12
arn:aws:kms:us-east-1:123456789012:key/03f2923d-e213-439d-92cf-cbb444bd85bdFoxTrot-1UQJBODTWZYZ68

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_ServiceAPIerrorCodeNum_of_Events
s3.amazonaws.comGetBucketPublicAccessBlockNoSuchPublicAccessBlockConfiguration79
lambda.amazonaws.comGetLayerVersionPolicy20181031ResourceNotFoundException66
s3.amazonaws.comGetBucketPolicyStatusNoSuchBucketPolicy60
s3.amazonaws.comHeadBucketAccessDenied47
logs.amazonaws.comCreateLogStreamResourceNotFoundException21

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

errorCodeerrorMessageTreffer
AccessDeniedZugriff verweigert86
NoSuchBucketPolicyDie Bucket-Richtlinie existiert nicht80
NoSuchPublicAccessBlockConfigurationDie Konfiguration der Blockade des öffentlichen Zugriffs wurde nicht gefunden79
ObjectLockConfigurationNotFoundErrorDie Object Lock-Konfiguration ist für diesen Bucket nicht vorhanden3
ServerSideEncryptionConfigurationNotFoundErrorDie serverseitige Verschlüsselungskonfiguration wurde nicht gefunden3

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

errorCodeAWS_ServiceAPIIdentityTypeInvokedByNumberOfEvents
AccessDenieds3.amazonaws.comHeadBucketAWSServicedelivery.logs.amazonaws.com83
AccessDenieds3.amazonaws.comGetObjectAssumedRole9

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.00016
2022-02-18 18:00:00.00025
2022-02-18 17:00:00.00028
2022-02-18 16:00:00.00014
2022-02-18 15:00:00.00016

Ähnliche Informationen

Überwachen der AWS CloudTrail-Protokolldaten in Amazon CloudWatch (Video)

Hinzufügen einer Abfrage zum Dashboard oder Exportieren von Abfrageergebnissen