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

将流日志发布到 CloudWatch Logs

流日志可以将流日志数据直接发布到 Amazon CloudWatch。

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

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

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

有关 CloudWatch Logs 的更多信息,请参阅 Amazon CloudWatch Logs 用户指南中的发送到 CloudWatch Logs 的日志

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

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

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

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

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

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

建议您使用 aws:SourceAccountaws:SourceArn 条件键来防止出现混淆代理人问题。例如,您可以将以下条件块添加到以前的信任策略。源帐户是流日志的所有者,并且源 ARN 是流日志 ARN。如果您不知道流日志 ID,则可以用通配符 (*) 替换 ARN 的该部分,然后在创建流日志后更新策略。

"Condition": { "StringEquals": { "aws:SourceAccount": "account_id" }, "ArnLike": { "aws:SourceArn": "arn:aws:ec2:region:account_id:vpc-flow-log/flow-log-id" } }

为流日志创建或更新 IAM 角色

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

为流日志创建 IAM 角色

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

  2. 在导航窗格中,选择 Roles(角色)和 Create role(创建角色)。

  3. 对于选择受信任实体的类型,选择 Amazon 服务。对于 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. 对于 Destination log group (目标日志组),选择您创建的目标日志组的名称。

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

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

    • 要使用默认格式,请选择Amazondefault 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. 对于 Destination log group (目标日志组),选择您创建的目标日志组的名称。

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

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

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

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

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

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

使用命令行创建流日志

使用以下命令之一。

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

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(日志)Log groups(日志组)

  3. 选中日志组对应的复选框,然后选择 Actions(操作)Create 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(测试模式)。准备就绪后,选择 Next(下一步)

  6. 输入筛选条件名称、指标命名空间和指标名称。将指标值设置为 1。完成后,选择 Next(下一步),然后选择 Create metric filter(创建指标筛选条件)

  7. 在导航窗格中,依次选择 Alarms(警报)All alarms(所有警报)

  8. 选择创建警报

  9. 为您创建的指标筛选条件选择命名空间。

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

  10. 选择您创建的指标名称,然后选择 Select metric(选择指标)

  11. 按如下所示配置警报,然后选择 Next(下一步)

    • 对于 Statistic (统计数据),选择 Sum (总计)。这可以确保您捕获指定时间段内的数据点的总数。

    • 对于 Period(周期),选择 1 hour(1 小时)

    • 对于 Whenever(每当),选择 Greater/Equal(大于/等于,>=),然后输入 10 作为阈值。

    • 对于 Additional configuration(其他配置)Datapoints to alarm(警报的数据点数),将默认值设为 1。

  12. 对于 Notification(通知),选择现有的 SNS 主题,或选择 Create new topic(新建主题)创建一个新主题。选择 Next (下一步)

  13. 输入警报的名称和描述,然后选择 Next(下一步)

  14. 配置完警报后,选择 Create alarm(创建警报)