如何使用 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
結果
@timestamp | awsRegion | eventCategory | eventSource | eventName | eventType | sourceIPAddress | userIdentity.type |
---|---|---|---|---|---|---|---|
2022-02-18 18:00:09.647 | ca-central-1 | Management | sts.amazonaws.com | AssumeRole | AwsApiCall | cloudtrail.amazonaws.com | AWSService |
2022-02-18 18:00:09.647 | ca-central-1 | Management | sts.amazonaws.com | AssumeRole | AwsApiCall | cloudtrail.amazonaws.com | AWSService |
查詢 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
結果
eventTime | API | InstanceID | IssuerType | IdentityType | userName |
---|---|---|---|---|---|
2022-02-18T17:36:38Z | RunInstances | i-0325b4d6ae4e93c75 | Role | AssumedRole | AWSServiceRoleForAutoScaling |
2022-02-18T13:45:18Z | RunInstances | i-04d17a8425b7cb59a | Role | AssumedRole | AWSServiceRoleForAutoScaling |
查詢 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
結果
eventTime | eventName | Response | ARN | User_Type |
---|---|---|---|---|
2022-02-18T17:35:44Z | ConsoleLogin | Success | arn:aws:iam::123456789012:user/test_user | IAMUser |
2022-02-17T13:53:58Z | ConsoleLogin | Success | arn:aws:sts::123456789012:assumed-role/Admin/test_user | AssumedRole |
查詢 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
結果
eventTime | eventName | Response | User | User_Type | sourceIPAddress | errorMessage |
---|---|---|---|---|---|---|
2022-02-18T20:10:55Z | ConsoleLogin | Failure | echo | IAMUser | 12.34.56.89 | Failed authentication |
2022-02-18T20:10:43Z | ConsoleLogin | Failure | echo | IAMUser | 12.34.56.89 | Failed 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
結果
@timestamp | API | BucketName | Key | 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 |
查詢 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
結果
API | BucketName | Key | Hits |
---|---|---|---|
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 |
查詢 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_Key | User | Hits |
---|---|---|
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 |
查詢 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_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 |
查詢 10: 彙總含錯誤代碼的 S3 API 呼叫
目標
- 根據 Amazon S3 服務和 errorCode 欄位的存在進行篩選。
- 根據計數統計彙總所有相符事件。
- 根據 errorCode 和 errorMessage 區分結果。
- 依最大相符數排序。
查詢
#S3: Summarize Error Codes filter eventSource = 's3.amazonaws.com' and ispresent(errorCode) | stats count(*) as Hits by errorCode, errorMessage | sort Hits desc | limit 5
結果
errorCode | errorMessage | Hits |
---|---|---|
AccessDenied | Access Denied | 86 |
NoSuchBucketPolicy | The bucket policy does not exist | 80 |
NoSuchPublicAccessBlockConfiguration | The public access block configuration was not found | 79 |
ObjectLockConfigurationNotFoundError | Object Lock configuration does not exist for this bucket | 3 |
ServerSideEncryptionConfigurationNotFoundError | The server side encryption configuration was not found | 3 |
查詢 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
結果
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 |
查詢 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.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 |
相關資訊
AWS 官方已更新 5 個月前
沒有評論
相關內容
- 已提問 1 個月前lg...
- 已提問 10 個月前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 4 個月前
- AWS 官方已更新 3 年前
- AWS 官方已更新 5 個月前
- AWS 官方已更新 7 個月前