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

上次更新时间:2019 年 4 月 30 日

如何使用 AWS CloudTrail 来搜索给定资源的信息,如资源的所有事件名称,或者谁删除了 Amazon Elastic Block Store (Amazon EBS) 卷或 Amazon Elastic Compute Cloud (Amazon EC2) 实例上的快照?

简短描述

您可以使用 AWS CloudTrail 来记录和监控跨 AWS 基础设施的账户活动。要执行此操作,您必须开启 CloudTrail,并在您想要查询 EC2 资源所在的 AWS 区域中启用日志记录。

重要提示

  • 查找请求的速率限制为每个账户每秒一个请求。如果超过此限制,则会发生限流错误。
  • 如果 CloudTrail 未启用日志记录,则无法查找所选时间范围内发生的事件。

解决方法

以下是从 AWS 命令行界面 (AWS CLI) 执行的示例。请注意,大多数这些命令使用 jq

使用 yum 在 Amazon Linux 中安装 jq。

yum install jq

注意:其他平台有 jq 安装选项

为给定资源列出所有事件名称

以下示例使用 EBS 卷 ID 获取任何 API 操作的最近事件列表。将 vol-0f59a355c2example属性值us-east-1--region 替换为您自己的值。

$ 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-0993c0d9a8example属性值us-east-1--region 替换为您的值。

$ 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 操作

以下示例显示如何获取最近事件列表的 DeleteVolume API 操作的 EBS 卷。将 vol-0f59a355c2example属性值替换为您的卷 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 卷。将 --region 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 终止实例。将 –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-86e15example 的属性值替换为您的事件 ID,并将 --region 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 参数指定日期范围内的事件。开始时间到结束时间(含)发生的事件列表。

默认开始时间为数据在过去 90 天内可用的最早日期。默认结束时间为最接近当前时间所发生事件的时间。

如果指定的开始时间晚于指定的结束时间,则会返回 InvalidTimeRangeException 错误。

$ 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

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


这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?