如何使用 CloudTrail 来搜索特定资源的操作,如谁在 EC2 实例上删除了 EBS 卷?

2 分钟阅读
0

我想使用 AWS CloudTrail 在特定资源中搜索信息。

解决方法

重要事项:

  • 每个账户的查询请求速率限制为每秒一个请求。如果超过此限制,则会出现节流错误。
  • 在事件发生之前,请确认 CloudTrail 日志记录已开启。否则,您无法在事件发生的时间范围内查找该事件。
  • AWS 服务可能会继续添加事件。CloudTrail 将事件记录在事件历史记录中。
  • 如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

以下是从 AWS CLI 执行的示例。这些命令中的大多数都使用命令行 JSON processor, jq。有关 jq 的更多信息,请访问 jq 网站。

要在 Amazon Linux 上安装 jq,请使用 yum

yum install jq

注意: 有适用于其他平台的 jq 安装选项。有关 jq 安装选项的信息,请参阅 jq 网站上的下载 jq

列出特定资源的所有事件名称

以下示例使用 Amazon Elastic Block Store (Amazon EBS)卷 ID 来获取任何 API 操作的近期事件列表。将 vol-0f59a355c2exampleAttributeValue 替换为您的卷 ID,将 us-east-1 替换为您的区域。

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceName,AttributeValue=vol-0f59a355c2example --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1

**注意:**CloudTrail 填充最近通话所需的时间可能比预期的要长。

您可以使用不同的资源 ID(例如 EBS 快照)来运行相同的示例。将 snap-0993c0d9a8exampleAttributeValue 替换为您的快照 ID,将 us-east-1 替换为您的区域。

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceName,AttributeValue=snap-0993c0d9a8example --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1

列出特定资源的特定 API 操作的事件

以下示例说明如何获取 EBS 卷的 DeleteVolume API 操作的最近事件列表。将 vol-0f59a355c2exampleAttributeValue 替换为你的卷 ID。

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceName,AttributeValue=vol-0f59a355c2example --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output json --region us-east-1 | jq -r '.[] | select(.event == "DeleteVolume")'

输出示例:

{  "username": "jdoe",
  "eventid": "e3ec4051-9999-4e87-9999-9cc72example",
  "resource": "vol-0f59a355c2example",
  "accesskey": "ASIAXUZVKEUACEXAMPLE",
  "time": 1550191014,
  "event": "DeleteVolume"
}

列出所有资源的特定事件名称

以下示例使用 DeleteVolume 事件名称作为筛选器来列出已删除的 EBS 卷。请将 us-east-1 替换为您的区域。

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=DeleteVolume --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1

列出所有资源的已终止的 EC2 实例

以下示例列出了最近的 EC2 TerminateInstances。将 -region us-east-1 替换为您的区域。

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=TerminateInstances --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1

查看特定事件 ID 的详细信息

找到事件 ID 后,您可以查看有关此事件的详细信息。将 0840b15f-75b5-4082-a194-86e15exampleAttributeValue 替换为您的事件 ID,将 us-east-1 替换为您的区域。

$ aws cloudtrail lookup-events --query "Events[0].CloudTrailEvent" --output text --lookup-attribute AttributeKey=EventId,AttributeValue=0840b15f-75b5-4082-a194-86e15example --region us-east-1 | jq -r '.'

输出示例:

{  "eventVersion": "1.05",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "AROAJ3THTCWDOKEXAMPLE:jdoe",
    "arn": "arn:aws:sts::52570EXAMPLE:assumed-role/Admin/jdoe",
    "accountId": "52570example",
    "accessKeyId": "ASIAXUZVKEUAKEXAMPLE",
    "sessionContext": {
      "attributes": {
        "mfaAuthenticated": "false",
        "creationDate": "2019-02-14T23:55:15Z"
      },
      "sessionIssuer": {
        "type": "Role",
        "principalId": "AROAJ3THTCWDOKEXAMPLE",
        "arn": "arn:aws:iam::52570EXAMPLE:role/Admin",
        "accountId": "52570EXAMPLE",
        "userName": "Admin"
      }
    }
  },
  "eventTime": "2019-02-15T00:48:05Z",
  "eventSource": "ec2.amazonaws.com",
  "eventName": "DeleteVolume",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "999.999.999.999",
  "userAgent": "aws-cli/1.16.999 Python/2.7.15 Darwin/17.7.0 botocore/1.12.91",
  "requestParameters": {
    "volumeId": "vol-0c50d65c6eexample"
  },
  "responseElements": {
    "_return": true
  },
  "requestID": "a8a43ccd-736d-4b09-ba75-24b9cexample",
  "eventID": "0840b15f-75b5-4082-a194-86e15example",
  "eventType": "AwsApiCall",
  "recipientAccountId": "52570EXAMPLE"
}

指定日期范围

要指定事件的日期范围,请使用 --start-time--end-time 参数:

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=DeleteVolume --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1 --start-time 2019-01-01T13:00Z --end-time 2019-03-01T14:00Z

**注意:**从有效时间戳格式列表中选择您的首选时间戳。

列出的事件发生在开始时间之后和结束时间之前(包括结束)。

默认开始时间为最近 90 天内数据可用的最早日期。默认的结束时间为最接近当前时间的事件发生时间。如果指定的开始时间晚于指定的结束时间,则会返回 InvalidTimeRangeException 错误。

AWS 官方
AWS 官方已更新 7 个月前