

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用存取日誌追蹤物件儲存貯體請求
<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 將存取日誌儲存為物件的位置。來源儲存貯體和目標儲存貯體必須位於同一 AWS 區域，並且由相同帳戶擁有。

   您可將日誌交付給所有您擁有的儲存貯體，在同一的區域當做來源儲存貯體，包括來源儲存貯體本身。但為了更簡易進行記錄管理，建議您將存取記錄儲存在不同的儲存貯體中。

   當來源儲存貯體和目標儲存貯體位於同一個儲存貯體，會為儲存貯體建立額外的日誌。這方式可能不甚理想，因為它可能會導致您的儲存體耗用稍微增加。此外，額外的日誌可能會增加您的搜尋困難。若您選擇將存取日誌儲存於來源儲存貯體中，建議您為日誌物件金鑰指定字首，以常見的字串和日誌物件為字首，以便輕鬆地識別。當多個儲存貯體登入相同的目標儲存貯體時，[金鑰前綴](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#keyprefix)也可用來區分來源儲存貯體。

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 Resource Name)**

請求存取點的 Amazon Resource Name (ARN)。如果存取點 ARN 格式錯誤或未使用，該欄位將包含 '-'。如需存取點的詳細資訊，請參閱[使用存取點](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)。如需 ARN 的詳細資訊，請參閱 *AWS 一般參考指南*中的 [Amazon Resource Name (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
```

**Time (時間)**

收到請求的時間；這些日期和時間都使用國際標準時間 (UTC)。格式使用 *strftime()* 術語，如下所示：*[%d/%b/%Y:%H:%M:%S %z]*

範例項目

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

**遠端 IP**

申請者清楚的網際網路位址。中間代理伺服器與防火牆可能會模糊提出要求電腦的真實位址。

項目範例

```
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 要求訊息的 Request-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
```

**Referer**

HTTP 參照標頭的值，如有。提出要求時，HTTP 使用者代理程式 (例如：瀏覽器) 一般會將此標頭設為連結或內嵌頁面的 URL。

項目範例

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

**使用者代理程式**

HTTP 使用者代理程式標頭的值。

項目範例

```
"curl/7.15.1"
```

**版本 Id**

要求的版本 ID；或者，如果操作不採用 `versionId` 參數則為 `-`。

範例項目

```
3HL4kqtJvjVBH40Nrjfkd
```

**主機 Id**

x-amz-id-2 或 Lightsail 延伸請求 ID。

範例項目

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

**簽章版本**

簽章版本 (`SigV2` 或 `SigV4`)，用來驗證請求或未驗證請求的 `-`。

項目範例

```
SigV2
```

**密碼套件**

針對 HTTPS 請求或 HTTP 的 `-` 交涉的 Secure Sockets Layer (SSL) 密碼。

項目範例

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

**身分驗證類型**

使用的身分驗證類型，`AuthHeader` 代表身分驗證標頭，`QueryString` 代表查詢字串 (預先簽章的 URL)，或 `-` 代表未驗證的請求。

項目範例

```
AuthHeader
```

**主機標頭**

用來連接到 Lightsail 的端點。

範例項目

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

**TLS 版本控制**

用戶端交涉的 Transport Layer Security (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
```

**Time (時間)**

收到請求的時間；這些日期和時間都使用國際標準時間 (UTC)。使用 `strftime()` 術語的格式如下：`[%d/%B/%Y:%H:%M:%S %z]`

項目範例

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

**遠端 IP**

申請者清楚的網際網路位址。中間代理伺服器與防火牆可能會模糊提出要求電腦的真實位址。

項目範例

```
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 要求訊息的 Request-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
```

**Referer**

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 延伸請求 ID。

範例項目

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

**簽章版本**

簽章版本 (`SigV2` 或 `SigV4`)，用來驗證請求或未驗證請求的 `-`。

項目範例

```
SigV2
```

**密碼套件**

針對 HTTPS 請求或 HTTP 的 `-` 交涉的 Secure Sockets Layer (SSL) 密碼。

項目範例

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

**身分驗證類型**

使用的身分驗證類型，`AuthHeader` 代表身分驗證標頭，`QueryString` 代表查詢字串 (預先簽章的 URL)，或 `-` 代表未驗證的請求。

項目範例

```
AuthHeader
```

**主機標頭**

用來連接到 Lightsail 的端點。

範例項目

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

**TLS 版本控制**

用戶端交涉的 Transport Layer Security (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啟用存取記錄。

**注意**  
您必須安裝 AWS CLI 並將其設定為 ，Lightsail才能繼續此程序。如需詳細資訊，請參閱[設定 AWS CLI 以使用 Lightsail](lightsail-how-to-set-up-and-configure-aws-cli.md)。

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_tw/lightsail/latest/userguide/images/amazon-lightsail-enable-access-logging-for-a-bucket.png)

## 使用 停用存取記錄 AWS CLI
<a name="disabling-access-logging"></a>

完成下列程序，即可使用 AWS CLI停用存取記錄。

**注意**  
您必須安裝 AWS CLI 並將其設定為 ，Lightsail才能繼續此程序。如需詳細資訊，請參閱[設定 AWS CLI 以使用 Lightsail](lightsail-how-to-set-up-and-configure-aws-cli.md)。

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_tw/lightsail/latest/userguide/images/amazon-lightsail-disable-access-logging-for-a-bucket.png)

# 在 中使用 Amazon Athena 分析儲存貯體存取日誌 Lightsail
<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')
```

**注意**  
您可以修改日期範圍以符合您的需求。
對安全監控時而言，這些查詢範例也可能相當實用。您可以檢閱來自意外或未授權 IP 地址/請求者的 `PutObject` 或 `GetObject` 呼叫的結果，以及識別對您儲存貯體的任何匿名請求。
此查詢只會擷取啟用日誌之後的資訊。