

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

# 使用访问日志跟踪对象存储桶请求
<a name="amazon-lightsail-bucket-access-logs"></a>

访问日志记录为向 Amazon Lightsail 对象存储服务中的存储桶发出的请求提供了详细记录。这些信息可以包括请求类型、请求中指定的资源以及处理请求的时间和日期。对于许多应用程序而言，访问日志很有用。例如，访问日志信息可能在安全和访问权限审核方面很有用。此外，它还可以帮助您了解您的客户群。

**内容**
+ [启用日志传输需要哪些操作](#access-log-delivery)
+ [日志对象密钥格式](#log-object-key-format)
+ [如何传输日志？](#how-are-logs-delivered)
+ [尽量访问日志传输](#best-effort-access-log-delivery)
+ [存储桶日志记录状态更改将逐渐生效](#bucket-logging-status-changes)

## 启用日志传输需要哪些操作？
<a name="access-log-delivery"></a>

启用日志传输之前，请考虑以下事项。有关详细信息，请参阅[启用存储桶访问日志记录](amazon-lightsail-enabling-bucket-access-logs.md)。

1. **确定日志的目标存储桶。**您希望 Lightsail 在此存储桶中将访问日志保存为对象。源存储桶和目标存储桶必须位于同一个亚马逊云科技区域，并且由同一个账户拥有。

   您可以让日志传输至您拥有的且与源桶位于同一区域中的任何桶，包括源桶本身。不过，为了更方便地管理日志，我们建议您将访问日志保存在不同的桶中。

   当源桶和目标桶是同一桶时，将为写入该桶的日志创建额外的日志。这样做可能并不理想，因为它会导致您的存储空间使用量小幅增加。此外，有关日志的额外日志可能会导致更难以找到您所查找的日志。如果您选择将访问日志保存在源存储桶中，我们建议您为日志对象键指定前缀，以便对象名称以通用字符串开头，且日志对象更易于识别。当多个桶记录到同一目标桶时，键前缀也可用于区分源桶。

1. **（可选）确定日志对象键的前缀。**通过该前缀可更方便地查找日志对象。例如，如果您指定前缀值`logs/`，则 Lightsail 创建的每个日志对象都以其键中的`logs/`前缀开头。需要尾部斜杠 `/` 来表示前缀的末尾。以下是一个采用 `logs/` 前缀的日志对象键示例：

   ```
   logs/2021-11-31-21-32-16-E568B2907131C0C0
   ```

## 日志对象密钥格式
<a name="log-object-key-format"></a>

Lightsail 对上传到目标存储桶中的日志对象使用以下对象密钥格式：

```
TargetPrefix/YYYY-mm-DD-HH-MM-SS-UniqueString
```

在键中，`YYYY`、`mm`、`DD`、`HH`、`MM` 和 `SS` 分别为日志文件传输时间中表示年、月、日、小时、分钟和秒的数字。这些日期和时间采用协调世界时 (UTC)。

在特定时间传输的日志文件可包含在该时间前的任何时刻编写的记录。无法知道是否已传输特定时间间隔内的所有日志记录。

键的 `UniqueString` 部分用于防止覆盖文件。它没有意义，日志处理软件应忽略它。

## 如何传输日志？
<a name="how-are-logs-delivered"></a>

Lightsail 会定期收集访问日志记录，将记录整合到日志文件中，然后将日志文件作为日志对象上传到目标存储桶。如果您对传输至相同目标存储桶的多个源存储桶启用了日志记录，则此目标存储桶中将保留所有这些源存储桶的访问日志。但是，每个日志对象只会报告特定源存储桶的访问日志记录。

## 尽量访问日志传输
<a name="best-effort-access-log-delivery"></a>

访问日志记录会以最大努力进行传输。针对已正确配置了日志记录的存储桶的大多数请求会导致传输一条日志记录。大多数日志记录将在记录后的几小时内传输，但可以更频繁地传输这些记录。

因此，不能保证访问日志记录的完整性和即时性。特殊请求的日志记录可能会在实际处理了请求之后进行传输，也可能根本不会传输。访问日志的用途在于向您提供有关存储桶流量性质方面的信息。丢失日志记录的情况十分少见，但是访问日志记录不旨在完整记录所有请求。

## 存储桶日志记录状态更改将逐渐生效
<a name="bucket-logging-status-changes"></a>

桶日志记录状态的更改需要一定时间才能实际影响日志文件的传输。例如，如果您为某个桶启用了日志记录，那么将记录在以下时间内发送的请求，而不会记录其他请求。如果您将日志记录的目标桶从桶 A 更改为桶 B，则在接下来的一个小时里仍可能有一些日志传输到桶 A，但其他日志则会传输到新的目标桶 B。无论如何，新的设置将最终生效，并且您无需执行任何操作。

**Topics**
+ [启用日志传输需要哪些操作？](#access-log-delivery)
+ [日志对象密钥格式](#log-object-key-format)
+ [如何传输日志？](#how-are-logs-delivered)
+ [尽量访问日志传输](#best-effort-access-log-delivery)
+ [存储桶日志记录状态更改将逐渐生效](#bucket-logging-status-changes)
+ [访问日志格式](amazon-lightsail-bucket-access-log-format.md)
+ [管理访问日志](amazon-lightsail-enabling-bucket-access-logs.md)
+ [使用访问日志](amazon-lightsail-using-bucket-access-logs.md)

# 使用 Lightsail 存储桶日志分析对象存储访问权限
<a name="amazon-lightsail-bucket-access-log-format"></a>

访问日志记录为向 Amazon Lightsail 对象存储服务中的存储桶发出的请求提供了详细记录。您可以使用访问日志进行安全和访问审计，或者了解客户群。本节介绍了有关访问日志文件的格式和其他详细信息。有关日志记录基本知识的更多信息，请参阅[存储桶访问日志](amazon-lightsail-bucket-access-logs.md)。

访问日志文件由一系列的换行分隔日志记录组成。每个日志记录表示一个请求并由空格分隔的字段组成。

以下是含有五份日志记录的示例日志。

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 3E57427F3EXAMPLE REST.GET.VERSIONING - "GET /amzn-s3-demo-bucket?versioning HTTP/1.1" 200 - 113 - 7 - "-" "S3Console/0.4" - s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader amzn-s3-demo-bucket.s3.us-west-1.amazonaws.com TLSV1.1
```

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 891CE47D2EXAMPLE REST.GET.LOGGING_STATUS - "GET /amzn-s3-demo-bucket?logging HTTP/1.1" 200 - 242 - 11 - "-" "S3Console/0.4" - 9vKBE6vMhrNiWHZmb2L0mXOcqPGzQOI5XLnCtZNPxev+Hf+7tpT6sxDwDty4LHBUOZJG96N1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader amzn-s3-demo-bucket.s3.us-west-1.amazonaws.com TLSV1.1
```

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be A1206F460EXAMPLE REST.GET.BUCKETPOLICY - "GET /amzn-s3-demo-bucket?policy HTTP/1.1" 404 NoSuchBucketPolicy 297 - 38 - "-" "S3Console/0.4" - BNaBsXZQQDbssi6xMBdBU2sLt+Yf5kZDmeBUP35sFoKa3sLLeMC78iwEIWxs99CRUrbS4n11234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader amzn-s3-demo-bucket.s3.us-west-1.amazonaws.com TLSV1.1
```

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket [06/Feb/2019:00:01:00 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 7B4A0FABBEXAMPLE REST.GET.VERSIONING - "GET /amzn-s3-demo-bucket?versioning HTTP/1.1" 200 - 113 - 33 - "-" "S3Console/0.4" - Ke1bUcazaN1jWuUlPJaxF64cQVpUEhoZKEG/hmy/gijN/I1DeWqDfFvnpybfEseEME/u7ME1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader amzn-s3-demo-bucket.s3.us-west-1.amazonaws.com TLSV1.1
```

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket [06/Feb/2019:00:01:57 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be DD6CC733AEXAMPLE REST.PUT.OBJECT s3-dg.pdf "PUT /amzn-s3-demo-bucket/s3-dg.pdf HTTP/1.1" 200 - - 4406583 41754 28 "-" "S3Console/0.4" - 10S62Zv81kBW7BB6SX4XJ48o6kpcl6LPwEoizZQQxJd5qDSCTLX0TgS37kYUBKQW3+bPdrg1234= SigV4 ECDHE-RSA-AES128-SHA AuthHeader amzn-s3-demo-bucket.s3.us-west-1.amazonaws.com TLSV1.1
```

**注意**  
任何日志记录字段都可以设置为 `–` 以指示数据未知或不可用，或者该字段不适用于此请求。

**内容**
+ [日志记录字段](#log-record-fields)
+ [复制操作的其他日志记录](#additional-logging-for-copy-operations)
+ [自定义访问日志信息](#custom-access-log-information)
+ [可扩展访问日志格式的编程注意事项](#programing-considerations)

## 日志记录字段
<a name="log-record-fields"></a>

以下列表介绍了日志记录字段。

**接入点 ARN（Amazon 资源名称）**

请求访问点的 Amazon Resource Name (ARN)。如果访问点的 ARN 格式不正确或未使用，则该字段将包含“-”。如需有关访问点的更多信息，请参阅[使用访问点](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)。有关更多信息 ARNs，请参阅 AW *S 一般*参考中有关[亚马逊资源名称 (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) 的主题。

示例条目

```
arn:aws:s3:us-east-1:123456789012:accesspoint/example-AP
```

**存储桶拥有者**

源存储桶拥有者的规范用户 ID。规范用户 ID 是另一种形式的 AWS 账户 ID。有关规范用户 ID 的更多信息，请参阅 *AWS 一般参考*中的 [AWS 账户标识符](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html)。有关如何查找您的账户的规范用户 ID 的信息，请参阅[查找 AWS 账户的规范用户 ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html#FindingCanonicalId)。

示例条目

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
```

**存储桶**

请求处理的存储桶的名称。如果系统收到格式错误的请求且无法确定存储桶，则请求不会显示在任何的访问日志中。

示例条目

```
amzn-s3-demo-bucket
```

**时间**

收到请求的时间；这些日期和时间采用协调世界时 (UTC)。使用 *strftime()* 术语的格式如下所示：*[%d/%b/%Y:%H:%M:%S %z]*

示例条目

```
[06/Feb/2019:00:00:38 +0000]
```

**远程 IP**

请求者的显式 Internet 地址。中间代理和防火墙可能会隐藏发送请求的计算机的实际地址。

示例条目

```
192.0.2.3
```

**请求者**

请求者的规范用户 ID 或用于未经验证请求的 `-`。如果请求者是 IAM 用户，此字段会返回请求者的 IAM 用户名以及该 IAM 用户所属的 AWS 根账户。此标识符与用于访问控制目的的标识符是相同的。

示例条目

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
```

**请求 ID**

由 Lightsail 生成的字符串，用于唯一标识每个请求。

示例条目

```
3E57427F33A59F07
```

**操作**

此处列出的操作将声明为 `SOAP.operation`、`REST.HTTP_method.resource_type`、`WEBSITE.HTTP_method.resource_type` 或 `BATCH.DELETE.OBJECT`。

示例条目

```
REST.PUT.OBJECT
```

**键**

请求的“密钥”部分、已编码的 URL 或“-” (如果操作没有使用密钥参数)。

示例条目

```
/photos/2019/08/puppy.jpg
```

**请求 URI**

HTTP 请求消息的“请求-URI”部分。

示例条目

```
"GET /amzn-s3-demo-bucket/photos/2019/08/puppy.jpg?x-foo=bar HTTP/1.1"
```

**HTTP 状态**

响应的数字 HTTP 状态代码。

示例条目

```
200
```

**错误代码**

Amazon S3 [错误代码](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingRESTError.html#ErrorCode)或“-”（如果没有发生错误）。

示例条目

```
NoSuchBucket
```

**发送的字节数**

发送的响应字节数，不包括 HTTP 协议支出或“-” (如果为零)。

示例条目

```
2662992
```

**对象大小**

所涉及的对象的总大小。

示例条目

```
3462992
```

**总时间**

从存储桶传输请求的毫秒数。该值计算从收到请求到发出响应的最后一个字节的时间。由于网络延迟，从客户端计算出的时间可能会更长。

示例条目

```
70
```

**周转时间**

Lightsail 处理您的请求所花费的毫秒数。该值计算从收到您的请求的最后一个字节到发出响应的第一个字节的时间。

示例条目

```
10
```

**引用**

HTTP 引用站点标头的值（如果存在）。发送请求时，HTTP 用户代理（例如，浏览器）通常会将此标头设置为链接的 URL 或嵌入页面。

示例条目

```
"http://www.amazon.com/webservices"
```

**用户代理**

HTTP 用户代理标头的值。

示例条目

```
"curl/7.15.1"
```

**版本 ID**

请求中的版本 ID；如果操作没有使用 `versionId` 参数，则为 `-`。

示例条目

```
3HL4kqtJvjVBH40Nrjfkd
```

**主机 ID**

 x-amz-id-2 或 Lightsail 扩展请求编号。

示例条目

```
s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234=
```

**签名版本**

签名版本，用于对请求进行身份验证的 `SigV2` 或 `SigV4`，或未经身份验证的请求的 `-`。

示例条目

```
SigV2
```

**密码套件**

协商 HTTPS 请求的安全套接字层 (SSL) 密码或协商 HTTP 的 `-`。

示例条目

```
ECDHE-RSA-AES128-GCM-SHA256
```

**身份验证类型**

所使用的请求身份验证的类型，身份验证标头使用 `AuthHeader`，查询字符串（预签名 URL）使用 `QueryString`，未经身份验证的请求使用 `-`。

示例条目

```
AuthHeader
```

**主机标头**

用于连接 Lightsail 的端点。

示例条目

```
s3.us-west-2.amazonaws.com
```

**TLS 版本**

客户端协商的传输层安全性 (TLS) 版本。为以下值之一：`TLSv1`、`TLSv1.1`、`TLSv1.2`；如果不使用 TLS 则为 `-`。

示例条目

```
TLSv1.2
```

## 复制操作的其他日志记录
<a name="additional-logging-for-copy-operations"></a>

复制操作包括 `GET` 和 `PUT`。出于该原因，我们会在执行复制操作时记录两份记录。前面的部分描述了与操作的 `PUT` 部分相关的字段。以下列表描述了记录中与复制操作的 `GET` 部分相关的字段。

**存储桶拥有者**

用于存储将复制的对象的存储桶的规范用户 ID。规范用户 ID 是另一种形式的 AWS 账户 ID。有关规范用户 ID 的更多信息，请参阅 *AWS 一般参考*中的 [AWS 账户标识符](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html)。有关如何查找您的账户的规范用户 ID 的信息，请参阅[查找 AWS 账户的规范用户 ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html#FindingCanonicalId)。

示例条目

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
```

**存储桶**

用于存储被复制对象的存储桶的名称。

示例条目

```
amzn-s3-demo-bucket
```

**时间**

收到请求的时间；这些日期和时间采用协调世界时 (UTC)。使用 `strftime()` 术语的格式如下所示：`[%d/%B/%Y:%H:%M:%S %z]`

示例条目

```
[06/Feb/2019:00:00:38 +0000]
```

**远程 IP**

请求者的显式 Internet 地址。中间代理和防火墙可能会隐藏发送请求的计算机的实际地址。

示例条目

```
192.0.2.3
```

**请求者**

请求者的规范用户 ID 或用于未经验证请求的 `-`。如果请求者是 IAM 用户，此字段将返回请求者的 IAM 用户名与该 IAM 用户所属的 AWS 根账户。此标识符与用于访问控制目的的标识符是相同的。

示例条目

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
```

**请求 ID**

由 Lightsail 生成的字符串，用于唯一标识每个请求。

示例条目

```
3E57427F33A59F07
```

**操作**

此处列出的操作将声明为 `SOAP.operation`、`REST.HTTP_method.resource_type`、`WEBSITE.HTTP_method.resource_type` 或 `BATCH.DELETE.OBJECT`。

示例条目

```
REST.COPY.OBJECT_GET
```

**键**

被复制对象的“密钥”或“-” (如果操作没有使用密钥参数)。

示例条目

```
/photos/2019/08/puppy.jpg
```

**请求 URI**

HTTP 请求消息的“请求-URI”部分。

示例条目

```
"GET /amzn-s3-demo-bucket/photos/2019/08/puppy.jpg?x-foo=bar"
```

**HTTP 状态**

复制操作的 `GET` 部分的数字 HTTP 状态代码。

示例条目

```
200
```

**错误代码**

复制操作的 `GET` 部分的 Amazon S3 错误代码或 `-` （如果没有发生任何错误）。

示例条目

```
NoSuchBucket
```

**发送的字节数**

发送的响应字节数，不包括 HTTP 协议支出或“-” (如果为零)。

示例条目

```
2662992
```

**对象大小**

所涉及的对象的总大小。

示例条目

```
3462992
```

**总时间**

从存储桶传输请求的毫秒数。该值计算从收到请求到发出响应的最后一个字节的时间。由于网络延迟，从客户端计算出的时间可能会更长。

示例条目

```
70
```

**周转时间**

Lightsail 处理您的请求所花费的毫秒数。该值计算从收到您的请求的最后一个字节到发出响应的第一个字节的时间。

示例条目

```
10
```

**引用**

HTTP 引用站点标头的值（如果存在）。发送请求时，HTTP 用户代理（例如，浏览器）通常会将此标头设置为链接的 URL 或嵌入页面。

示例条目

```
"http://www.amazon.com/webservices"
```

**用户代理**

HTTP 用户代理标头的值。

示例条目

```
"curl/7.15.1"
```

**版本 ID**

被复制对象的版本 ID 或 `-`（如果 `x-amz-copy-source` 标头没有将 `versionId` 参数指定为复制源的一部分）。

示例条目

```
3HL4kqtJvjVBH40Nrjfkd
```

**主机 ID**

 x-amz-id-2 或 Lightsail 扩展请求编号。

示例条目

```
s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234=
```

**签名版本**

签名版本，用于对请求进行身份验证的 `SigV2` 或 `SigV4`，或未经身份验证的请求的 `-`。

示例条目

```
SigV2
```

**密码套件**

协商 HTTPS 请求的安全套接字层 (SSL) 密码或协商 HTTP 的 `-`。

示例条目

```
ECDHE-RSA-AES128-GCM-SHA256
```

**身份验证类型**

所使用的请求身份验证的类型，身份验证标头使用 `AuthHeader`，查询字符串（预签名 URL）使用 `QueryString`，未经身份验证的请求使用 `-`。

示例条目

```
AuthHeader
```

**主机标头**

用于连接 Lightsail 的端点。

示例条目

```
s3.us-west-2.amazonaws.com
```

**TLS 版本**

客户端协商的传输层安全性 (TLS) 版本。为以下值之一：`TLSv1`、`TLSv1.1`、`TLSv1.2`；如果不使用 TLS 则为 `-`。

示例条目

```
TLSv1.2
```

## 自定义访问日志信息
<a name="custom-access-log-information"></a>

您可以包含要存储在请求的访问日志记录中的自定义信息。为此，请将自定义查询字符串参数添加到请求的 URL 中。Lightsail 会忽略以 “x-” 开头的查询字符串参数，但会将这些参数作为日志记录`Request-URI`字段的一部分包含在请求的访问日志记录中。

例如，`GET` 的 `"s3.amazonaws.com/amzn-s3-demo-bucket/photos/2019/08/puppy.jpg?x-user=johndoe"` 请求工作方式与 `"s3.amazonaws.com/amzn-s3-demo-bucket/photos/2019/08/puppy.jpg"` 的请求的相同，只是 `"x-user=johndoe"` 字符串包含在关联日志记录的 `Request-URI` 字段中。此功能仅在 REST 界面中可用。

## 可扩展访问日志格式的编程注意事项
<a name="programing-considerations"></a>

有时我们可能会通过向每一行的末尾添加新字段来扩展访问日志记录格式。因此，您应该编写解析访问日志的任何代码，以处理后续可能未知的字段。

# 在 Lightsail 中启用存储桶访问日志记录
<a name="amazon-lightsail-enabling-bucket-access-logs"></a>

访问日志记录为向 Amazon Lightsail 对象存储服务中的存储桶发出的请求提供了详细记录。对于许多应用程序而言，访问日志很有用。例如，访问日志信息可能在安全和访问权限审核方面很有用。此外，它还可以帮助您了解您的客户群。

默认情况下，Lightsail 不会收集存储桶的访问日志。启用日志记录后，Lightsail 会将源存储桶的访问日志传送到您选择的目标存储桶。源存储桶和目标存储桶必须位于同一个存储桶中， AWS 区域 并且由同一个账户拥有。

访问日志记录包含有关对存储桶做出的请求的详细信息。这些信息可以包括请求类型、请求中指定的资源以及处理请求的时间和日期。在本指南中，我们将向您展示如何使用 Lightsail API、 AWS Command Line Interface AWS CLI() 或 AWS 为存储桶启用或禁用访问日志记录。 SDKs

有关日志记录基本知识的更多信息，请参阅[存储桶访问日志](amazon-lightsail-bucket-access-logs.md)。

**内容**
+ [访问日志记录的成本](#costs-for-access-logging)
+ [使用 AWS CLI启用访问日志记录](#enabling-access-logging)
+ [使用 AWS CLI禁用访问日志记录](#disabling-access-logging)

## 访问日志记录的成本
<a name="costs-for-access-logging"></a>

在存储桶上启用访问日志记录不收取额外费用。但是，系统提交给存储桶的日志文件将会占用存储空间。您可以随时删除日志文件。如果日志存储桶的数据传输在配置的月度限额内，我们不会评估日志文件传输的数据传输费。

您的目标存储桶不应启用访问日志记录。您可以让日志传输至您拥有的且与源存储桶位于同一区域中的任何存储桶，包括源存储桶本身。不过，为了更方便地管理日志，我们建议您将访问日志保存在不同的存储桶中。

## 使用启用访问日志记录 AWS CLI
<a name="enabling-access-logging"></a>

要为您的存储桶启用访问日志记录，我们建议您在每个 AWS 区域 存储桶中创建一个专用的日志存储桶。然后，将访问日志传输到该专用日志记录存储桶。

完成以下步骤，以使用 AWS CLI启用访问日志记录。

**注意**  
在继续执行此过程之前，必须为 Lightsail 安装 AWS CLI 并对其进行配置。有关更多信息，请参阅[配置为与 Lightsail 配合使用](lightsail-how-to-set-up-and-configure-aws-cli.md)。 AWS CLI 

1. 在本地计算机上打开命令提示符或终端窗口。

1. 输入以下命令以启用访问日志记录。

   ```
   aws lightsail update-bucket --bucket-name SourceBucketName --access-log-config "{\"enabled\": true, \"destination\": \"TargetBucketName\", \"prefix\": \"ObjectKeyNamePrefix/\"}"
   ```

   在该命令中，将以下示例文本替换为自己的文本：
   + *SourceBucketName*-将为其创建访问日志的源存储桶的名称。
   + *TargetBucketName*— 将保存访问日志的目标存储桶的名称。
   + *ObjectKeyNamePrefix/*-访问日志的可选对象密钥名称前缀。请注意，前缀必须以正斜杠 (`/`) 结尾。

   **示例**

   ```
   aws lightsail update-bucket --bucket-name amzn-s3-demo-bucket1 --access-log-config "{\"enabled\": true, \"destination\": \"amzn-s3-demo-bucket2\", \"prefix\": \"logs/amzn-s3-demo-bucket1/\"}"
   ```

   在示例中，*amzn-s3-demo-bucket1*是要为其创建访问日志的源存储桶，*amzn-s3-demo-bucket2*是保存访问日志的目标存储桶，*logs/amzn-s3-demo-bucket1/*也是访问日志的对象密钥名称前缀。

   运行命令之后，您应看到类似于以下示例的结果。源存储桶已更新，访问日志应开始生成并存储在目标存储桶中。  
![\[存储桶的访问日志记录\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/amazon-lightsail-enable-access-logging-for-a-bucket.png)

## 使用禁用访问日志记录 AWS CLI
<a name="disabling-access-logging"></a>

完成以下步骤，以使用 AWS CLI禁用访问日志记录。

**注意**  
在继续执行此过程之前，必须为 Lightsail 安装 AWS CLI 并对其进行配置。有关更多信息，请参阅[配置为与 Lightsail 配合使用](lightsail-how-to-set-up-and-configure-aws-cli.md)。 AWS CLI 

1. 在本地计算机上打开命令提示符或终端窗口。

1. 输入以下命令禁用访问日志记录。

   ```
   aws lightsail update-bucket --bucket-name SourceBucketName --access-log-config "{\"enabled\": false}"
   ```

   在命令中，替换*SourceBucketName*为要禁用访问日志记录的源存储桶的名称。

   **示例**

   ```
   aws lightsail update-bucket --bucket-name amzn-s3-demo-bucket --access-log-config "{\"enabled\": false}"
   ```

   运行命令之后，您应看到类似于以下示例的结果。  
![\[已为存储桶禁用访问日志记录\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/amazon-lightsail-disable-access-logging-for-a-bucket.png)

# 在 Lightsail 中使用亚马逊 Athena 分析存储桶访问日志
<a name="amazon-lightsail-using-bucket-access-logs"></a>

在本指南中，我们向您介绍如何使用访问日志确定对存储桶所做的请求。有关更多信息，请参阅[存储桶访问日志](amazon-lightsail-bucket-access-logs.md)。

**内容**
+ [使用 Amazon Athena 查询请求的访问日志](#querying-access-logs-for-requests)
+ [使用 Amazon S3 访问日志确定对象访问请求](#identifying-object-access-requests)

## 使用 Amazon Athena 查询请求的访问日志
<a name="querying-access-logs-for-requests"></a>

您可以使用 Amazon Athena 查询和确定对访问日志中的存储桶所做的请求。

Lightsail 将访问日志作为对象存储在 Lightsail 存储桶中。使用可以分析日志的工具通常会更轻松。Athena 支持分析对象，并且可用于查询访问日志。

**示例**

以下示例展示了如何在 Amazon Athena 中查询存储桶服务器访问日志。

**注意**  
要在 Athena 查询中指定存储桶位置，您需要格式化目标 存储桶名称和目标前缀，其中日志以 S3 URI 形式传递，如下所示：`s3://amzn-s3-demo-bucket1-logs/prefix/`

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/) 打开 Athena 控制台。

1. 在**查询编辑器**中，运行类似如下的命令。

   ```
   create database bucket_access_logs_db
   ```
**注意**  
最佳做法是在与 S3 存储桶 AWS 区域 相同的地方创建数据库。

1. 在**查询编辑器**中，运行类似如下的命令以便在步骤 2 中创建的数据库中创建一个表架构。`STRING` 和 `BIGINT` 数据类型值是访问日志属性。您可以在 Athena 中查询这些属性。对于 `LOCATION`，请输入之前记下的存储桶和前缀。

   ```
   CREATE EXTERNAL TABLE `s3_access_logs_db.amzn-s3-demo-bucket_logs`(
     `bucketowner` STRING, 
     `bucket_name` STRING, 
     `requestdatetime` STRING, 
     `remoteip` STRING, 
     `requester` STRING, 
     `requestid` STRING, 
     `operation` STRING, 
     `key` STRING, 
     `request_uri` STRING, 
     `httpstatus` STRING, 
     `errorcode` STRING, 
     `bytessent` BIGINT, 
     `objectsize` BIGINT, 
     `totaltime` STRING, 
     `turnaroundtime` STRING, 
     `referrer` STRING, 
     `useragent` STRING, 
     `versionid` STRING, 
     `hostid` STRING, 
     `sigv` STRING, 
     `ciphersuite` STRING, 
     `authtype` STRING, 
     `endpoint` STRING, 
     `tlsversion` STRING)
   ROW FORMAT SERDE 
     'org.apache.hadoop.hive.serde2.RegexSerDe' 
   WITH SERDEPROPERTIES ( 
     'input.regex'='([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) ([^ ]*)(?: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*))?.*$') 
   STORED AS INPUTFORMAT 
     'org.apache.hadoop.mapred.TextInputFormat' 
   OUTPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION
     's3://amzn-s3-demo-bucket1-logs/prefix/'
   ```

1. 在导航窗格中，在 **Database (数据库)** 下，请选择您的数据库。

1. 在 **Tables (表)** 下，请选择表名称旁边的 **Preview table (预览表)**。

   在 **Results (结果)** 窗格中，您应看到来自服务器访问日志中的数据，如 `bucketowner`、`bucket`、`requestdatetime` 等。这表示您成功创建了 Athena 表。您现在可以查询存储桶服务器访问日志。

**示例 — 显示对象删除者和删除事件（时间戳、IP 地址和 IAM 用户）**

```
SELECT RequestDateTime, RemoteIP, Requester, Key 
FROM s3_access_logs_db.amzn-s3-demo-bucket_logs 
WHERE key = 'images/picture.jpg' AND operation like '%DELETE%';
```

**示例 — 显示 IAM 用户执行的所有操作**

```
SELECT * 
FROM s3_access_logs_db.amzn-s3-demo-bucket_logs 
WHERE requester='arn:aws:iam::123456789123:user/user_name';
```

**示例 — 显示在特定时间段内对对象执行的所有操作**

```
SELECT *
FROM s3_access_logs_db.amzn-s3-demo-bucket_logs
WHERE Key='prefix/images/picture.jpg' 
    AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z')
    BETWEEN parse_datetime('2017-02-18:07:00:00','yyyy-MM-dd:HH:mm:ss')
    AND parse_datetime('2017-02-18:08:00:00','yyyy-MM-dd:HH:mm:ss');
```

**示例 — 显示在特定时间段内特定 IP 地址传输的数据量**

```
SELECT SUM(bytessent) AS uploadTotal,
      SUM(objectsize) AS downloadTotal,
      SUM(bytessent + objectsize) AS Total
FROM s3_access_logs_db.amzn-s3-demo-bucket_logs
WHERE RemoteIP='1.2.3.4'
AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z')
BETWEEN parse_datetime('2017-06-01','yyyy-MM-dd')
AND parse_datetime('2017-07-01','yyyy-MM-dd');
```

## 使用 Amazon S3 访问日志确定对象访问请求
<a name="identifying-object-access-requests"></a>

对于诸如 *GET*、*PUT* 和 *DELETE* 等操作，您可以对访问日志使用查询以确定对象访问请求，并发现有关这些请求的进一步信息。

以下 Amazon Athena 查询示例说明了如何从服务器访问日志中获取存储桶的所有 `PUT` 对象请求。

**示例 — 显示将在特定期间内发送 PUT 对象请求的所有请求者**

```
SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime
FROM s3_access_logs_db
WHERE Operation='REST.PUT.OBJECT' AND
parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') 
BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss')
AND 
parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')
```

以下 Amazon Athena 查询示例说明了如何从服务器访问日志中获取 Amazon S3 的所有 GET 对象请求。

**示例 — 显示将在特定期间内发送 GET 对象请求的所有请求者**

```
SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime
FROM s3_access_logs_db
WHERE Operation='REST.GET.OBJECT' AND
parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') 
BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss')
AND 
parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')
```

以下 Amazon Athena 查询示例说明了如何从服务器访问日志中获取向 S3 存储桶发出的所有匿名请求。

**示例 — 显示在特定时间段内向存储桶发出请求的所有匿名请求者**

```
SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime
FROM s3_access_logs_db.amzn-s3-demo-bucket_logs
WHERE Requester IS NULL AND
parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') 
BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss')
AND 
parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')
```

**注意**  
您可以修改日期范围，以满足您的需要。
也可以使用这些查询示例进行安全监控。您可以查看结果或来自意外`PutObject`或未经授权的 IP 的`GetObject`呼叫 addresses/requesters ，也可以查看对存储桶的任何匿名请求。
此查询仅从启用了日志记录的时间检索信息。