AWS Global Accelerator 中的流日志 - AWS Global Accelerator

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS Global Accelerator 中的流日志

流日志允许您在 AWS Global Accelerator 中捕获有关传入和传出 AWS Global Accelerator 的加速器中进出网络接口的 IP 地址流量的信息。流日志数据将发布到 Amazon S3,您可以在创建流日志后检索和查看您的数据。

流日志可以帮助您完成大量任务。例如,您可以排查流量未到达终端节点的原因,这反过来又可帮助您诊断限制过于严格的安全组规则。您还可以使用流日志作为安全工具来监视到达终端节点的流量。

流日志记录代表您的流日志中的网络流。每个记录捕获特定捕获窗口中的特定 5 元组的网络流。5 元组是一组 5 个不同的值,指定 IP 流的源、目标和协议。捕获窗口是一段持续时间,在这段时间内流日志服务会聚合数据,然后再发布流日志记录。捕获窗口大约为 10 秒钟,但最长可以为 1 分钟。

使用流日志时会收取 CloudWatch 日志费用,即使日志直接发布到 Amazon S3。有关更多信息,请参阅 。将日志传送到 S3atAmazon CloudWatch 定价

将流日志发布到 Amazon S3

AWS Global Accelerator 的流日志将发布到 Amazon S3,发布到您指定的现有 S3 存储桶。流日志记录将发布到存储桶中存储的一系列日志文件对象。

要创建与流日志配合使用的 Amazon S3 存储桶,请参阅创建存储桶中的Amazon Simple Storage Service 入门指南

流日志文件

流日志收集流日志记录,将它们合并到日志文件,然后每隔 5 分钟将日志文件发布到 Amazon S3 存储桶。每个日志文件包含在上一个 5 分钟内记录的 IP 地址流量的流日志记录。

日志文件的最大文件大小为 75 MB。如果日志文件在 5 分钟期间内达到文件大小限制,流日志会停止向它添加流日志记录,将它发布到 Amazon S3 存储桶,然后创建一个新的日志文件。

日志文件将保存到指定的 Amazon S3 存储桶,并使用由流日志的 ID、区域及其创建日期决定的文件夹结构。存储桶文件夹结构使用以下格式:

s3-bucket_name/s3-bucket-prefix/AWSLogs/aws_account_id/globalaccelerator/region/yyyy/mm/dd/

同样,流日志的 ID、区域及其创建日期和时间决定。文件名使用以下格式:

aws_account_id_globalaccelerator_accelerator_id_flow_log_id_timestamp_hash.log.gz

请注意以下有关日志文件的文件夹和文件名结构的内容:

  • 时间戳使用 YYYYMMDDTHHmmZ 格式。

  • 如果您为 S3 存储桶前缀指定斜杠 (/),则日志文件存储桶文件夹结构将包含双斜杠 (//),如下所示:

    s3-bucket_name//AWSLogs/aws_account_id

以下示例显示了 AWS 账户创建的流日志日志的文件夹结构和文件名123456789012的加速器,ID 为1234abcd-abcd-1234-abcd-1234abcdefgh,于 2018 年 11 月 23 日上午 0 时 05 分举行:

my-s3-bucket/prefix1/AWSLogs/123456789012/globalaccelerator/us-west-2/2018/11/23/123456789012_globalaccelerator_1234abcd-abcd-1234-abcd-1234abcdefgh_20181123T0005Z_1fb1234.log.gz

单个流日志文件包含具有多个 5 元组记录的交错条目;即client_ipclient_portaccelerator_ipaccelerator_portprotocol。要查看加速器的所有流日志文件,请查找accelerator_id和您的account_id

用于将流日志发布到 Amazon S3 的 IAM 角色

IAM 委托人(例如,IAM 用户)必须具有足够的权限才能将流日志发布到 Amazon S3 存储桶。IAM 策略必须包含以下权限:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DeliverLogs", "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:DeleteLogDelivery" ], "Resource": "*" }, { "Sid": "AllowGlobalAcceleratorService", "Effect": "Allow", "Action": [ "globalaccelerator:*" ], "Resource": "*" }, { "Sid": "s3Perms", "Effect": "Allow", "Action": [ "s3:GetBucketPolicy", "s3:PutBucketPolicy" ], "Resource": "*" } ] }

针对流日志的 Amazon S3 存储桶权限

默认情况下,Amazon S3 存储桶及其中包含的对象是私有的。只有存储桶拥有者才能访问存储桶和其中存储的对象。不过,存储桶拥有者可以通过编写访问策略来向其他资源和用户授予访问权限。

如果创建流日志的用户拥有存储桶,服务会自动将以下策略附加到存储桶,以授予流日志将日志发布到存储桶的权限:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": {"Service": "delivery.logs.amazonaws.com"}, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket_name/optional_folder/AWSLogs/account_id/*", "Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}} }, { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": {"Service": "delivery.logs.amazonaws.com"}, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::bucket_name" } ] }

如果创建流日志的用户不拥有存储桶,也没有存储桶的 GetBucketPolicyPutBucketPolicy 权限,流日志创建操作会失败。在这种情况下,存储桶拥有者必须手动将上述策略添加到存储桶,并指定流日志创建者的 AWS 账户 ID。有关更多信息,请参阅 。如何添加 S3 存储桶策略?中的Amazon Simple Storage Service 入门指南。如果存储桶从多个账户接收流日志,则将 Resource 元素条目添加到每个账户的 AWSLogDeliveryWrite 策略声明。

例如,以下存储桶策略允许 AWS 账户 123123123123123 和 456456 将流日志发布到名为flow-logs名为的存储桶中log-bucket

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": {"Service": "delivery.logs.amazonaws.com"}, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::log-bucket/flow-logs/AWSLogs/123123123123/*", "arn:aws:s3:::log-bucket/flow-logs/AWSLogs/456456456456/*" ], "Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}} }, { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": {"Service": "delivery.logs.amazonaws.com"}, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::log-bucket" } ] }
注意

我们建议您授予AWSLogDeliveryAclCheckAWSLogDeliveryWrite权限添加到日志传输服务委托人(而不是单个 AWS 账户 ARN)。

与 SSE-KMS 存储桶结合使用时必需的 CMK 密钥策略

如果使用具有客户托管的客户主密钥 (CMK) 的 AWS KMS 托管密钥 (SSE-KMS) 为 Amazon S3 存储桶启用了服务器端加密,则必须将以下内容添加到 CMK 的密钥策略中,以便流日志可以将日志文件写入存储桶:

{ "Sid": "Allow AWS Global Accelerator Flow Logs to use the key", "Effect": "Allow", "Principal": { "Service": [ "delivery.logs.amazonaws.com" ] }, "Action": "kms:GenerateDataKey*", "Resource": "*" }

Amazon S3 日志文件权限

除了必需的存储桶策略之外,Amazon S3 使用访问控制列表 (ACL) 管理对流日志创建的日志文件的访问。默认情况下,存储桶拥有者对每个日志文件具有 FULL_CONTROL 权限。如果日志传输拥有者与存储桶拥有者不同,则没有权限。日志传输账户具有 READWRITE 权限。有关更多信息,请参阅 。访问控制列表 (ACL) 概述中的Amazon Simple Storage Service 入门指南

允许将流日志发布到 Amazon S3

要在 AWS Global Accelerator 中启用流日志,请按照此过程中的步骤操作。

在 AWS Global Accelerator 中启用流日志

  1. 为 AWS 账户中的流日志创建 Amazon S3 存储桶。

  2. 为启用流日志的 AWS 用户添加所需的 IAM 策略。有关更多信息,请参阅 用于将流日志发布到 Amazon S3 的 IAM 角色

  3. 使用要用于日志文件的 Amazon S3 存储桶名称和前缀运行以下 AWS CLI 命令:

    aws globalaccelerator update-accelerator-attributes --accelerator-arn arn:aws:globalaccelerator::012345678901:accelerator/1234abcd-abcd-1234-abcd-1234abcdefgh --region us-west-2 --flow-logs-enabled --flow-logs-s3-bucket s3-bucket-name --flow-logs-s3-prefix s3-bucket-prefix

处理 Amazon S3 中的流日志记录

日志文件是压缩文件。如果您使用 Amazon S3 控制台打开这些日志文件,则将对其进行解压缩,并且将显示流日志记录。如果您下载这些文件,则必须对其进行解压才能查看流日志记录。

日志文件传输计时

AWS Global Accelerator 一个小时内会为您配置的加速器提交若干次日志文件。一般而言,日志文件包含有关加速器在给定时间段内收到的请求的信息。Global Accelerator 通常会在日志中所显示事件发生后的一个小时内将该时间段内的日志文件传输至 Amazon S3 存储桶。某个时间段内的某些或所有日志文件条目有时可延迟长达 24 小时。当日志条目延迟后,Global Accelerator 会将它们保存在其文件名称包括发生请求的时间段的日期和时间(而不是文件传输的日期和时间)的日志文件中。

创建日志文件时,Global Accelerator 将在日志文件涵盖的时间段内从收到请求的所有边缘站点整合加速器的信息。

Global Accelerator 在您启用日志记录后大约四个小时开始可靠地传输日志文件。您可能会获得一些在此时间之前的日志文件。

注意

如果在此期间没有用户连接到您的加速器,您将不会收到该期间的任何日志文件。

流日志记录语法

流日志记录是以空格分隔的字符串,采用以下格式:

<version> <aws_account_id> <accelerator_id> <client_ip> <client_port> <accelerator_ip> <accelerator_port> <endpoint_ip> <endpoint_port> <protocol> <ip_address_type> <packets> <bytes> <start_time> <end_time> <action> <log-status> <globalaccelerator_source_ip> <globalaccelerator_source_port> <endpoint_region> <globalaccelerator_region> <direction> <vpc_id>

1.0 版格式不包括 VPC 标识符vpc_id。版本 2.0 版格式,其中包含vpc_id,是在全局加速器将流量发送到具有客户端 IP 地址保留的终端节点时生成的。

下表描述了流日志记录的各个字段。

字段 描述

version

流日志版本。

aws_account_id

流日志的 AWS 账户 ID。

accelerator_id

为其记录流量的加速器的 ID。

client_ip

源 IPv4 地址。

client_port

源端口。

accelerator_ip

加速器的 IP 地址。

accelerator_port

加速器的端口。

endpoint_ip

流量的目标 IP 地址。

endpoint_port

流量的目标端口。

protocol

流量的 IANA 协议编号。有关更多信息,请参阅分配的 Internet 协议编号

ip_address_type

IPv4.

packets

捕获窗口中传输的数据包的数量。

bytes

捕获窗口中传输的字节数。

start_time

捕获窗口启动的时间,采用 Unix 秒的格式。

end_time

捕获窗口结束的时间,采用 Unix 秒的格式。

action

与流量关联的操作:

  • ACCEPT:安全组或网络 ACL 允许记录的流量。该值当前始终为 “接受”。

log-status

流日志的日志记录状态:

  • OK:数据正常记录到选定目标。

  • NODATA:捕获窗口中没有传入或传出网络接口的网络流量。

  • SKIPDATA:捕获窗口中跳过了一些流日志记录。这可能是由于内部容量限制或内部错误。

globalaccelerator_source_ip

全局加速器网络接口使用的 IP 地址。

globalaccelerator_source_port

全局加速器网络接口使用的端口。

endpoint_region

终端节点所在的 AWS 区域。

globalaccelerator_region

服务请求的边缘站点(存在点)。每个边缘站点具有三个字母的代码和任意分配的数字,例如,DFW3。三个字母代码通常对应邻近边缘站点的机场的国际航空协会机场代码。(这些缩写将来可能会更改。)

direction

流量的方向。表示进入全局加速器网络 (INGRESS)或返回到客户端(EGRESS)。

vpc_id

VPC 标识符。当全局加速器将流量发送到具有客户端 IP 地址保留的终端节点时,包含在 2.0 版流日志中。

如果某个字段不适用于特定记录,则记录会显示该条目的 “-” 符号。