如何使用 CloudWatch Logs Insights 來擷取並分析我的 CloudTrail Logs?

7 分的閱讀內容
0

我想使用 Amazon CloudWatch Logs Insights 來擷取並分析我的 Amazon CloudTrail Logs。

簡短說明

將 CloudTrail 設定為記錄 CloudWatch Logs 之後,您可以使用 CloudWatch Logs Insights 中的查詢來擷取 CloudTrail 日誌。然後,您可以監控特定的帳戶活動。

解決方法

使用下列查詢來擷取 CloudWatch Logs,以分析和探索 Amazon Simple Storage Service (Amazon S3) 儲存貯體和物件活動。請注意,依預設,CloudTrail 不會擷取 Amazon S3 資料事件。您必須在 CloudTrail 中開啟事件記錄,才能擷取 S3 儲存貯體和物件的事件日誌。

您可以對這些範例查詢進行建置以建立其他和更多符合使用案例的複雜 Logs Insights 查詢。您也可以將查詢與 CloudWatch 儀表板整合,以便將查詢視覺化為圖表和圖解,以及相關的指標。

查詢 1: 最新事件

目標

使用預設的 @timestamp@message 欄位來擷取最近的 CloudTrail 日誌事件。

查詢

#Retrieve the most recent CloudTrail events
fields @timestamp, @message
| sort @timestamp desc
| limit 2

結果

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

查詢 2: 分割個別欄位

目標

  • 隔離 @message 中的個別欄位。
  • 在 CloudTrail 事件中顯示選取的欄位。

查詢

#Breakout Individual Fields
fields @timestamp, awsRegion, eventCategory, eventSource, eventName, eventType, sourceIPAddress, userIdentity.type
| sort @timestamp desc
| limit 2

結果

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

查詢 3: 依 Amazon Elastic Compute Cloud (Amazon EC2) 執行執行個體篩選

目標

  • 擷取 CloudTrail 事件中的特定欄位。
  • 重新命名欄位以使用更有意義的標籤。
  • 根據 API 呼叫篩選此帳戶中啟動的最新 EC2 執行個體。

查詢

#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

結果

eventTimeAPIInstanceIDIssuerTypeIdentityTypeuserName
2022-02-18T17:36:38ZRunInstancesi-0325b4d6ae4e93c75RoleAssumedRoleAWSServiceRoleForAutoScaling
2022-02-18T13:45:18ZRunInstancesi-04d17a8425b7cb59aRoleAssumedRoleAWSServiceRoleForAutoScaling

查詢 4: 依最近的主控台登入篩選

目標

  • 擷取 CloudTrail 事件中的特定欄位。
  • 重新命名欄位以使用更有意義的標籤。
  • 根據 API 呼叫篩選主控台中的最新的登入。

查詢

#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

結果

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

查詢 5: 依驗證失敗的主控台登入篩選

目標

  • 擷取 CloudTrail 事件中的特定欄位。
  • 重新命名欄位以使用更有意義的標籤。
  • 從主控台篩選最新的失敗登入。

查詢

#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

結果

eventTimeeventNameResponseUserUser_TypesourceIPAddresserrorMessage
2022-02-18T20:10:55ZConsoleLoginFailureechoIAMUser12.34.56.89Failed authentication
2022-02-18T20:10:43ZConsoleLoginFailureechoIAMUser12.34.56.89Failed authentication

查詢 6: 依 Amazon Simple Storage Service (Amazon S3) 物件上傳篩選

目標

  • 擷取 CloudTrail 事件中的特定欄位。
  • 重新命名欄位以使用更有意義的標籤。
  • 對 API 呼叫和目標 S3 儲存貯體進行篩選。

查詢

#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

結果

@timestampAPIBucketNameKeyUserName
2022-02-12 17:16:07.415PutObjecttest_bucket1w4r9Hg4V7g.jpg
2022-02-12 16:29:43.470PutObjecttest_bucket26wyBy0hBoB.jpg

查詢 7: 彙總 S3 活動

目標

  • 根據 Amazon S3 服務進行篩選。
  • 根據計數統計彙總所有相符事件。
  • 根據 API、S3 儲存貯體和金鑰區分結果。
  • 使用 stats 命令來重新命名欄位。
  • 依遞減順序排序。

查詢

#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

結果

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

查詢 8: 彙總 AWS KMS 解密活動

目標

  • 根據 AWS Key Management Service (AWS KMS) 服務和解密 API 進行篩選。
  • 使用 fields 命令來重新命名欄位,然後依使用者友善的名稱彙總。
  • 根據計數統計彙總所有相符事件。
  • 根據 AWS KMS 金鑰和使用者區分結果。
  • 依遞減順序排序。

查詢

#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

結果

KMS_KeyUserHits
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

查詢 9: 彙總含錯誤的 API 呼叫

目標

  • 根據 errorCode 欄位的存在進行篩選。
  • 根據計數統計彙總所有相符事件。
  • 根據 AWS 服務、API、以及 errorCode 區分結果。
  • 使用 stats 命令來重新命名欄位。
  • 依最大相符數排序。

查詢

#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

結果

AWS_ServiceAPIerrorCodeNum_of_Events
s3.amazonaws.comGetBucketPublicAccessBlockNoSuchPublicAccessBlockConfiguration79
lambda.amazonaws.comGetLayerVersionPolicy20181031ResourceNotFoundException66
s3.amazonaws.comGetBucketPolicyStatusNoSuchBucketPolicy60
s3.amazonaws.comHeadBucketAccessDenied47
logs.amazonaws.comCreateLogStreamResourceNotFoundException21

查詢 10: 彙總含錯誤代碼的 S3 API 呼叫

目標

  • 根據 Amazon S3 服務和 errorCode 欄位的存在進行篩選。
  • 根據計數統計彙總所有相符事件。
  • 根據 errorCodeerrorMessage 區分結果。
  • 依最大相符數排序。

查詢

#S3: Summarize Error Codes
filter eventSource = 's3.amazonaws.com' and ispresent(errorCode)
| stats count(*) as Hits by errorCode, errorMessage
| sort Hits desc
| limit 5

結果

errorCodeerrorMessageHits
AccessDeniedAccess Denied86
NoSuchBucketPolicyThe bucket policy does not exist80
NoSuchPublicAccessBlockConfigurationThe public access block configuration was not found79
ObjectLockConfigurationNotFoundErrorObject Lock configuration does not exist for this bucket3
ServerSideEncryptionConfigurationNotFoundErrorThe server side encryption configuration was not found3

查詢 11: 彙總依 AWS 服務、API、以及 AWS Identity and Access Management (IAM) 使用者的 AccessDenied/UnauthorizedOperation API 呼叫

目標

  • 對 AccessDenied 或 UnauthorizedOperation CloudTrail 事件進行篩選。
  • 根據計數統計彙總所有相符事件。
  • 根據 errorCode、AWS 服務、API、以及 IAM 使用者或角色區分結果。
  • 使用 stats 命令來重新命名欄位。
  • 依遞減順序排序。

查詢

#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

結果

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

查詢 12: AWS KMS 每小時呼叫量

目標

  • 根據 AWS KMS 服務和解密 API 進行篩選。
  • 將所有相符的事件彙總到一小時的垃圾桶中。
  • 在折線圖上視覺化結果。

查詢

#KMS: Hourly Decrypt Call Volume
filter eventSource='kms.amazonaws.com' and eventName='Decrypt'
| stats count(*) as Hits by bin(1h)

結果

bin(1h)Hits
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

相關資訊

監視 Amazon CloudWatch 中的 AWS CloudTrail 日誌資料 (影片)

將查詢新增至儀表板或匯出查詢結果