将流日志发布到 CloudWatch Logs - Amazon Virtual Private Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

将流日志发布到 CloudWatch Logs

流日志可以将流日志数据直接发布到 Amazon CloudWatch。将流日志发布到 CloudWatch Logs 时,适用已出售日志的数据引入和存档费用。有关更多信息,请参阅 Amazon CloudWatch 定价

在发布到 CloudWatch Logs 时,流日志数据将发布到日志组,并且每个网络接口在该日志组中有唯一的日志流。日志流包含流日志记录。您可以创建将数据发布到相同日志组的多个流日志。如果相同日志组中的一个或多个流日志存在相同网络接口,其中就会有一个组合日志流。如果您指定了一个流日志应该捕获已拒绝流量,而另一个流日志应该捕获已接受流量,则组合日志流会捕获所有流量。

在 CloudWatch Logs 中,timestamp (时间戳) 字段对应于流日志记录中捕获的开始时间。ingestionTime 字段指示 CloudWatch Logs 开始接收流日志记录的日期和时间。此时间戳晚于在流日志记录中捕获的结束时间。

用于将流日志发布到 CloudWatch Logs 的 IAM 角色

与您的流日志关联的 IAM 角色必须具有足够的权限,以便将流日志发布到 CloudWatch Logs 中的指定日志组。IAM 角色必须属于您的Amazon账户。

附加到您的 IAM 角色的 IAM 策略必须至少包括以下权限。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Effect": "Allow", "Resource": "*" } ] }

另请确保您的角色具有信任关系,以允许流日志服务代入该角色。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "vpc-flow-logs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

您可以更新现有角色,或使用以下过程创建用于流日志的新角色。

创建流日志角色

为流日志创建 IAM 角色

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择 RolesCreate role

  3. 对于 Select type of trusted entity(选择受信任实体的类型),选择 Amazon service(亚马逊云科技服务)。对于 Use case (使用案例),选择 EC2。选择下一步: 权限

  4. Attach permissions policies (附加权限策略) 页上,选择 Next: Tags (下一步: 标签),还可以选择性地添加标签。选择 Next: Review (下一步: 审核)

  5. 输入您的角色的名称,并且可以选择提供描述。选择创建角色

  6. 选择角色的名称。对于 Permissions (权限),依次选择 Add inline policy (添加内联策略)JSON

  7. 用于将流日志发布到 CloudWatch Logs 的 IAM 角色 中复制第一个策略,并将其粘贴到窗口中。选择查看策略

  8. 为您的策略输入名称,然后选择 Create policy (创建策略)

  9. 选择角色的名称。对于 Trust relationships (信任关系),选择 Edit trust relationship (编辑信任关系)。在现有策略文档中,将服务从 ec2.amazonaws.com 更改为 vpc-flow-logs.amazonaws.com。选择 Update Trust Policy

  10. Summary 页面上,记录您的角色的 ARN。创建流日志时需要此 ARN。

IAM 用户传递角色的权限

用户还必须有权对与流日志关联的 IAM 角色使用 iam:PassRole 操作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iam:PassRole"], "Resource": "arn:aws:iam::account-id:role/flow-log-role-name" } ] }

创建发布到 CloudWatch Logs 的流日志

您可以为 VPC、子网或网络接口创建流日志。如果以 IAM 用户身份执行这些步骤,请确保您具有使用 iam:PassRole 操作的权限。有关更多信息,请参阅IAM 用户传递角色的权限

先决条件

创建目标日志组。打开 CloudWatch 控制台中的日志组页面并选择创建日志组。输入日志组的名称,然后选择创建

使用控制台为网络接口创建流日志

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Network Interfaces

  3. 选择一个或多个网络接口的复选框,然后选择操作创建流日志

  4. 对于筛选条件,指定要记录的流量的类型。选择全部将记录接受和拒绝的流量,选择拒绝将仅记录被拒绝的流量,选择接受将仅记录接受的流量。

  5. 对于 Maximum aggregation interval (最大聚合时间间隔),选择捕获流并聚合到一个流日志记录中的最大时间段。

  6. 对于目的地,选择发送到 CloudWatch Logs

  7. 对于目标日志组,选择您创建的目标日志组的名称。

  8. 对于 IAM role (IAM 角色),指定有权将日志发布到 CloudWatch Logs 的角色的名称。

  9. 对于日志记录格式,选定流日志记录的格式。

    • 要使用默认格式,请选择 Amazon default format(亚马逊云科技默认格式)。

    • 要使用自定义格式,请选择自定义格式然后从日志格式选择字段。

    • 要创建包括默认字段的自定义日志流,请选择 Amazon default format(亚马逊云科技默认格式),复制 Format preview(格式预览)中的字段,然后选择 Custom format(自定义格式)并将字段粘贴到文本框中。

  10. (可选)选择添加新标签以将标签应用于流日志。

  11. 选择 Create flow log (创建流日志)

使用控制台为 VPC 或子网创建流日志

  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择您的 VPC 或者选择子网

  3. 选择一个或多个 VPC 或子网的复选框,然后选择操作创建流日志

  4. 对于筛选条件,指定要记录的流量的类型。选择全部将记录接受和拒绝的流量,选择拒绝将仅记录被拒绝的流量,选择接受将仅记录接受的流量。

  5. 对于 Maximum aggregation interval (最大聚合时间间隔),选择捕获流并聚合到一个流日志记录中的最大时间段。

  6. 对于目的地,选择发送到 CloudWatch Logs

  7. 对于目标日志组,选择您创建的目标日志组的名称。

  8. 对于 IAM role (IAM 角色),指定有权将日志发布到 CloudWatch Logs 的角色的名称。

  9. 对于日志记录格式,选定流日志记录的格式。

    • 要使用默认格式,请选择 Amazon default format(亚马逊云科技默认格式)。

    • 要使用自定义格式,请选择自定义格式然后从日志格式选择字段。

    • 要创建包括默认字段的自定义日志流,请选择 Amazon default format(亚马逊云科技默认格式),复制 Format preview(格式预览)中的字段,然后选择 Custom format(自定义格式)并将字段粘贴到文本框中。

  10. (可选)选择添加新标签以将标签应用于流日志。

  11. 选择 Create flow log (创建流日志)

使用命令行创建流日志

使用以下命令之一。

以下 Amazon CLI 示例创建为子网 subnet-1a2b3c4d 捕获所有接受的流量的流日志。使用 IAM 角色 publishFlowLogs 在账户 123456789101 中将流日志传送到 CloudWatch Logs 中名为 my-flow-logs 的日志组。

aws ec2 create-flow-logs --resource-type Subnet --resource-ids subnet-1a2b3c4d --traffic-type ACCEPT --log-group-name my-flow-logs --deliver-logs-permission-arn arn:aws:iam::123456789101:role/publishFlowLogs

处理 CloudWatch Logs 中的流日志记录

您可以像使用 CloudWatch Logs 收集的任意其他日志事件一样使用流日志记录。有关监视日志数据和指标筛选条件的更多信息,请参阅 Amazon CloudWatch 用户指南 中的搜索和筛选日志数据

示例:为流日志创建 CloudWatch 指标筛选条件和警报

在此示例中,您有一个适用于 eni-1a2b3c4d 的流日志。您要创建一个警报,如果 1 小时内有 10 次或超过 10 次通过 TCP 端口 22 (SSH) 连接到您的实例的尝试遭到拒绝,该警报将向您发出提醒。首先,您必须创建一个指标筛选条件,该指标筛选条件与为其创建警报的流量的模式相匹配。然后,您可以为该指标筛选条件创建警报。

为已拒绝的 SSH 流量创建指标筛选条件并为该筛选条件创建警报

  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中,选择 Logs

  3. 为流日志的日志组选择相关联的 Metric Filters 值,然后选择 Add Metric Filter

  4. 对于筛选模式,输入以下内容:

    [version, account, eni, source, destination, srcport, destport="22", protocol="6", packets, bytes, windowstart, windowend, action="REJECT", flowlogstatus]
  5. 对于 Select Log Data to Test (选择要测试的日志数据),选择您的网络接口对应的日志流。(可选)要查看与筛选条件模式匹配的日志数据行,请选择 Test Pattern (测试模式)。准备好之后,选择 Assign Metric

  6. 提供指标命名空间和名称,并确保将指标值设置为 1。完成后,选择 Create Filter

  7. 在导航窗格中,依次选择 AlarmsCreate Alarm

  8. Custom Metrics 部分中,为您创建的指标筛选条件选择命名空间。

    新指标可能需要几分钟才会在控制台中显示。

  9. 选择您创建的指标名称,然后选择 Next (下一步)

  10. 输入警报的名称和说明。对于 is (为) 字段,选择 >= 并输入 10。对于 for (期间) 字段,保留默认值 1 以指示连续期间。

  11. 对于 Period (周期),选择 1 Hour (1 小时)。对于 Statistic (统计数据),选择 Sum (总计)Sum 统计数据确保您捕获指定时间段内的数据点的总数。

  12. 操作部分中,您可以选择将通知发送到现有列表。或者,您可以创建新列表并输入在警报触发时应接收通知的电子邮件地址。完成后,选择 Create Alarm