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

Lesedauer: 9 Minute
0

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

@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: 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

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

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

eventTimeeventNameReaktionARNUser_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 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

eventTimeeventNameReaktionBenutzerUser_TypesourceIPAddresserrorMessage
2022-02-18T20:10:55ZConsoleLoginFehlerEchoIAMUser12.34.56.89Authentifizierung fehlgeschlagen
2022-02-18T20:10:43ZConsoleLoginFehlerEchoIAMUser12.34.56.89Authentifizierung 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

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

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

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

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

errorCodeerrorMessageTreffer
AccessDeniedZugriff verweigert86
NoSuchBucketPolicyDie Bucket-Richtlinie ist nicht vorhanden80
NoSuchPublicAccessBlockConfigurationDie Blockkonfiguration für den öffentlichen Zugriff wurde nicht gefunden79
ObjectLockConfigurationNotFoundErrorDie Objektsperren-Konfiguration ist für diesen Bucket nicht vorhanden3
ServerSideEncryptionConfigurationNotFoundErrorDie serverseitige Verschlüsselungs-Konfiguration wurde nicht gefunden3

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

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

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.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

Relevante Informationen

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

Abfrage zum Dashboard hinzufügen oder Abfrageergebnisse exportieren

Beispielabfragen von CloudWatch Logs Insights

Abfragebefehle für CloudWatch Logs Insights

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren