将流日志发布到 CloudWatch Logs - Amazon Virtual Private Cloud

将流日志发布到 CloudWatch Logs

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

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

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

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

定价

将流日志发布到 CloudWatch Logs 时,适用已出售日志的数据引入和存档费用。有关更多信息,请打开 Amazon CloudWatch Pricing(Amazon CloudWatch 定价),选择 Logs(日志),找到 Vended Logs(已出售日志)。

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

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

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

{ "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. 在导航窗格中,选择策略

  3. 选择创建策略

  4. 创建策略页面上,执行以下操作:

    1. 选择 JSON

    2. 将此窗口的内容替换为此部分开头的权限策略。

    3. 选择下一步

    4. 输入您的策略名称以及可选的描述和标签,然后选择创建策略

  5. 在导航窗格中,选择角色

  6. 选择 Create role(创建角色)。

  7. 对于 Trusted entity type(可信实体类型),选择 Custom trust policy(自定义信任策略)。对于 Custom trust policy(自定义信任策略),将 "Principal": {}, 替换为以下内容,然后选择 Next(下一步)。

    "Principal": { "Service": "vpc-flow-logs.amazonaws.com" },
  8. Add permissions(添加权限)页面上,选中您在此过程中先前创建的策略复选框,然后选择 Next(下一步)。

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

  10. 选择Create role(创建角色)

将流日志发布到 CloudWatch Logs 的 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 操作的权限。有关更多信息,请参阅 将流日志发布到 CloudWatch Logs 的 IAM 主体权限

先决条件
使用控制台创建流日志
  1. 请执行以下操作之一:

  2. 选择 Actions(操作)、Create flow log(创建流日志)。

  3. 对于Filter(筛选条件),指定要记录的流量的类型。选择All(全部)将记录接受和拒绝的流量,选择 Reject(拒绝)将仅记录被拒绝的流量,选择 Accept(接受)将仅记录接受的流量。

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

  5. 对于Destination(目的地),选择发送到 CloudWatch Logs

  6. 对于目标日志组,选择现有日志组名称或输入创建此流日志时将创建的新日志组名称。

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

  8. 对于Log record format(日志记录格式),选定流日志记录的格式。

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

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

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

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

使用命令行创建流日志

使用以下命令之一。

以下 AWS CLI 示例将创建流日志,该日志将捕获指定子网的所有已接受流量。流日志将传输到指定的日志组。--deliver-logs-permission-arn 参数指定发布到 CloudWatch Logs 所需的 IAM 角色。

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 的流日志记录
  1. 通过 https://console.aws.amazon.com/cloudwatch/ 打开 CloudWatch 控制台。

  2. 在导航窗格中,依次选择 Logs(日志)和 Log groups(日志组)。

  3. 选择包含流日志的日志组名称以打开其详细信息页面。

  4. 选择包含流日志记录的日志流名称。有关更多信息,请参阅 流日志记录

使用命令行查看发布到 CloudWatch Logs 的流日志记录

搜索流日志记录

您可以使用 CloudWatch Logs 控制台搜索发布到 CloudWatch Logs 的流日志记录。您可以使用度量筛选器筛选流日志记录。流日志记录用空格分隔。

使用 CloudWatch Logs 控制台搜索流日志记录
  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中,依次选择 Logs(日志)和 Log groups(日志组)。

  3. 如果您知道要搜索的网络接口,请选择包含流日志的日志组,然后选择日志流。或者,选择 Search log group(搜索日志组)。如果日志组中有许多网络接口,或者根据您选择的时间范围,这可能需要一些时间。

  4. 筛选事件下,输入以下字符串。这假定流日志记录使用默认格式

    [version, accountid, interfaceid, srcaddr, dstaddr, srcport, dstport, protocol, packets, bytes, start, end, action, logstatus]
  5. 通过为字段指定值,根据需要修改筛选器。以下示例按特定的源 IP 地址进行筛选。

    [version, accountid, interfaceid, srcaddr = 10.0.0.1, dstaddr, srcport, dstport, protocol, packets, bytes, start, end, action, logstatus] [version, accountid, interfaceid, srcaddr = 10.0.2.*, dstaddr, srcport, dstport, protocol, packets, bytes, start, end, action, logstatus]

    以下示例按目标端口、字节数以及流量是否被拒绝进行筛选。

    [version, accountid, interfaceid, srcaddr, dstaddr, srcport, dstport = 80 || dstport = 8080, protocol, packets, bytes, start, end, action, logstatus] [version, accountid, interfaceid, srcaddr, dstaddr, srcport, dstport = 80 || dstport = 8080, protocol, packets, bytes >= 400, start, end, action = REJECT, logstatus]

处理 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. 对于 Filter Pattern(筛选条件模式),输入以下字符串。

    [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(测试模式)。

  6. 准备就绪后,选择 Next(下一步)。

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

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

  9. 选择Create alarm(创建警报)

  10. 选择您创建的指标名称,然后选择选择指标

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

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

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

    • 对于每当 TimeSinceLastActive...,选择大于/等于,然后输入 10 作为阈值。

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

  12. 选择下一步

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

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

  15. 预览完警报后,选择创建警报