将流日志发布到 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:SourceAccount
和 aws: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 角色
通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在导航窗格中,选择 Roles(角色)和 Create role(创建角色)。
-
对于选择受信任实体的类型,选择 Amazon 服务。对于 Use case (使用案例),选择 EC2。选择下一步: 权限。
-
在 Attach permissions policies (附加权限策略) 页上,选择 Next: Tags (下一步: 标签),还可以选择性地添加标签。选择 Next: Review (下一步: 审核)。
-
输入您的角色的名称,并且可以选择提供描述。选择创建角色。
-
选择角色的名称。对于 Permissions (权限),依次选择 Add inline policy (添加内联策略)、JSON。
-
从 用于将流日志发布到 CloudWatch Logs 的 IAM 角色 中复制第一个策略,并将其粘贴到窗口中。选择查看策略。
-
为您的策略输入名称,然后选择 Create policy (创建策略)。
-
选择角色的名称。对于 Trust relationships (信任关系),选择 Edit trust relationship (编辑信任关系)。在现有策略文档中,将服务从
ec2.amazonaws.com
更改为vpc-flow-logs.amazonaws.com
。选择 Update Trust Policy。 -
在 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 控制台中的日志组页面
使用控制台为网络接口创建流日志
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/
。 -
在导航窗格中,选择 Network Interfaces。
-
选择一个或多个网络接口的复选框,然后选择操作、创建流日志。
-
对于筛选条件,指定要记录的流量的类型。选择全部将记录接受和拒绝的流量,选择拒绝将仅记录被拒绝的流量,选择接受将仅记录接受的流量。
-
对于 Maximum aggregation interval (最大聚合时间间隔),选择捕获流并聚合到一个流日志记录中的最大时间段。
-
对于目的地,选择发送到 CloudWatch Logs。
-
对于 Destination log group (目标日志组),选择您创建的目标日志组的名称。
-
对于 IAM role (IAM 角色),指定有权将日志发布到 CloudWatch Logs 的角色的名称。
-
对于日志记录格式,选定流日志记录的格式。
-
要使用默认格式,请选择Amazondefault format (亚马逊云科技默认格式)。
-
要使用自定义格式,请选择自定义格式然后从日志格式选择字段。
-
-
(可选)选择添加新标签以将标签应用于流日志。
-
选择 Create flow log (创建流日志)。
使用控制台为 VPC 或子网创建流日志
通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/
。 -
在导航窗格中,选择您的 VPC 或者选择子网。
-
选择一个或多个 VPC 或子网的复选框,然后选择操作、创建流日志。
-
对于筛选条件,指定要记录的流量的类型。选择全部将记录接受和拒绝的流量,选择拒绝将仅记录被拒绝的流量,选择接受将仅记录接受的流量。
-
对于 Maximum aggregation interval (最大聚合时间间隔),选择捕获流并聚合到一个流日志记录中的最大时间段。
-
对于目的地,选择发送到 CloudWatch Logs。
-
对于 Destination log group (目标日志组),选择您创建的目标日志组的名称。
-
对于 IAM role (IAM 角色),指定有权将日志发布到 CloudWatch Logs 的角色的名称。
-
对于日志记录格式,选定流日志记录的格式。
-
要使用默认格式,请选择Amazondefault format (亚马逊云科技默认格式)。
-
要使用自定义格式,请选择自定义格式然后从日志格式选择字段。
-
-
(可选)选择添加新标签以将标签应用于流日志。
-
选择 Create flow log (创建流日志)。
使用命令行创建流日志
使用以下命令之一。
-
create-flow-logs (Amazon CLI)
-
New-EC2FlowLogs (Amazon Tools for Windows PowerShell)
-
CreateFlowLogs(Amazon EC2 查询 API)
以下 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 流量创建指标筛选条件并为该筛选条件创建警报
通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/
。 -
在导航窗格中,依次选择 Logs(日志)和 Log groups(日志组)。
-
选中日志组对应的复选框,然后选择 Actions(操作)、Create metric filter(创建指标筛选条件)。
-
对于筛选模式,输入以下内容:
[version, account, eni, source, destination, srcport, destport="22", protocol="6", packets, bytes, windowstart, windowend, action="REJECT", flowlogstatus]
-
对于 Select log data to test(选择要测试的日志数据),选择您的网络接口对应的日志流。(可选)要查看与筛选条件模式匹配的日志数据行,请选择 Test pattern(测试模式)。准备就绪后,选择 Next(下一步)。
-
输入筛选条件名称、指标命名空间和指标名称。将指标值设置为 1。完成后,选择 Next(下一步),然后选择 Create metric filter(创建指标筛选条件)。
-
在导航窗格中,依次选择 Alarms(警报)和 All alarms(所有警报)。
-
选择创建警报。
-
为您创建的指标筛选条件选择命名空间。
新指标可能需要几分钟才会在控制台中显示。
-
选择您创建的指标名称,然后选择 Select metric(选择指标)。
-
按如下所示配置警报,然后选择 Next(下一步):
-
对于 Statistic (统计数据),选择 Sum (总计)。这可以确保您捕获指定时间段内的数据点的总数。
-
对于 Period(周期),选择 1 hour(1 小时)。
-
对于 Whenever(每当),选择 Greater/Equal(大于/等于,>=),然后输入 10 作为阈值。
-
对于 Additional configuration(其他配置)、Datapoints to alarm(警报的数据点数),将默认值设为 1。
-
-
对于 Notification(通知),选择现有的 SNS 主题,或选择 Create new topic(新建主题)创建一个新主题。选择 Next (下一步)。
-
输入警报的名称和描述,然后选择 Next(下一步)。
-
配置完警报后,选择 Create alarm(创建警报)。