使用服务器访问日志记录来记录请求
服务器访问日志记录详细地记录对桶提出的各种请求。对于许多应用程序而言,服务器访问日志很有用。例如,访问日志信息可能在安全和访问权限审核方面很有用。它还可以帮助您了解您的客户群并了解您的 Amazon S3 账单。
注意
服务器访问日志不会记录 2019 年 3 月 20 日之后发布的区域的不正确区域重定向错误的相关信息。在桶所在区域的外部发出对象或桶的请求时,会发生不正确区域重定向错误。
如何启用日志传送?
要启用日志传输,请执行以下基本步骤。有关详细信息,请参阅 启用 Amazon S3 服务器访问日志记录。
-
提供目标桶的名称。此桶是您希望 Amazon S3 用于将访问日志保存为对象的位置。源桶和目标桶必须位于同一个 Amazon Web Services 区域,并且由同一个账户拥有。
您可以让日志传输至您拥有的且与源桶位于同一区域中的任何桶,包括源桶本身。不过,为了更方便地管理日志,我们建议您将访问日志保存在不同的桶中。
当源桶和目标桶是同一桶时,将为写入该桶的日志创建额外的日志。我们不建议这样做,因为它会导致您的存储账单金额小幅增加。此外,有关日志的额外日志可能会导致更难以找到您所查找的日志。如果您选择将访问日志保存在源桶中,我们建议您为所有日志对象键指定前缀,以便对象名称以通用字符串开头,且日志对象更易于识别。
当多个桶记录到同一目标桶时,键前缀也可用于区分源桶。
-
(可选) 将一个前缀分配给所有 Amazon S3 日志对象键。通过该前缀可更方便地查找日志对象。例如,如果您指定前缀值
logs/
,则 Amazon S3 创建的每个日志对象的键均以logs/
前缀开头。logs/2013-11-01-21-32-16-E568B2907131C0C0
当您删除日志时,键前缀也可以有所帮助。例如,您可以设置一个生命周期配置规则,让 Amazon S3 删除具有特定密钥前缀的对象。有关更多信息,请参阅删除 Amazon S3 日志文件。
-
(可选)在目标授予中设置权限以使其他人能够访问生成的日志。默认情况下,仅桶拥有者始终拥有日志对象的完全访问权限。如果您的目标桶(存储服务器访问日志的位置)使用桶拥有者强制执行的 S3 Object Ownership 设置来禁用访问控制列表(ACL),则无法在使用 ACL 的目标授权中授予权限。但是,您可以更新目标桶的桶策略以向其他桶授予访问权限。有关更多信息,请参阅 Amazon S3 中的 Identity and Access Management 和 日志传输的权限。
日志对象键格式
Amazon S3 将以下对象键格式用于在目标桶中上传的日志对象:
TargetPrefixYYYY-mm-DD-HH-MM-SS-UniqueString/
在键中,YYYY
、mm
、DD
、HH
、MM
和 SS
分别为日志文件传输时间中表示年、月、日、小时、分钟和秒的数字。这些日期和时间采用协调世界时 (UTC)。
在特定时间传输的日志文件可包含在该时间前的任何时刻编写的记录。无法知道是否已传输特定时间间隔内的所有日志记录。
键的 UniqueString
部分用于防止覆盖文件。它没有意义,日志处理软件应忽略它。
需要尾部斜杠 / 来表示前缀的末尾。
如何传输日志?
Amazon S3 定期收集访问日志记录,在日志文件中整合这些记录,然后将日志文件作为日志对象上传到目标桶。如果多个启用了日志记录的源桶使用相同的目标桶,此目标桶中将保留所有这些源桶的访问日志。但是,每个日志对象只会报告特定源桶的访问日志记录。
Amazon S3 使用特殊的日志传输账户写入服务器访问日志。这些写入受常规的访问控制限制。我们建议您更新目标桶上的桶策略,以授予对日志记录服务主体(logging.s3.amazonaws.com
)的访问权限用于访问日志传送。但是,您也可以通过桶访问控制列表(ACL)向 S3 日志交付组授予访问日志传输的访问权限。不建议使用桶 ACL 授予对 S3 日志传输组的访问权限。
当您启用服务器访问日志记录并通过桶策略授予访问日志交付的访问权限时,您将更新目标桶上的桶策略,以允许日志记录服务主体对 s3:PutObject
的访问权限。如果您使用 Amazon S3 控制台在桶上启用服务器访问日志录入,则控制台会自动更新目标桶上的桶策略,以便将这些权限授予日志录入服务主体。有关授予服务器访问日志传输的权限的更多信息,请参阅 日志传输的权限。
注意
当 VPC 端点策略拒绝时,Amazon S3 不支持向 VPC 端点请求的请求者或桶拥有者传输服务器访问日志。
桶拥有者强制设置 S3 对象所有权
如果目标桶使用桶拥有者强制执行的 Object Ownership 设置,ACL 将被禁用,并且不再影响权限。您必须更新目标桶上的桶策略,以授予对日志服务主体的访问权。有关对象所有权的更多信息,请参阅为服务器访问日志记录授予 S3 日志交付组的访问权。
最大努力服务器日志传输
服务器访问日志记录会以最大努力进行传输。针对已正确配置了日志记录的桶的大多数请求会导致传输一条日志记录。大多数日志记录将在记录后的几小时内传输,但可以更频繁地传输这些记录。
因此不能保证服务器日志记录的完整性和即时性。特殊请求的日志记录可能会在实际处理了请求之后进行传输,也可能根本不会传输。您甚至可能会看到日志记录的副本。服务器日志的用途在于向您提供有关桶流量性质方面的信息。虽然丢失日志记录或看到日志记录副本的情况十分少见,但请注意,服务器日志记录并不旨在完整记录所有请求。
因此,根据服务器日志记录功能的最大努力性质,使用情况报告中可能有一个或多个访问请求不会出现在传输的服务器日志中。您可以在 Amazon Billing and Cost Management 控制台的成本和使用情况报告下找到此使用情况报告。
桶日志记录状态更改将逐渐生效
桶日志记录状态的更改需要一定时间才能实际影响日志文件的传输。例如,如果您为某个桶启用了日志记录,那么将记录在以下时间内发送的请求,而不会记录其他请求。如果您将日志记录的目标桶从桶 A 更改为桶 B,则在接下来的一个小时里仍可能有一些日志传输到桶 A,但其他日志则会传输到新的目标桶 B。无论如何,新的设置将最终生效,并且您无需执行任何操作。
有关日志记录和日志文件的更多信息,请参阅以下各部分: