

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

# 使用伺服器存取記錄記錄要求
<a name="ServerLogs"></a>

伺服器存取記錄日誌，應儲存貯體要求，提出的詳細記錄。伺服器存取日誌對許多應用程式來說，都是個很有用的資料。舉例來說，存取記錄資訊在安全與存取稽核中相當實用。這些資訊也可幫助您了解自己的客戶群，並掌握 Amazon S3 帳單相關資料。

**注意**  
若區域是在 2019 年 3 月 20 日後才推出，則伺服器存取日誌不會記錄與其錯誤區域重新導向錯誤相關的資訊。當對物件或儲存貯體的請求在該儲存貯體存在的區域以外發出時，就會發生錯誤的區域重新導向錯誤。

## 如何啟用日誌交付？
<a name="server-access-logging-overview"></a>

若要啟用日誌傳遞，請執行下列基本步驟。如需詳細資訊，請參閱[啟用 Amazon S3 伺服器存取記錄日誌](enable-server-access-logging.md)。

1. **提供目的地儲存貯體的名稱** (也稱為「目標儲存貯體」**)。此儲存貯體是您希望 Amazon S3 將存取日誌儲存為物件的位置。來源和目的地儲存貯體必須位於同一 AWS 區域 ，並且由相同帳戶擁有。目的地儲存貯體不得具有 S3 物件鎖定預設保留期組態。目的地儲存貯體也必須未啟用「請求者付款」。

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

   當來源儲存貯體和目的地儲存貯體位於同一儲存貯體時，會為寫入儲存貯體的日誌建立額外的日誌，以建立日誌無限迴圈。不建議這麼做，因為它可能會導致您的儲存體帳單稍微增加。此外，額外的日誌可能會增加您的搜尋困難。

   若您選擇將存取日誌儲存在來源儲存貯體中，建議您為所有的日誌物件索引鍵指定目的地字首 (也稱為*目標字首*)。當您指定字首時，所有日誌物件名稱都會以通用字串開頭，如此就能更容易識別日誌物件。

1. **(選用) 為所有 Amazon S3 日誌物件索引鍵指派目的地字首。**目的地字首 (也稱為*目標字首*) 讓您更容易尋找日誌物件。例如，若指定的字首值為 `logs/`，則 Amazon S3 建立的每個日誌物件都會以 `logs/` 字首作為其索引鍵的開頭。

   ```
   logs/2013-11-01-21-32-16-E568B2907131C0C0
   ```

   如果您指定字首值 `logs`，則日誌物件會顯示如下：

   ```
   logs2013-11-01-21-32-16-E568B2907131C0C0
   ```

   當多個儲存貯體記錄到相同目的地儲存貯體時，[字首](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#keyprefix)也可用來區分來源儲存貯體。

   此字首也可協助您刪除日誌。例如，您可為 Amazon S3 設定生命週期組態規則，刪除具有特定字首的物件。如需詳細資訊，請參閱[刪除 Amazon S3 日誌檔案](deleting-log-files-lifecycle.md)。

1. **(選用) 設定可讓其他人存取所產生日誌的許可**。**依預設，儲存貯體擁有者一律僅擁用日誌物件的完整存取權。如果目的地儲存貯體使用 S3 物件擁有權的儲存貯體擁有者強制執行設定來停用存取控制清單 (ACL)，則您無法在使用 ACL 的目的地授權 (也稱為*目標授權*) 中授予許可。但是，您可以更新目的地儲存貯體的儲存貯體政策，以將存取權授予其他使用者。如需詳細資訊，請參閱[Amazon S3 的身分和存取管理](security-iam.md)及[日誌交付許可](enable-server-access-logging.md#grant-log-delivery-permissions-general)。

1. **(選用) 設定日誌檔的日誌物件索引鍵格式。**有兩種日誌物件索引鍵格式可供您選擇 (也稱為*目標物件索引鍵格式*)：
   + **非日期型分割**：這是原始日誌物件索引鍵格式。如果您選擇此格式，日誌檔索引鍵格式會顯示如下：

     ```
     [DestinationPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
     ```

     例如，如果您指定 `logs/` 作為字首，則日誌物件的命名如下：

     ```
     logs/2013-11-01-21-32-16-E568B2907131C0C0
     ```
   + **日期行分割**：如果您選擇日期型分割，則可以選擇日誌檔的事件時間或傳遞時間作為日誌格式中使用的日期來源。此格式較容易查詢日誌。

     如果您選擇日期型分割，日誌檔索引鍵格式會顯示如下：

     ```
     [DestinationPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
     ```

     例如，如果您指定 `logs/` 作為目標字首，則日誌物件的命名如下：

     ```
     logs/123456789012/us-west-2/amzn-s3-demo-source-bucket/2023/03/01/2023-03-01-21-32-16-E568B2907131C0C0
     ```

     對於傳遞時間傳遞，日誌檔名稱中的時間會與日誌檔的傳遞時間對應。

     對於事件時間傳遞，年、月和日會對應事件發生的日期，且索引鍵中的時、分和秒會設定為 `00`。這些日誌檔中傳遞的日誌僅適用特定的一天。

   

   如果您透過 AWS Command Line Interface (AWS CLI)、 AWS SDKs或 Amazon S3 REST API 設定日誌，請使用 `TargetObjectKeyFormat` 指定日誌物件金鑰格式。若要指定非日期型分割，請使用 `SimplePrefix`。若要指定日期型分割，請使用 `PartitionedPrefix`。如果您使用 `PartitionedPrefix`，請使用 `PartitionDateSource` 指定 `EventTime` 或 `DeliveryTime`。

   若是 `SimplePrefix`，日誌檔索引鍵格式顯示如下：

   ```
   [TargetPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
   ```

   若是具有事件時間或傳遞時間的 `PartitionedPrefix`，日誌檔索引鍵格式顯示如下：

   ```
   [TargetPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
   ```

## 日誌物件金鑰格式
<a name="server-log-keyname-format"></a>

Amazon S3 會針對其上傳到目的地儲存貯體的日誌物件，使用下列物件索引鍵格式：
+ **非日期型分割**：這是原始日誌物件索引鍵格式。如果您選擇此格式，日誌檔索引鍵格式會顯示如下：

  ```
  [DestinationPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
  ```
+ **日期行分割**：如果您選擇日期型分割，則可以選擇日誌檔的事件時間或傳遞時間作為日誌格式中使用的日期來源。此格式較容易查詢日誌。

  如果您選擇日期型分割，日誌檔索引鍵格式會顯示如下：

  ```
  [DestinationPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
  ```

在日誌物件索引鍵中，`YYYY`、`MM`、`DD`、`hh`、`mm` 與 `ss` 分別是年、月、日、時、分與秒的數字。這些日期和時間都使用國際標準時間 (UTC)。

在特定時間交付的日誌檔，會包含該時間之前的任何時間點所寫入之記錄。但無法得知某特定時間間隔的所有日誌記錄是否皆已交付。

金鑰的 `UniqueString` 元件的存在原因，就是為了要避免覆寫檔案。它沒有任何意義，所以日誌處理軟體應會忽略它。

## 交付日誌的方式？
<a name="how-logs-delivered"></a>

Amazon S3 會定期收集存取日誌記錄，將這些記錄整合為日誌檔，然後將日誌檔上傳至目的地儲存貯體作為日誌物件。若您對多個識別同一目的地儲存貯體的來源儲存貯體啟用了記錄功能，則此目的地儲存貯體就會有這些來源儲存貯體的存取日誌。但每個日誌物件都會回報特定來源儲存貯體的存取日誌記錄。

Amazon S3 使用特殊日誌交付帳戶來寫入伺服器存取日誌。這些寫入受一般的存取控制限制之約束。建議您更新目的地儲存貯體的儲存貯體政策，以授予日誌記錄服務主體的存取權 (`logging.s3.amazonaws.com`) 以進行存取日誌交付。您也可以透過儲存貯體存取控制清單 (ACL)，將存取日誌交付的存取權授予 S3 日誌交付群組。不過，不建議使用儲存貯體 ACL 授予 S3 日誌交付群組的存取權。

當啟用伺服器存取記錄並透過目的地儲存貯體政策授予存取日誌交付的存取權時，您必須更新政策以允許 `s3:PutObject` 存取記錄服務主體。如果您使用 Amazon S3 主控台來啟用伺服器存取記錄，則主控台會自動更新目的地儲存貯體政策，將這些許可授予記錄服務主體。如需有關授予伺服器存取日誌交付許可的詳細資訊，請參閱 [日誌交付許可](enable-server-access-logging.md#grant-log-delivery-permissions-general)。

**注意**  
在下列情況下，S3 不支援將 CloudTrail 日誌或伺服器存取日誌傳送給 VPC 端點請求的請求者或儲存貯體擁有者：當 VPC 端點政策拒絕請求時，或者如果請求在評估 VPC 政策之前失敗。

**S3 物件擁有權的儲存貯體擁有者強制執行設定**  
如果目的地儲存貯體使用「物件擁有權」的儲存貯體擁有者強制設定，則 ACL 會停用且不再影響許可。您必須更新目的地儲存貯體上的儲存貯體政策，以授予記錄服務主體的存取權。如需「物件擁有權」的詳細資訊，請參閱 [授予 S3 日誌交付群組的存取權以進行伺服器存取日誌記錄](object-ownership-migrating-acls-prerequisites.md#object-ownership-server-access-logs)。

## 伺服器日誌交付最佳作法
<a name="LogDeliveryBestEffort"></a>

伺服器存取日誌記錄會依最佳作法交付。大多數儲存貯體的要求，為日誌記錄結果適合組態，交付日誌記錄。大多數的日誌記錄會於記錄後的數小時內交付，但也可以常交付。

並不保證伺服器記錄的完成程度與時間先後順序。特定要求的日誌記錄，可能會在實際處理要求之後很久才交付，或者*有可能完全不會交付*。您甚至可能會看到日誌記錄的複寫。伺服器日誌的目的在於讓您能了解儲存貯體流量的真實狀態。雖然日誌記錄極少遺失或重複，但請注意，伺服器記錄並不代表所有請求的完整記錄。

由於伺服器記錄的最佳作法特性，您的用量報告可能會包含一或多個未出現在已交付伺服器日誌中的存取請求。您可以在 AWS 帳單與成本管理 主控台的**成本和用量報告**下，找到這些用量報告。

## 儲存貯體記錄狀態變更會在一段時間後生效
<a name="BucketLoggingStatusChanges"></a>

記錄儲存貯體狀態的變更，要一段時間後才會實際影響到日誌檔交付。例如，若已啟用儲存貯體記錄，則在接下來的一小時內提出之要求，可能有些會記錄下來，有些則不會。假熱您將記錄的目的地儲存貯體從儲存貯體 A 變更為儲存貯體 B，則接下來的一小時內，有些日誌可能會繼續交付到儲存貯體 A，而有些則可能會交付到新的目的地儲存貯體 B。在任何情況之下，新的設定最後都會生效，您無須採取任何動作。

如需記錄和記錄檔案的詳細資訊，請參閱下列章節：

**Topics**
+ [

## 如何啟用日誌交付？
](#server-access-logging-overview)
+ [

## 日誌物件金鑰格式
](#server-log-keyname-format)
+ [

## 交付日誌的方式？
](#how-logs-delivered)
+ [

## 伺服器日誌交付最佳作法
](#LogDeliveryBestEffort)
+ [

## 儲存貯體記錄狀態變更會在一段時間後生效
](#BucketLoggingStatusChanges)
+ [

# 啟用 Amazon S3 伺服器存取記錄日誌
](enable-server-access-logging.md)
+ [

# Amazon S3 伺服器存取日誌格式
](LogFormat.md)
+ [

# 刪除 Amazon S3 日誌檔案
](deleting-log-files-lifecycle.md)
+ [

# 使用 Amazon S3 伺服器存取日誌來識別請求
](using-s3-access-logs-to-identify-requests.md)
+ [

# 針對伺服器存取記錄進行疑難排解
](troubleshooting-server-access-logging.md)

# 啟用 Amazon S3 伺服器存取記錄日誌
<a name="enable-server-access-logging"></a>

伺服器存取記錄，針對向 Amazon S3 儲存貯體提出的請求，提供詳細的記錄。伺服器存取日誌對許多應用程式來說，都是個很有用的資料。舉例來說，存取記錄資訊在安全與存取稽核中相當實用。這些資訊也可幫助您了解自己的客戶群，並掌握 Amazon S3 帳單相關資料。

根據預設，Amazon S3 不會收集伺服器存取日誌。啟用記錄後，Amazon S3 會將來源儲存貯體的存取日誌交付給您所選擇的目的地儲存貯體 (也稱為*目標儲存貯體*)。目的地儲存貯體必須與來源儲存貯體位於相同的 AWS 區域 和 AWS 帳戶 中。

存取日誌記錄包含對儲存貯體提出要求，內有詳細資訊。這資訊可能包含要求類型、要求中指定的資源，以及要求的處理時間和日期。如需記錄基本概念的詳細資訊，請參閱 [使用伺服器存取記錄記錄要求](ServerLogs.md)。

**重要**  
啟用 Amazon S3 儲存貯體的伺服器存取記錄日誌無須額外付費。不過，系統提供給您的任何日誌檔都會產生一般儲存費用 (您隨時都可刪除日誌檔)。我們不會評估日誌檔傳遞的資料傳輸費，但會收取存取日誌檔的一般資料傳輸費率。
您的目的地儲存貯體不應啟用伺服器存取記錄。您可將日誌交付給所有您擁有的儲存貯體，在同一的區域當做來源儲存貯體，包括來源儲存貯體本身。不過，將日誌交付至來源儲存貯體會導致日誌的無限迴圈，因此不建議這樣做。為了更簡易進行記錄管理，建議您將存取記錄儲存在不同的儲存貯體中。如需詳細資訊，請參閱[如何啟用日誌交付？](ServerLogs.md#server-access-logging-overview)
已啟用 S3 物件鎖定的 S3 儲存貯體不能用作伺服器存取日誌的目的地儲存貯體。目的地儲存貯體不得具有預設保留期組態。
目的地儲存貯體不得啟用「請求者付款」。

您可以使用 Amazon S3 主控台、Amazon S3 API、 AWS Command Line Interface (AWS CLI) 或 AWS SDKs 來啟用或停用伺服器存取記錄。

## 日誌交付許可
<a name="grant-log-delivery-permissions-general"></a>

Amazon S3 使用特殊日誌交付帳戶來寫入伺服器存取日誌。這些寫入受一般的存取控制限制之約束。對於存取日誌交付，您必須將目的地儲存貯體存取權授予記錄服務主體 (`logging.s3.amazonaws.com`)。

若要授予 Amazon S3 進行日誌傳遞的許可，您可以使用儲存貯體政策或儲存貯體存取控制清單 (ACL)，取決於目的地儲存貯體的 S3 物件擁有權設定。不過，建議您使用儲存貯體政策，而不是 ACL。

**S3 物件擁有權的儲存貯體擁有者強制執行設定**  
如果目的地儲存貯體使用「物件擁有權」的儲存貯體擁有者強制設定，則 ACL 會停用且不再影響許可。在此情況下，您必須更新目的地儲存貯體的儲存貯體政策，以授予記錄服務主體的存取權。您無法更新儲存貯體 ACL 以授予 S3 日誌交付群組的存取權。您也無法在 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html) 組態中包含目的地授權 (也稱為*目標授權*)。

如需將存取日誌交付的現有儲存貯體 ACL 遷移至儲存貯體政策的相關資訊，請參閱 [授予 S3 日誌交付群組的存取權以進行伺服器存取日誌記錄](object-ownership-migrating-acls-prerequisites.md#object-ownership-server-access-logs)。如需「物件擁有權」的詳細資訊，請參閱 [控制物件的擁有權並停用儲存貯體的 ACL](about-object-ownership.md)。建立新的儲存貯體時，預設會停用 ACL。

**使用儲存貯體政策授予存取權**  
若要使用目的地儲存貯體上的儲存貯體政策授予存取權，請更新儲存貯體政策以將 `s3:PutObject` 許可授予記錄服務主體。如果您使用 Amazon S3 主控台來啟用伺服器存取記錄，則主控台會自動更新目的地儲存貯體上的儲存貯體政策，以將此許可授予記錄服務主體。如果您以程式設計方式啟用伺服器存取記錄，則必須手動更新目的地儲存貯體的儲存貯體政策，以將存取權授予記錄服務主體。

如需將存取權授予記錄服務主體的範例儲存貯體政策，請參閱 [使用儲存貯體政策授予記錄服務主體的許可](#grant-log-delivery-permissions-bucket-policy)。

**使用儲存貯體 ACL 授予存取權**  
您可以交替使用儲存貯體 ACL 來授予存取日誌交付的存取權。您可以為將 `WRITE` 和 `READ_ACP` 許可授予 S3 日誌交付群組的儲存貯體 ACL 新增授予項目。不過，不建議使用儲存貯體 ACL 授予 S3 日誌交付群組的存取權。如需詳細資訊，請參閱[控制物件的擁有權並停用儲存貯體的 ACL](about-object-ownership.md)。如需將存取日誌交付的現有儲存貯體 ACL 遷移至儲存貯體政策的相關資訊，請參閱 [授予 S3 日誌交付群組的存取權以進行伺服器存取日誌記錄](object-ownership-migrating-acls-prerequisites.md#object-ownership-server-access-logs)。如需將存取權授予記錄服務主體的範例 ACL，請參閱 [使用儲存貯體 ACL 將許可授予日誌交付群組](#grant-log-delivery-permissions-acl)。

### 使用儲存貯體政策授予記錄服務主體的許可
<a name="grant-log-delivery-permissions-bucket-policy"></a>

此範例儲存貯體政策會將 `s3:PutObject` 許可授予記錄服務主體 (`logging.s3.amazonaws.com`)。若要使用此儲存貯體政策，請以您自己的資訊取代 `user input placeholders`。在下列政策中， `amzn-s3-demo-destination-bucket` 是將交付伺服器存取日誌的目的地儲存貯體，而 `amzn-s3-demo-source-bucket` 是來源儲存貯體。 `EXAMPLE-LOGGING-PREFIX` 是您要用於日誌物件的選用目的地字首 （也稱為*目標字首*)。 `SOURCE-ACCOUNT-ID`是 AWS 帳戶 擁有來源儲存貯體的 。

**注意**  
如果您的儲存貯體政策中有 `Deny` 陳述式，請確保它們不會阻止 Amazon S3 交付存取日誌。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3ServerAccessLogsPolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "logging.s3.amazonaws.com"
            },
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/EXAMPLE-LOGGING-PREFIX*",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-source-bucket"
                },
                "StringEquals": {
                    "aws:SourceAccount": "SOURCE-ACCOUNT-ID"
                }
            }
        }
    ]
}
```

------

### 使用儲存貯體 ACL 將許可授予日誌交付群組
<a name="grant-log-delivery-permissions-acl"></a>

**注意**  
做為安全性最佳實務，根據預設，Amazon S3 會在所有新儲存貯體中停用存取控制清單 (ACL)。如需 Amazon S3 主控台中 ACL 許可的詳細資訊，請參閱 [設定 ACL](managing-acls.md)。

雖然我們不建議使用此方法，但您可以使用儲存貯體 ACL 將許可授予日誌交付群組。不過，如果目的地儲存貯體使用「物件擁有權」儲存貯體擁有者強制執行的設定，則您無法設定儲存貯體或物件 ACL。您也無法在 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html) 組態中包含目的地授權 (也稱為*目標授權*)。反之，您必須使用儲存貯體政策，授予記錄服務主體 (`logging.s3.amazonaws.com`) 的存取權。如需詳細資訊，請參閱[日誌交付許可](#grant-log-delivery-permissions-general)。

在儲存貯體 ACL 中，日誌交付群組會以下列 URL 表示：

```
1. http://acs.amazonaws.com/groups/s3/LogDelivery
```

若要授予 `WRITE` 和 `READ_ACP` (ACL 讀取) 許可，請將下列授權新增至目的地儲存貯體 ACL：

```
 1. <Grant>
 2.     <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:type="Group">
 3.         <URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI> 
 4.     </Grantee>
 5.     <Permission>WRITE</Permission>
 6. </Grant>
 7. <Grant>
 8.     <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:type="Group">
 9.         <URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI> 
10.     </Grantee>
11.     <Permission>READ_ACP</Permission>
12. </Grant>
```

如需以程式設計方式新增 ACL 授權的範例，請參閱 [設定 ACL](managing-acls.md)。

**重要**  
當您在儲存貯 AWS CloudFormation 體上使用 啟用 Amazon S3 伺服器存取記錄，且您使用 ACLs 授予對 S3 日誌交付群組的存取權時，您還必須將 "`AccessControl": "LogDeliveryWrite"` 新增至 CloudFormation 範本。請務必這樣做，因為您只能透過為儲存貯體建立 ACL 來授予這些許可，而無法在 CloudFormation 中為儲存貯體建立自訂 ACL。您只能搭配 CloudFormation 使用固定 ACL。

## 啟用伺服器存取日誌記錄
<a name="enable-server-logging"></a>

若要使用 Amazon S3 主控台、Amazon S3 REST API、 AWS SDKs 和 啟用伺服器存取記錄 AWS CLI，請使用下列程序。

### 使用 S3 主控台
<a name="server-access-logging"></a>

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**一般用途儲存貯體**。

1. 在儲存貯體清單中，選擇要啟用伺服器存取記錄日誌的儲存貯體名稱。

1. 選擇 **Properties** (屬性)。

1. 在 **Server access logging (伺服器存取記錄日誌)** 區段中，選擇 **Edit (編輯)**。

1. 在**伺服器存取記錄**下，選擇**啟用**。

1. 在**目的地儲存貯體**下，指定儲存貯體和選用的字首。如果您指定字首，建議您在字首後面加上正斜線 (`/`)，以便更容易找到日誌。
**注意**  
指定包含斜線 (`/`) 的字首，可讓您更容易找到日誌物件。例如，若指定的字首值為 `logs/`，則 Amazon S3 建立的每個日誌物件都會以 `logs/` 字首作為其索引鍵的開頭，如下所示：  

   ```
   logs/2013-11-01-21-32-16-E568B2907131C0C0
   ```
如果您指定字首值 `logs`，則日誌物件會顯示如下：  

   ```
   logs2013-11-01-21-32-16-E568B2907131C0C0
   ```

1. 在**日誌物件索引鍵格式**下，執行下列其中一項操作：
   + 若要選擇非日期型分割，請選擇 **[DestinationPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]**。
   + 若要選擇日期型分割，請選擇 **[DestinationPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]**，然後選擇 **S3 事件時間**或**日誌檔案交付時間**。

1. 選擇**儲存變更**。

   在儲存貯體上啟用伺服器存取記錄時，主控台會啟用來源儲存貯體上的記錄，同時更新目的地儲存貯體的儲存貯體政策，以將 `s3:PutObject` 許可授予記錄服務主體 (`logging.s3.amazonaws.com`)。如需此儲存貯體政策的詳細資訊，請參閱 [使用儲存貯體政策授予記錄服務主體的許可](#grant-log-delivery-permissions-bucket-policy)。

   您可以在目的地儲存貯體中檢視日誌。啟用伺服器存取記錄後，可能需要好幾個小時才能將記錄傳遞到目標儲存貯體中。如需如何以及何時交付日誌的詳細資訊，請參閱 [交付日誌的方式？](ServerLogs.md#how-logs-delivered)。

如需詳細資訊，請參閱[檢視 S3 一般用途儲存貯體的屬性](view-bucket-properties.md)。

### 使用 REST API
<a name="enable-logging-rest"></a>

若要啟用記錄，請提交 [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html) 請求，以在來源儲存貯體上新增記錄組態。請求會指定目的地儲存貯體 (也稱為*目標儲存貯體*)，以及選擇性地指定要搭配所有日誌物件索引鍵使用的字首。

下列範例將 `amzn-s3-demo-destination-bucket` 識別為目的地儲存貯體，並將 *`logs/`* 識別為字首。

```
1. <BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01">
2.   <LoggingEnabled>
3.     <TargetBucket>amzn-s3-demo-destination-bucket</TargetBucket>
4.     <TargetPrefix>logs/</TargetPrefix>
5.   </LoggingEnabled>
6. </BucketLoggingStatus>
```

下列範例將 `amzn-s3-demo-destination-bucket` 識別為目的地儲存貯體、將 *`logs/`* 識別為字首，並將 `EventTime` 識別為日誌物件索引鍵格式。

```
 1. <BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01">
 2.   <LoggingEnabled>
 3.     <TargetBucket>amzn-s3-demo-destination-bucket</TargetBucket>
 4.     <TargetPrefix>logs/</TargetPrefix>
 5.     <TargetObjectKeyFormat>
 6.       <PartitionedPrefix>
 7.          <PartitionDateSource>EventTime</PartitionDateSource>
 8.       </PartitionedPrefix>
 9.   </TargetObjectKeyFormat>
10.   </LoggingEnabled>
11. </BucketLoggingStatus>
```

日誌物件由 S3 日誌交付帳戶寫入並擁有，且已為儲存貯體擁有者授予日誌物件的完整許可。您可以選擇使用目的地授權 (也稱為*目標授權*) 將許可授予其他使用者，讓他們能夠存取日誌。如需詳細資訊，請參閱[https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html)。

**注意**  
如果目的地儲存貯體使用「物件擁有權」的儲存貯體擁有者強制執行設定，則您無法使用目的地授權將許可授予其他使用者。若要將許可授予其他人，您可以在目的地儲存貯體上更新儲存貯體政策。如需詳細資訊，請參閱[日誌交付許可](#grant-log-delivery-permissions-general)。

若要擷取儲存貯體上的記錄組態，請使用 [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlogging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlogging.html) API 操作。

若要刪除記錄組態，請傳送包含空白 `BucketLoggingStatus` 的 `PutBucketLogging` 請求：

```
1. <BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01">
2. </BucketLoggingStatus>
```

若要在儲存貯體上啟用記錄，您可以使用 Amazon S3 API 或 AWS SDK 包裝函式程式庫。

### 使用 AWS SDKs
<a name="enable-logging-sdk"></a>

下列範例會在儲存貯體上啟用記錄。您必須建立兩個儲存貯體，一個來源儲存貯體與一個目的地 (目標) 儲存貯體。這些範例會先更新目的地儲存貯體上的儲存貯體 ACL。然後將必要的許可授予日誌交付群組，以將日誌寫入目的地儲存貯體，接著再啟用來源儲存貯體上的記錄。

這些範例不適用於使用「物件擁有權」之儲存貯體擁有者強制執行設定的目的地儲存貯體。

如果目的地 (目標) 儲存貯體使用「物件擁有權」儲存貯體擁有者強制執行的設定，則您無法設定儲存貯體或物件 ACL。您也無法將目的地 (目標) 授權納入您的 [PutBucketLogging](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html) 組態中。您必須使用儲存貯體政策授予日誌記錄服務主體 (`logging.s3.amazonaws.com`) 的存取權。如需詳細資訊，請參閱[日誌交付許可](#grant-log-delivery-permissions-general)。

------
#### [ .NET ]

**適用於 .NET 的 SDK**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/S3#code-examples)中設定和執行。

```
    using System;
    using System.IO;
    using System.Threading.Tasks;
    using Amazon.S3;
    using Amazon.S3.Model;
    using Microsoft.Extensions.Configuration;

    /// <summary>
    /// This example shows how to enable logging on an Amazon Simple Storage
    /// Service (Amazon S3) bucket. You need to have two Amazon S3 buckets for
    /// this example. The first is the bucket for which you wish to enable
    /// logging, and the second is the location where you want to store the
    /// logs.
    /// </summary>
    public class ServerAccessLogging
    {
        private static IConfiguration _configuration = null!;

        public static async Task Main()
        {
            LoadConfig();

            string bucketName = _configuration["BucketName"];
            string logBucketName = _configuration["LogBucketName"];
            string logObjectKeyPrefix = _configuration["LogObjectKeyPrefix"];
            string accountId = _configuration["AccountId"];

            // If the AWS Region defined for your default user is different
            // from the Region where your Amazon S3 bucket is located,
            // pass the Region name to the Amazon S3 client object's constructor.
            // For example: RegionEndpoint.USWest2 or RegionEndpoint.USEast2.
            IAmazonS3 client = new AmazonS3Client();

            try
            {
                // Update bucket policy for target bucket to allow delivery of logs to it.
                await SetBucketPolicyToAllowLogDelivery(
                    client,
                    bucketName,
                    logBucketName,
                    logObjectKeyPrefix,
                    accountId);

                // Enable logging on the source bucket.
                await EnableLoggingAsync(
                    client,
                    bucketName,
                    logBucketName,
                    logObjectKeyPrefix);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine($"Error: {e.Message}");
            }
        }

        /// <summary>
        /// This method grants appropriate permissions for logging to the
        /// Amazon S3 bucket where the logs will be stored.
        /// </summary>
        /// <param name="client">The initialized Amazon S3 client which will be used
        /// to apply the bucket policy.</param>
        /// <param name="sourceBucketName">The name of the source bucket.</param>
        /// <param name="logBucketName">The name of the bucket where logging
        /// information will be stored.</param>
        /// <param name="logPrefix">The logging prefix where the logs should be delivered.</param>
        /// <param name="accountId">The account id of the account where the source bucket exists.</param>
        /// <returns>Async task.</returns>
        public static async Task SetBucketPolicyToAllowLogDelivery(
            IAmazonS3 client,
            string sourceBucketName,
            string logBucketName,
            string logPrefix,
            string accountId)
        {
            var resourceArn = @"""arn:aws:s3:::" + logBucketName + "/" + logPrefix + @"*""";

            var newPolicy = @"{
                                ""Statement"":[{
                                ""Sid"": ""S3ServerAccessLogsPolicy"",
                                ""Effect"": ""Allow"",
                                ""Principal"": { ""Service"": ""logging.s3.amazonaws.com"" },
                                ""Action"": [""s3:PutObject""],
                                ""Resource"": [" + resourceArn + @"],
                                ""Condition"": {
                                ""ArnLike"": { ""aws:SourceArn"": ""arn:aws:s3:::" + sourceBucketName + @""" },
                                ""StringEquals"": { ""aws:SourceAccount"": """ + accountId + @""" }
                                        }
                                    }]
                                }";
            Console.WriteLine($"The policy to apply to bucket {logBucketName} to enable logging:");
            Console.WriteLine(newPolicy);

            PutBucketPolicyRequest putRequest = new PutBucketPolicyRequest
            {
                BucketName = logBucketName,
                Policy = newPolicy,
            };
            await client.PutBucketPolicyAsync(putRequest);
            Console.WriteLine("Policy applied.");
        }

        /// <summary>
        /// This method enables logging for an Amazon S3 bucket. Logs will be stored
        /// in the bucket you selected for logging. Selected prefix
        /// will be prepended to each log object.
        /// </summary>
        /// <param name="client">The initialized Amazon S3 client which will be used
        /// to configure and apply logging to the selected Amazon S3 bucket.</param>
        /// <param name="bucketName">The name of the Amazon S3 bucket for which you
        /// wish to enable logging.</param>
        /// <param name="logBucketName">The name of the Amazon S3 bucket where logging
        /// information will be stored.</param>
        /// <param name="logObjectKeyPrefix">The prefix to prepend to each
        /// object key.</param>
        /// <returns>Async task.</returns>
        public static async Task EnableLoggingAsync(
            IAmazonS3 client,
            string bucketName,
            string logBucketName,
            string logObjectKeyPrefix)
        {
            Console.WriteLine($"Enabling logging for bucket {bucketName}.");
            var loggingConfig = new S3BucketLoggingConfig
            {
                TargetBucketName = logBucketName,
                TargetPrefix = logObjectKeyPrefix,
            };

            var putBucketLoggingRequest = new PutBucketLoggingRequest
            {
                BucketName = bucketName,
                LoggingConfig = loggingConfig,
            };
            await client.PutBucketLoggingAsync(putBucketLoggingRequest);
            Console.WriteLine($"Logging enabled.");
        }

        /// <summary>
        /// Loads configuration from settings files.
        /// </summary>
        public static void LoadConfig()
        {
            _configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("settings.json") // Load settings from .json file.
                .AddJsonFile("settings.local.json", true) // Optionally, load local settings.
                .Build();
        }
    }
```
+  如需 API 詳細資訊，請參閱《適用於 .NET 的 AWS SDK API 參考》**中的 [PutBucketLogging](https://docs.aws.amazon.com/goto/DotNetSDKV3/s3-2006-03-01/PutBucketLogging)。

------
#### [ Java ]

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.BucketLoggingStatus;
import software.amazon.awssdk.services.s3.model.LoggingEnabled;
import software.amazon.awssdk.services.s3.model.PartitionedPrefix;
import software.amazon.awssdk.services.s3.model.PutBucketLoggingRequest;
import software.amazon.awssdk.services.s3.model.TargetObjectKeyFormat;

// Class to set a bucket policy on a target S3 bucket and enable server access logging on a source S3 bucket.
public class ServerAccessLogging {
    private static S3Client s3Client;

    public static void main(String[] args) {
        String sourceBucketName = "SOURCE-BUCKET";
        String targetBucketName = "TARGET-BUCKET";
        String sourceAccountId = "123456789012";
        String targetPrefix = "logs/";

        // Create S3 Client.
        s3Client = S3Client.builder().
                region(Region.US_EAST_2)
                .build();

        // Set a bucket policy on the target S3 bucket to enable server access logging by granting the
        // logging.s3.amazonaws.com principal permission to use the PutObject operation.
        ServerAccessLogging serverAccessLogging = new ServerAccessLogging();
        serverAccessLogging.setTargetBucketPolicy(sourceAccountId, sourceBucketName, targetBucketName);

        // Enable server access logging on the source S3 bucket.
        serverAccessLogging.enableServerAccessLogging(sourceBucketName, targetBucketName,
                targetPrefix);

    }

    // Function to set a bucket policy on the target S3 bucket to enable server access logging by granting the
    // logging.s3.amazonaws.com principal permission to use the PutObject operation.
    public void setTargetBucketPolicy(String sourceAccountId, String sourceBucketName, String targetBucketName) {
        String policy = "{\n" +
                "    \"Version\": \"2012-10-17\",\n" +
                "    \"Statement\": [\n" +
                "        {\n" +
                "            \"Sid\": \"S3ServerAccessLogsPolicy\",\n" +
                "            \"Effect\": \"Allow\",\n" +
                "            \"Principal\": {\"Service\": \"logging.s3.amazonaws.com\"},\n" +
                "            \"Action\": [\n" +
                "                \"s3:PutObject\"\n" +
                "            ],\n" +
                "            \"Resource\": \"arn:aws:s3:::" + targetBucketName + "/*\",\n" +
                "            \"Condition\": {\n" +
                "                \"ArnLike\": {\n" +
                "                    \"aws:SourceArn\": \"arn:aws:s3:::" + sourceBucketName + "\"\n" +
                "                },\n" +
                "                \"StringEquals\": {\n" +
                "                    \"aws:SourceAccount\": \"" + sourceAccountId + "\"\n" +
                "                }\n" +
                "            }\n" +
                "        }\n" +
                "    ]\n" +
                "}";
        s3Client.putBucketPolicy(b -> b.bucket(targetBucketName).policy(policy));
    }

    // Function to enable server access logging on the source S3 bucket.
    public void enableServerAccessLogging(String sourceBucketName, String targetBucketName,
            String targetPrefix) {
        TargetObjectKeyFormat targetObjectKeyFormat = TargetObjectKeyFormat.builder()
                .partitionedPrefix(PartitionedPrefix.builder().partitionDateSource("EventTime").build())
                .build();
        LoggingEnabled loggingEnabled = LoggingEnabled.builder()
                .targetBucket(targetBucketName)
                .targetPrefix(targetPrefix)
                .targetObjectKeyFormat(targetObjectKeyFormat)
                .build();
        BucketLoggingStatus bucketLoggingStatus = BucketLoggingStatus.builder()
                .loggingEnabled(loggingEnabled)
                .build();
        s3Client.putBucketLogging(PutBucketLoggingRequest.builder()
                .bucket(sourceBucketName)
                .bucketLoggingStatus(bucketLoggingStatus)
                .build());
    }

}
```

------

### 使用 AWS CLI
<a name="enabling-s3-access-logs-for-requests"></a>

我們建議您在擁有 S3 儲存貯體 AWS 區域 的每個 中建立專用的記錄儲存貯體。然後將 Amazon S3 存取日誌交付至該 S3 儲存貯體。如需詳細資訊，請參閱《AWS CLI 參考》**中的 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-logging.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-logging.html)。

如果目的地 (目標) 儲存貯體使用「物件擁有權」儲存貯體擁有者強制執行的設定，則您無法設定儲存貯體或物件 ACL。您也無法將目的地 (目標) 授權納入您的 [PutBucketLogging](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html) 組態中。您必須使用儲存貯體政策授予日誌記錄服務主體 (`logging.s3.amazonaws.com`) 的存取權。如需詳細資訊，請參閱[日誌交付許可](#grant-log-delivery-permissions-general)。

**Example — 對跨兩個區域的五個儲存貯體啟用存取日誌**  
在此範例中，您擁有下列五個儲存貯體：  
+ `amzn-s3-demo-source-bucket-us-east-1`
+ `amzn-s3-demo-source-bucket1-us-east-1`
+ `amzn-s3-demo-source-bucket2-us-east-1`
+ `amzn-s3-demo-bucket1-us-west-2`
+ `amzn-s3-demo-bucket2-us-west-2`
**注意**  
下列程序的最後一個步驟提供範例 bash 指令碼，您可以使用這些指令碼建立記錄儲存貯體，並在這些儲存貯體上啟用伺服器存取記錄。若要使用這些指令碼，您必須建立 `policy.json` 和 `logging.json` 檔案，如下列程序所述。

1. 在美國西部 (奧勒岡) 和美國東部 (維吉尼亞北部) 區域建立兩個記錄目的地儲存貯體，並為其命名如下：
   + `amzn-s3-demo-destination-bucket-logs-us-east-1`
   + `amzn-s3-demo-destination-bucket1-logs-us-west-2`

1. 稍後在這些步驟中，您將啟用伺服器存取記錄，如下所示：
   + `amzn-s3-demo-source-bucket-us-east-1` 記錄到 S3 儲存貯體 `amzn-s3-demo-destination-bucket-logs-us-east-1`，帶有字首 `amzn-s3-demo-source-bucket-us-east-1`
   + `amzn-s3-demo-source-bucket1-us-east-1` 記錄到 S3 儲存貯體 `amzn-s3-demo-destination-bucket-logs-us-east-1`，帶有字首 `amzn-s3-demo-source-bucket1-us-east-1`
   + `amzn-s3-demo-source-bucket2-us-east-1` 記錄到 S3 儲存貯體 `amzn-s3-demo-destination-bucket-logs-us-east-1`，帶有字首 `amzn-s3-demo-source-bucket2-us-east-1`
   + `amzn-s3-demo-bucket1-us-west-2` 記錄到 S3 儲存貯體 `amzn-s3-demo-destination-bucket1-logs-us-west-2`，帶有字首 `amzn-s3-demo-bucket1-us-west-2`
   + `amzn-s3-demo-bucket2-us-west-2` 記錄到 S3 儲存貯體 `amzn-s3-demo-destination-bucket1-logs-us-west-2`，帶有字首 `amzn-s3-demo-bucket2-us-west-2`

1. 針對每個目的地記錄儲存貯體，使用儲存貯體 ACL *或*儲存貯體政策，授予伺服器存取日誌交付的許可：
   + **更新儲存貯體政策** (建議) - 若要將許可授予記錄服務主體，請使用下列 `put-bucket-policy` 命令：用您的目的地儲存貯體名稱取代 `amzn-s3-demo-destination-bucket-logs`。

     ```
     1. aws s3api put-bucket-policy --bucket amzn-s3-demo-destination-bucket-logs --policy file://policy.json
     ```

     `Policy.json` 為 JSON 文件，其位於包含下列儲存貯體政策的目前資料夾中。若要使用此儲存貯體政策，請以您自己的資訊取代 `user input placeholders`。在下列政策中，*`amzn-s3-demo-destination-bucket-logs`* 是將交付伺服器存取日誌的目的地儲存貯體，而 `amzn-s3-demo-source-bucket` 是來源儲存貯體。`SOURCE-ACCOUNT-ID` 是擁有來源儲存貯體的 AWS 帳戶 。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Sid": "S3ServerAccessLogsPolicy",
                 "Effect": "Allow",
                 "Principal": {
                     "Service": "logging.s3.amazonaws.com"
                 },
                 "Action": [
                     "s3:PutObject"
                 ],
                 "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket-logs/*",
                 "Condition": {
                     "ArnLike": {
                         "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-source-bucket"
                     },
                     "StringEquals": {
                         "aws:SourceAccount": "SOURCE-ACCOUNT-ID"
                     }
                 }
             }
         ]
     }
     ```

------
   + **更新儲存貯體 ACL** - 若要將許可授予 S3 日誌交付群組，請使用下列 `put-bucket-acl` 命令。將 *`amzn-s3-demo-destination-bucket-logs`* 取代為您的目的地 (目標) 儲存貯體名稱。

     ```
     1. aws s3api put-bucket-acl --bucket amzn-s3-demo-destination-bucket-logs  --grant-write URI=http://acs.amazonaws.com/groups/s3/LogDelivery --grant-read-acp URI=http://acs.amazonaws.com/groups/s3/LogDelivery 
     ```

1. 然後建立包含記錄組態的 `logging.json` 檔案 (根據以下三個範例之一)。建立 `logging.json` 檔案之後，您可以使用下列 `put-bucket-logging` 命令套用記錄組態。將 *`amzn-s3-demo-destination-bucket-logs`* 取代為您的目的地 (目標) 儲存貯體名稱。

   ```
   1. aws s3api put-bucket-logging --bucket amzn-s3-demo-destination-bucket-logs --bucket-logging-status file://logging.json 
   ```
**注意**  
您可以使用下一個步驟中提供的其中一個 bash 指令碼，在每一個目的地儲存貯體上套用記錄組態，而不要使用此 `put-bucket-logging` 命令。若要使用這些指令碼，您必須建立 `policy.json` 和 `logging.json` 檔案，如此程序中所述。

   `logging.json` 檔案為 JSON 文件，其位於包含記錄組態的目前資料夾中。如果目的地儲存貯體使用「物件擁有權」的儲存貯體擁有者強制執行設定，則您的記錄組態無法包含目的地 (目標) 授權。如需詳細資訊，請參閱[日誌交付許可](#grant-log-delivery-permissions-general)。  
**Example - `logging.json`，沒有目的地 (目標) 授權**  

   以下範例 `logging.json` 檔案不包含目的地 (目標) 授權。因此，您可以將此組態套用至使用「物件擁有權」的儲存貯體擁有者強制執行設定的目的地 (目標) 儲存貯體。

   ```
     {
         "LoggingEnabled": {
             "TargetBucket": "amzn-s3-demo-destination-bucket-logs",
             "TargetPrefix": "amzn-s3-demo-destination-bucket/"
          }
      }
   ```  
**Example - `logging.json`，有目的地 (目標) 授權**  

   以下範例 `logging.json` 檔案包含目的地 (目標) 授權。

   如果目的地儲存貯體使用「物件擁有權」的儲存貯體擁有者強制執行設定，則無法將目的地 (目標) 授權納入您的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html) 組態中。如需詳細資訊，請參閱[日誌交付許可](#grant-log-delivery-permissions-general)。

   ```
     {
         "LoggingEnabled": {
             "TargetBucket": "amzn-s3-demo-destination-bucket-logs",
             "TargetPrefix": "amzn-s3-demo-destination-bucket/",
             "TargetGrants": [
                  {
                     "Grantee": {
                         "Type": "CanonicalUser",
                         "ID": "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be"
                      },
                     "Permission": "FULL_CONTROL"
                  }
              ]
          }
      }
   ```

**承授者值**  
您可以透過下列方式指定您要為其指派存取權的人員 (承授者) (使用請求元素)：
   + 依人員 ID：

     ```
     {
       "Grantee": {
         "Type": "CanonicalUser",
         "ID": "ID"
       }
     }
     ```
   + 依 URI：

     ```
     {
       "Grantee": {
         "Type": "Group",
         "URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"
       }
     }
     ```  
**Example - `logging.json`，其日誌物件索引鍵格式設定為 S3 事件時間**  

   下列 `logging.json` 檔案會將日誌物件索引鍵格式變更為 S3 事件時間。如需設定日誌物件索引鍵格式的詳細資訊，請參閱 [如何啟用日誌交付？](ServerLogs.md#server-access-logging-overview)。

   ```
     { 
       "LoggingEnabled": {
           "TargetBucket": "amzn-s3-demo-destination-bucket-logs",
           "TargetPrefix": "amzn-s3-demo-destination-bucket/",
           "TargetObjectKeyFormat": { 
               "PartitionedPrefix": { 
                   "PartitionDateSource": "EventTime" 
               }
            }
       }
   }
   ```

1. 使用下列其中一個 bash 指令碼，在您的帳戶中為所有儲存貯體新增存取記錄。將 *`amzn-s3-demo-destination-bucket-logs`* 取代為目的地 (目標) 儲存貯體的名稱，並將 `us-west-2` 取代為您的儲存貯體所在區域的名稱。
**注意**  
只在您的所有儲存貯體都位在相同區域時，此指令碼才能運作。若您的儲存貯體位於多個區域，您必須調整指令碼。  
**Example – 授予儲存貯體的存取權，並為您的帳戶中的儲存貯體新增日誌記錄**  

   ```
     loggingBucket='amzn-s3-demo-destination-bucket-logs'
     region='us-west-2'
     
     
     # Create the logging bucket.
     aws s3 mb s3://$loggingBucket --region $region
     
     aws s3api put-bucket-policy --bucket $loggingBucket --policy file://policy.json
     
     # List the buckets in this account.
     buckets="$(aws s3 ls | awk '{print $3}')"
     
     # Put a bucket logging configuration on each bucket.
     for bucket in $buckets
         do 
           # This if statement excludes the logging bucket.
           if [ "$bucket" == "$loggingBucket" ] ; then
               continue;
           fi
           printf '{
             "LoggingEnabled": {
               "TargetBucket": "%s",
               "TargetPrefix": "%s/"
           }
         }' "$loggingBucket" "$bucket"  > logging.json
         aws s3api put-bucket-logging --bucket $bucket --bucket-logging-status file://logging.json
         echo "$bucket done"
     done
     
     rm logging.json
     
     echo "Complete"
   ```  
**Example – 授予儲存貯體 ACL 的存取權，並為您的帳戶中的儲存貯體新增日誌記錄**  

   ```
     loggingBucket='amzn-s3-demo-destination-bucket-logs'
     region='us-west-2'
     
     
     # Create the logging bucket.
     aws s3 mb s3://$loggingBucket --region $region
     
     aws s3api put-bucket-acl --bucket $loggingBucket --grant-write URI=http://acs.amazonaws.com/groups/s3/LogDelivery --grant-read-acp URI=http://acs.amazonaws.com/groups/s3/LogDelivery
     
     # List the buckets in this account.
     buckets="$(aws s3 ls | awk '{print $3}')"
     
     # Put a bucket logging configuration on each bucket.
     for bucket in $buckets
         do 
           # This if statement excludes the logging bucket.
           if [ "$bucket" == "$loggingBucket" ] ; then
               continue;
           fi
           printf '{
             "LoggingEnabled": {
               "TargetBucket": "%s",
               "TargetPrefix": "%s/"
           }
         }' "$loggingBucket" "$bucket"  > logging.json
         aws s3api put-bucket-logging --bucket $bucket --bucket-logging-status file://logging.json
         echo "$bucket done"
     done
     
     rm logging.json
     
     echo "Complete"
   ```

## 驗證您的伺服器存取日誌設定
<a name="verify-access-logs"></a>

啟用伺服器存取記錄之後，請完成以下步驟：
+ 存取目的地儲存貯體，並驗證是否正在交付日誌檔。設定存取日誌之後，Amazon S3 會立即開始擷取請求並加以記錄。不過，可能需要幾小時才能將日誌傳送至目的地儲存貯體。如需詳細資訊，請參閱[儲存貯體記錄狀態變更會在一段時間後生效](ServerLogs.md#BucketLoggingStatusChanges)及[伺服器日誌交付最佳作法](ServerLogs.md#LogDeliveryBestEffort)。

  您也可以自動驗證日誌交付，方法為使用 Amazon S3 請求指標，並為這些指標設定 Amazon CloudWatch 警示。如需詳細資訊，請參閱[使用 Amazon CloudWatch 監控指標](cloudwatch-monitoring.md)。
+ 驗證您是否能夠開啟和讀取日誌檔的內容。

如需伺服器存取記錄疑難排解資訊，請參閱 [針對伺服器存取記錄進行疑難排解](troubleshooting-server-access-logging.md)。

# Amazon S3 伺服器存取日誌格式
<a name="LogFormat"></a>

伺服器存取記錄，針對向 Amazon S3 儲存貯體提出的請求，提供詳細的記錄。您可以將伺服器存取日誌用於下列目的：
+ 執行安全與存取稽核
+ 了解您的客戶群
+ 了解您的 Amazon S3 計費

本節說明 Amazon S3 伺服器存取日誌檔案的格式和其他詳細資訊。

伺服器存取記錄檔，是由一連串換行分隔日誌記錄所組成。每筆日誌記錄都代表一項要求，且由多個空格分隔欄位所組成。

以下為五筆日誌記錄所組成的日誌範例。

**注意**  
任何欄位都可以設成 `-`，指出資料為未知或不可用，或欄位不適用於此要求。

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 3E57427F3EXAMPLE REST.GET.VERSIONING - "GET /amzn-s3-demo-bucket1?versioning HTTP/1.1" 200 - 113 - 7 - "-" "S3Console/0.4" - s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234= SigV4 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader amzn-s3-demo-bucket1.s3.us-west-1.amazonaws.com TLSV1.2 arn:aws:s3:us-west-1:123456789012:accesspoint/example-AP Yes us-east-1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 891CE47D2EXAMPLE REST.GET.LOGGING_STATUS - "GET /amzn-s3-demo-bucket1?logging HTTP/1.1" 200 - 242 - 11 - "-" "S3Console/0.4" - 9vKBE6vMhrNiWHZmb2L0mXOcqPGzQOI5XLnCtZNPxev+Hf+7tpT6sxDwDty4LHBUOZJG96N1234= SigV4 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader amzn-s3-demo-bucket1.s3.us-west-1.amazonaws.com TLSV1.2 - - us-east-1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be A1206F460EXAMPLE REST.GET.BUCKETPOLICY - "GET /amzn-s3-demo-bucket1?policy HTTP/1.1" 404 NoSuchBucketPolicy 297 - 38 - "-" "S3Console/0.4" - BNaBsXZQQDbssi6xMBdBU2sLt+Yf5kZDmeBUP35sFoKa3sLLeMC78iwEIWxs99CRUrbS4n11234= SigV4 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader amzn-s3-demo-bucket1.s3.us-west-1.amazonaws.com TLSV1.2 - Yes us-east-1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket1 [06/Feb/2019:00:01:00 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 7B4A0FABBEXAMPLE REST.GET.VERSIONING - "GET /amzn-s3-demo-bucket1?versioning HTTP/1.1" 200 - 113 - 33 - "-" "S3Console/0.4" - Ke1bUcazaN1jWuUlPJaxF64cQVpUEhoZKEG/hmy/gijN/I1DeWqDfFvnpybfEseEME/u7ME1234= SigV4 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader amzn-s3-demo-bucket1.s3.us-west-1.amazonaws.com TLSV1.2 - - us-east-1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket1 [06/Feb/2019:00:01:57 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be DD6CC733AEXAMPLE REST.PUT.OBJECT s3-dg.pdf "PUT /amzn-s3-demo-bucket1/s3-dg.pdf HTTP/1.1" 200 - - 4406583 41754 28 "-" "S3Console/0.4" - 10S62Zv81kBW7BB6SX4XJ48o6kpcl6LPwEoizZQQxJd5qDSCTLX0TgS37kYUBKQW3+bPdrg1234= SigV4 ECDHE-RSA-AES128-SHA AuthHeader amzn-s3-demo-bucket1.s3.us-west-1.amazonaws.com TLSV1.2 - Yes us-east-1
```

以下是**運算檢查總和**操作的範例日誌記錄：

```
7cd47ef2be amzn-s3-demo-bucket [06/Feb/2019:00:00:38 +0000] - 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be e5042925-b524-4b3b-a869-f3881e78ff3a S3.COMPUTE.OBJECT.CHECKSUM example-object - - - - 1048576 - - - - - bPf7qjG4XwYdPgDQTl72GW/uotRhdPz2UryEyAFLDSRmKrakUkJCYLtAw6fdANcrsUYc1M/kIulXM1u5vZQT5g== - - - - - - - -
```

**Topics**
+ [

## 日誌記錄欄位
](#log-record-fields)
+ [

## 複製操作的其他記錄
](#AdditionalLoggingforCopyOperations)
+ [

## 客戶存取日誌資訊
](#LogFormatCustom)
+ [

## 可擴展伺服器存取日誌格式的程式設計考量
](#LogFormatExtensible)

## 日誌記錄欄位
<a name="log-record-fields"></a>

下列清單說明日誌記錄欄位。

**儲存貯體擁有者**  
來源儲存貯體擁有者的正式使用者 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/accounts/latest/reference/manage-acct-identifiers.html#FindCanonicalId)。  
**範例項目**  

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
```

**儲存貯體**  
要求處理對象的儲存貯體名稱。如果系統收到格式錯誤的要求且無法判斷儲存貯體，則儲存貯體要求就不會出現在任何伺服器存取記錄中。  
**範例項目**  

```
amzn-s3-demo-bucket1
```

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

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

**遠端 IP**  
申請者清楚的 IP 位址。中間代理伺服器與防火牆可能會模糊提出請求之電腦的實際 IP 位址。  
**範例項目**  

```
192.0.2.3
```

**要求者**  
要求者的正式使用者 ID，或未經驗證要求者的 `-`。如果申請者是 IAM 使用者，此欄位會傳回申請者的 IAM 使用者名稱，以及 AWS 帳戶 IAM 使用者所屬的 。此識別符與用於存取控制目的的識別符相同。  
**範例項目**  

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
```
如果請求者使用擔任的角色，此欄位會傳回擔任的 IAM 角色。  
**範例項目**  

```
arn:aws:sts::123456789012:assumed-role/roleName/test-role
```

**要求 ID**  
是由 Amazon S3 產生的字串，是可唯一識別每項請求。對於**運算檢查總和**任務請求，**請求 ID** 欄位會顯示相關聯的任務 ID。如需詳細資訊，請參閱[運算檢查總和](batch-ops-compute-checksums.md)。  
**範例項目**  

```
3E57427F33A59F07
```

**操作**  
這裡列出的操作會宣告為 [S3 生命週期與記錄](lifecycle-and-other-bucket-config.md#lifecycle-general-considerations-logging) 的 `SOAP.operation`、`REST.HTTP_method.resource_type`、`WEBSITE.HTTP_method.resource_type` 或 `BATCH.DELETE.OBJECT` 或 `S3.action.resource_type`。對於 [https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-compute-checksums.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-compute-checksums.html) 任務請求，操作會列為 `S3.COMPUTE.OBJECT.CHECKSUM`。  
**範例項目**  

```
REST.PUT.OBJECT
S3.COMPUTE.OBJECT.CHECKSUM
```

**金錀**  
請求的索引鍵 (物件名稱) 部分。  
**範例項目**  

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

**Request-URI**  
HTTP 請求訊息的 `Request-URI` 部分。此欄位可能包含來自使用者輸入的未逸出引號。  
**項目範例**  

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

**HTTP 狀態**  
回應的數字 HTTP 狀態碼。  
**範例項目**  

```
200
```

**錯誤代碼**  
Amazon S3 [錯誤回應](https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html)；如未發生任何錯誤，則為 `-`。  
**範例項目**  

```
NoSuchBucket
```

**已傳送的位元組**  
已傳送的回應位元組數目 (排除 HTTP 通訊協定額外負荷) 或 `-` (若為零)。  
**範例項目**  

```
2662992
```

**物件大小**  
所提及之物件的總大小。  
**範例項目**  

```
3462992
```

**總時間**  
從伺服器角度計算的請求所經過的毫秒數。此值是從收到您要求的時間開始，計算到回應傳送出最後一組位元組的時間。由於網路延遲，從用戶端角度進行的測量可能較長。  
**範例項目**  

```
70
```

**周轉時間**  
Amazon S3 處理您請求所花費的毫秒數。此值是從收到您要求的最後位元組的時間開始，計算到回應傳送出第一組位元組的時間。  
**範例項目**  

```
10
```

**Referer**  
HTTP `Referer` 標頭的值，如果存在的話。提出要求時，HTTP 使用者代理程式 (例如：瀏覽器) 一般會將此標頭設為連結或嵌入頁面的 URL。此欄位可能包含來自使用者輸入的未逸出引號。  
**範例項目**  

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

**User-Agent**  
HTTP `User-Agent` 標頭的值。此欄位可能包含來自使用者輸入的未逸出引號。  
**範例項目**  

```
"curl/7.15.1"
```

**版本 Id**  
請求的版本 ID，或 `-` （如果操作未採用 `versionId` 參數）。  
**範例項目**  

```
3HL4kqtJvjVBH40Nrjfkd
```

**主機 Id**  
`x-amz-id-2` 或 Amazon S3 延伸請求 ID。  
**範例項目**  

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

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

```
SigV2
```

**密碼套件**  
針對 HTTPS 請求或 HTTP 的 `-` 交涉的 Transport Layer Security (TLS) 密文。  
**範例項目**  

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

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

```
AuthHeader
```

**主機標頭**  
用來連線到 Amazon S3 的端點。  
**範例項目**  

```
s3.us-west-2.amazonaws.com
```
某些早期區域支援舊版端點。您可能會在伺服器存取日誌或 AWS CloudTrail 日誌中看到這些端點。如需詳細資訊，請參閱[舊版端點](VirtualHosting.md#s3-legacy-endpoints)。如需 Amazon S3 區域和端點的完整清單，請參閱《Amazon Web Services 一般參考》**中的 [Amazon S3 端點和配額](https://docs.aws.amazon.com/general/latest/gr/s3.html)。

**TLS 版本控制**  
用戶端交涉的 Transport Layer Security (TLS) 版本。值為下列其中一個：`TLSv1.1`、`TLSv1.2`、`TLSv1.3` 或 `-` (如果未使用 TLS)。  
**範例項目**  

```
TLSv1.2
```

**存取點 ARN**  
請求存取點的 Amazon Resource Name (ARN)。如果存取點 ARN 格式錯誤或未使用，該欄位將包含 `-`。如需存取點的詳細資訊，請參閱 [將 Amazon S3 Access Points 用於一般用途儲存貯體](using-access-points.md)。如需 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
```

**aclRequired**  
字串，指出請求是否需要存取控制清單 (ACL) 進行授權。如果請求需要 ACL 進行授權，則字串為 `Yes`。如果不需要 ACL，則字串為 `-`。如需 ACL 的詳細資訊，請參閱「[存取控制清單 (ACL) 概觀](acl-overview.md)」。如需使用 `aclRequired` 欄位停用 ACL 的詳細資訊，請參閱 [控制物件的擁有權並停用儲存貯體的 ACL](about-object-ownership.md)。  
**範例項目**  

```
Yes
```

**來源區域**  
發出請求 AWS 的區域。當無法判斷原始伺服器區域`-`時 （例如 PrivateLink 連線、Direct Connect 連線、使用您自己的 IP 地址 (BYOIP) 或非AWS IP 地址），或者當日誌是由根據客戶設定政策或動作觸發的操作產生時，例如生命週期和檢查總和。  
**範例項目**  

```
us-east-1
```

## 複製操作的其他記錄
<a name="AdditionalLoggingforCopyOperations"></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/accounts/latest/reference/manage-acct-identifiers.html#FindCanonicalId)。  
**範例項目**  

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
```

**儲存貯體**  
存放所複製物件的儲存貯體名稱。  
**範例項目**  

```
amzn-s3-demo-bucket1
```

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

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

**遠端 IP**  
申請者清楚的 IP 位址。中間代理伺服器與防火牆可能會模糊提出請求之電腦的實際 IP 位址。  
**範例項目**  

```
192.0.2.3
```

**要求者**  
要求者的正式使用者 ID，或未經驗證要求者的 `-`。如果申請者是 IAM 使用者，此欄位會傳回申請者的 IAM 使用者名稱，以及 AWS 帳戶根使用者 IAM 使用者所屬的 。此識別符與用於存取控制目的的識別符相同。  
**範例項目**  

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
```
如果請求者使用擔任的角色，此欄位會傳回擔任的 IAM 角色。  
**範例項目**  

```
arn:aws:sts::123456789012:assumed-role/roleName/test-role
```

**要求 ID**  
是由 Amazon S3 產生的字串，是可唯一識別每項請求。對於**運算檢查總和**任務請求，**請求 ID** 欄位會顯示相關聯的任務 ID。如需詳細資訊，請參閱[運算檢查總和](batch-ops-compute-checksums.md)。  
**範例項目**  

```
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
```

**Request-URI**  
HTTP 請求訊息的 `Request-URI` 部分。此欄位可能包含來自使用者輸入的未逸出引號。  
**範例項目**  

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

**HTTP 狀態**  
複製操作之 `GET` 部分的數字 HTTP 狀態碼。  
**範例項目**  

```
200
```

**錯誤代碼**  
複製操作之 `GET` 部分的 Amazon S3 [錯誤回應](https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html)；如未發生任何錯誤，則為 `-`。  
**範例項目**  

```
NoSuchBucket
```

**已傳送的位元組**  
已傳送的回應位元組數目 (排除 HTTP 通訊協定額外負荷) 或 `-` (若為零)。  
**範例項目**  

```
2662992
```

**物件大小**  
所提及之物件的總大小。  
**範例項目**  

```
3462992
```

**總時間**  
從伺服器角度計算的請求所經過的毫秒數。此值是從收到您要求的時間開始，計算到回應傳送出最後一組位元組的時間。由於網路延遲，從用戶端角度進行的測量可能較長。  
**範例項目**  

```
70
```

**周轉時間**  
Amazon S3 處理您請求所花費的毫秒數。此值是從收到您要求的最後位元組的時間開始，計算到回應傳送出第一組位元組的時間。  
**範例項目**  

```
10
```

**Referer**  
HTTP `Referer` 標頭的值，如果存在的話。提出要求時，HTTP 使用者代理程式 (例如：瀏覽器) 一般會將此標頭設為連結或嵌入頁面的 URL。此欄位可能包含來自使用者輸入的未逸出引號。  
**範例項目**  

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

**User-Agent**  
HTTP `User-Agent` 標頭的值。此欄位可能包含來自使用者輸入的未逸出引號。  
**範例項目**  

```
"curl/7.15.1"
```

**版本 Id**  
要複製之物件的版本 ID，或 `-` (如果 `x-amz-copy-source` 標頭並未將 `versionId` 參數指定為複製來源的一部分)。  
**項目範例**  

```
3HL4kqtJvjVBH40Nrjfkd
```

**主機 Id**  
`x-amz-id-2` 或 Amazon S3 延伸請求 ID。  
**範例項目**  

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

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

```
SigV4
```

**密碼套件**  
針對 HTTPS 請求或 HTTP 的 `-` 交涉的 Transport Layer Security (TLS) 密文。  
**範例項目**  

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

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

```
AuthHeader
```

**主機標頭**  
用來連線到 Amazon S3 的端點。  
**範例項目**  

```
s3.us-west-2.amazonaws.com
```
某些早期區域支援舊版端點。您可能會在伺服器存取日誌或 AWS CloudTrail 日誌中看到這些端點。如需詳細資訊，請參閱[舊版端點](VirtualHosting.md#s3-legacy-endpoints)。如需 Amazon S3 區域和端點的完整清單，請參閱《Amazon Web Services 一般參考》**中的 [Amazon S3 端點和配額](https://docs.aws.amazon.com/general/latest/gr/s3.html)。

**TLS 版本控制**  
用戶端交涉的 Transport Layer Security (TLS) 版本。值為下列其中一個：`TLSv1.1`、`TLSv1.2`、`TLSv1.3` 或 `-` (如果未使用 TLS)。  
**範例項目**  

```
TLSv1.2
```

**存取點 ARN**  
請求存取點的 Amazon Resource Name (ARN)。如果存取點 ARN 格式錯誤或未使用，該欄位將包含 `-`。如需存取點的詳細資訊，請參閱 [將 Amazon S3 Access Points 用於一般用途儲存貯體](using-access-points.md)。如需 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
```

**aclRequired**  
字串，指出請求是否需要存取控制清單 (ACL) 進行授權。如果請求需要 ACL 進行授權，則字串為 `Yes`。如果不需要 ACL，則字串為 `-`。如需 ACL 的詳細資訊，請參閱「[存取控制清單 (ACL) 概觀](acl-overview.md)」。如需使用 `aclRequired` 欄位停用 ACL 的詳細資訊，請參閱 [控制物件的擁有權並停用儲存貯體的 ACL](about-object-ownership.md)。  
**範例項目**  

```
Yes
```

**來源區域**  
發出請求 AWS 的區域。當無法判斷原始伺服器區域`-`時 （例如 PrivateLink 連線、Direct Connect 連線、使用您自己的 IP 地址 (BYOIP) 或非AWS IP 地址），或者當日誌是由根據客戶設定政策或動作觸發的操作產生時，例如生命週期和檢查總和。  
**範例項目**  

```
us-east-1
```

## 客戶存取日誌資訊
<a name="LogFormatCustom"></a>

您可以包含要存放在請求存取日誌記錄中的自訂資訊。若要執行這項操作，請將自訂的查詢字串參數新增至請求的 URL。Amazon S3 忽略開頭為 `x-` 的查詢字串參數，但會將這些參數包含在請求的存取日誌日誌中，當成日誌記錄 `Request-URI` 欄位的一部分。

例如，`GET` 請求的 `"s3.amazonaws.com/amzn-s3-demo-bucket1/photos/2019/08/puppy.jpg?x-user=johndoe"` 運作方式與 `"s3.amazonaws.com/amzn-s3-demo-bucket1/photos/2019/08/puppy.jpg"` 請求相同，不同之處在於該 `"x-user=johndoe"` 字串包含在關聯日誌記錄的 `Request-URI` 欄位中。此功能僅有 REST 介面提供。

## 可擴展伺服器存取日誌格式的程式設計考量
<a name="LogFormatExtensible"></a>

有時候，我們可能要在每行結尾新增欄位，擴展存取日誌記錄的格式。因此，確定任何解析伺服器存取日誌的程式碼，可以處理其可能不理解的結尾欄位。

# 刪除 Amazon S3 日誌檔案
<a name="deleting-log-files-lifecycle"></a>

啟用了伺服器存取日誌記錄的 Amazon S3 儲存貯體，可以隨時累積許多伺服器日誌物件。建立這些存取日誌後經過一段特定的時間，您的應用程式可能會需要這些日誌，但在此期間結束後，可能希望刪除它們。您可以使用 Amazon S3 生命週期組態設定規則，讓 Amazon S3 自動將這些物件在期限到期時，將其排入刪除佇列。

您可以使用共用字首，為 S3 儲存貯體中的物件子集定義生命週期組態。若已在伺服器存取日誌組態中指定了字首，您可以設定生命週期組態規則，利用刪除含有該字首的日誌物件。

例如，假設日誌物件的字首為 `logs/`。在指定的期間之後，您可以設定生命週期組態規則，刪除儲存貯體中字首為 `logs/` 的所有物件。

如需生命週期組態的詳細資訊，請參閱「[管理物件的生命週期](object-lifecycle-mgmt.md)」。

如需伺服器存取記錄的一般資訊，請參閱 [使用伺服器存取記錄記錄要求](ServerLogs.md)。

# 使用 Amazon S3 伺服器存取日誌來識別請求
<a name="using-s3-access-logs-to-identify-requests"></a>

您可以使用 Amazon S3 伺服器存取日誌來識別 Amazon S3 請求。

**注意**  
若要識別 Amazon S3 請求，建議您使用 AWS CloudTrail 資料事件，而不是 Amazon S3 伺服器存取日誌。CloudTrail 資料事件更容易設定且包含更多資訊。如需詳細資訊，請參閱[使用 CloudTrail 來識別 Amazon S3 請求](cloudtrail-request-identification.md)。
根據您取得的存取請求數量多寡而定，分析日誌需要的資源或時間可能比使用 CloudTrail 資料事件更多。

**Topics**
+ [

## 使用 Amazon Athena 查詢請求的存取日誌
](#querying-s3-access-logs-for-requests)
+ [

## 使用 Amazon S3 存取日誌來識別簽章第 2 版請求
](#using-s3-access-logs-to-identify-sigv2-requests)
+ [

## 使用 Amazon S3 存取日誌來識別物件存取請求
](#using-s3-access-logs-to-identify-objects-access)

## 使用 Amazon Athena 查詢請求的存取日誌
<a name="querying-s3-access-logs-for-requests"></a>

您可以使用 Amazon Athena 搭配 Amazon S3 存取日誌來識別 Amazon S3 請求。

Amazon S3 會將伺服器存取日誌當作物件存放於 S3 儲存貯體中。使用可以在 Amazon S3 中分析日誌的工具通常比較容易。Athena 支援分析 S3 物件，還可用來查詢 Amazon S3 存取日誌。

**Example**  
以下範例示範如何在 Amazon Athena 中查詢 Amazon S3 伺服器存取日誌。請將下列範例中使用的 `user input placeholders` 取代為您自己的資訊。  
若要在 Athena 查詢中指定 Amazon S3 位置，您必須提供交付日誌所在的儲存貯體的 S3 URI。此 URI 必須包含下列格式的儲存貯體名稱和字首：`s3://amzn-s3-demo-bucket1-logs/prefix/`

1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 開啟 Athena 主控台。

1. 在查詢編輯器中，執行類似如下的命令。將 `s3_access_logs_db` 取代為您要為資料庫指定的名稱。

   ```
   CREATE DATABASE s3_access_logs_db
   ```
**注意**  
最佳實務是在與 S3 儲存貯體 AWS 區域 相同的 中建立資料庫。

1. 在查詢編輯器中，執行類似如下的命令，在您於步驟 2 建立的資料庫中建立資料表結構描述。將 `s3_access_logs_db.mybucket_logs` 取代為您要為資料表指定的名稱。`STRING` 及 `BIGINT` 資料類型值為存取日誌屬性。您可以在 Athena 中查詢這些屬性。在 `LOCATION` 的部分，輸入稍早記下的 S3 儲存貯體和字首路徑。

------
#### [ Date-based partitioning ]

   ```
   CREATE EXTERNAL TABLE s3_access_logs_db.mybucket_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,
    `accesspointarn` STRING,
    `aclrequired` STRING,
    `sourceregion` STRING)
    PARTITIONED BY (
      `timestamp` 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://bucket-name/prefix-name/account-id/region/source-bucket-name/'
    TBLPROPERTIES (
     'projection.enabled'='true', 
     'projection.timestamp.format'='yyyy/MM/dd', 
     'projection.timestamp.interval'='1', 
     'projection.timestamp.interval.unit'='DAYS', 
     'projection.timestamp.range'='2024/01/01,NOW', 
     'projection.timestamp.type'='date', 
     'storage.location.template'='s3://bucket-name/prefix-name/account-id/region/source-bucket-name/${timestamp}')
   ```

------
#### [ Non-date-based partitioning ]

   ```
   CREATE EXTERNAL TABLE `s3_access_logs_db.mybucket_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,
     `accesspointarn` STRING,
     `aclrequired` STRING,
     `sourceregion` 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 資料表。您現在可以查詢 Amazon S3 伺服器存取日誌。

**Example — 顯示刪除物件的人與時間 (時間戳記、IP 位址和 IAM 使用者)**  

```
SELECT requestdatetime, remoteip, requester, key 
FROM s3_access_logs_db.mybucket_logs 
WHERE key = 'images/picture.jpg' AND operation like '%DELETE%';
```

**Example — 顯示 IAM 使用者執行的所有操作**  

```
SELECT * 
FROM s3_access_logs_db.mybucket_logs 
WHERE requester='arn:aws:iam::123456789123:user/user_name';
```

**Example — 顯示特定期間內針對某物件執行的所有操作**  

```
SELECT *
FROM s3_access_logs_db.mybucket_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');
```

**Example — 顯示特定時段有多少資料已傳輸至特定 IP 位址**  

```
SELECT coalesce(SUM(bytessent), 0) AS bytessenttotal
FROM s3_access_logs_db.mybucket_logs
WHERE remoteip='192.0.2.1'
AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z')
BETWEEN parse_datetime('2022-06-01','yyyy-MM-dd')
AND parse_datetime('2022-07-01','yyyy-MM-dd');
```

**Example - 尋找特定期間內 HTTP 5xx 錯誤的請求 ID**  

```
SELECT requestdatetime, key, httpstatus, errorcode, requestid, hostid 
FROM s3_access_logs_db.mybucket_logs
WHERE httpstatus like '5%' AND timestamp
BETWEEN '2024/01/29'
AND '2024/01/30'
```

**注意**  
若要減少您保留日誌的時間，您可針對伺服器存取日誌儲存貯體建立 S3 生命週期組態。建立生命週期組態規則，以定期移除日誌檔。這麼做可降低 Athena 分析每個查詢時的資料量。如需詳細資訊，請參閱[設定儲存貯體的 S3 生命週期組態](how-to-set-lifecycle-configuration-intro.md)。

## 使用 Amazon S3 存取日誌來識別簽章第 2 版請求
<a name="using-s3-access-logs-to-identify-sigv2-requests"></a>

Amazon S3 將停止支援簽章第 2 版 (已淘汰)。之後，Amazon S3 將不再接受使用簽章第 2 版的請求，所有請求都必須使用*簽章第 4 版*來簽署。您可以使用 Amazon S3 存取日誌來識別簽章第 2 版請求。

**注意**  
若要識別 Signature 第 2 版請求，我們建議您使用 AWS CloudTrail 資料事件，而不是 Amazon S3 伺服器存取日誌。CloudTrail 資料事件更容易設定，且包含的資訊比伺服器存取日誌更多。如需詳細資訊，請參閱[使用 CloudTrail 識別 Amazon S3 簽章第 2 版請求](cloudtrail-request-identification.md#cloudtrail-identification-sigv2-requests)。

**Example — 顯示傳送簽章第 2 版流量的所有請求者**  

```
SELECT requester, sigv, Count(sigv) as sigcount 
FROM s3_access_logs_db.mybucket_logs
GROUP BY requester, sigv;
```

## 使用 Amazon S3 存取日誌來識別物件存取請求
<a name="using-s3-access-logs-to-identify-objects-access"></a>

您可以在 Amazon S3 伺服器存取日誌上使用查詢，以識別 Amazon S3 物件存取請求，包括 `GET`、`PUT` 及 `DELETE` 等操作，並探索有關這些請求的詳細資訊。

以下 Amazon Athena 查詢範例示範如何從伺服器存取日誌取得 Amazon S3 的所有 `PUT` 物件請求。

**Example — 顯示在特定期間內傳送 `PUT` 物件請求的所有申請者。**  

```
SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime
FROM s3_access_logs_db.mybucket_logs
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` 物件請求。

**Example — 顯示在特定期間內傳送 `GET` 物件請求的所有申請者。**  

```
SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime
FROM s3_access_logs_db.mybucket_logs
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 儲存貯體的所有匿名請求。

**Example — 顯示在特定時段期間向儲存貯體提出請求的所有匿名申請者。**  

```
SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime
FROM s3_access_logs_db.mybucket_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')
```

下列 Amazon Athena 查詢示範如何識別對 S3 儲存貯體提出且需要存取控制清單 (ACL) 進行授權的所有請求。您可以使用此資訊，將這些 ACL 許可遷移至適當的儲存貯體政策，並停用 ACL。在建立了這些儲存貯體政策之後，您可以針對這些儲存貯體停用 ACL。如需停用 ACL 的詳細資訊，請參閱 [停用 ACL 的先決條件](object-ownership-migrating-acls-prerequisites.md)。

**Example — 識別需要 ACL 進行授權的所有請求**  

```
SELECT bucket_name, requester, key, operation, aclrequired, requestdatetime
FROM s3_access_logs_db.mybucket_logs
WHERE aclrequired = 'Yes' 
AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z')
BETWEEN parse_datetime('2022-05-10:00:00:00','yyyy-MM-dd:HH:mm:ss')
AND parse_datetime('2022-08-10:00:00:00','yyyy-MM-dd:HH:mm:ss')
```

**注意**  
您可以視需要修改日期範圍以符合您的需求。
對安全監控時而言，這些查詢範例也可能相當實用。您可以檢閱來自意外或未授權 IP 位址或申請者的 `PutObject` 或 `GetObject` 呼叫的結果，以及識別對您儲存貯體的任何匿名請求。
此查詢只會擷取啟用日誌之後的資訊。
如果您使用的是 AWS CloudTrail 日誌，請參閱 [使用 CloudTrail 來識別對 S3 物件的存取](cloudtrail-request-identification.md#cloudtrail-identification-object-access)。

# 針對伺服器存取記錄進行疑難排解
<a name="troubleshooting-server-access-logging"></a>

下列主題可以協助您針對使用 Amazon S3 設定記錄時可能遇到的問題進行疑難排解。

**Topics**
+ [

## 設定記錄時的常見錯誤訊息
](#common-errors)
+ [

## 針對交付失敗進行疑難排解
](#delivery-failures)

## 設定記錄時的常見錯誤訊息
<a name="common-errors"></a>

當您透過 AWS Command Line Interface (AWS CLI) 和 AWS SDKs 啟用記錄時，可能會出現下列常見錯誤訊息：

錯誤：不允許跨 S3 位置記錄

如果目的地儲存貯體 (也稱為*目標儲存貯體*) 與來源儲存貯體位於不同區域，則會發生不允許跨 S3 位置記錄錯誤。若要解決此錯誤，請確定設定為接收存取日誌的目的地儲存貯體與來源儲存貯體位於相同 AWS 區域 和 AWS 帳戶 。

錯誤：要記錄的儲存貯體與目標儲存貯體，兩者的擁有者必須相同

當您啟用伺服器存取記錄時，如果指定的目的地儲存貯體屬於不同的帳戶，就會發生此錯誤。若要解決此錯誤，請確定目的地儲存貯體與來源儲存貯體位於相同的 AWS 帳戶 中。

**注意**  
建議您選擇與來源儲存貯體不同的目的地儲存貯體。當來源儲存貯體與目的地儲存貯體相同時，會為寫入儲存貯體的日誌建立額外的日誌，這會增加您的儲存費用。這些關於日誌的額外日誌也可能使您難以找到您要尋找的特定日誌。如需更簡單的日誌管理，建議您將存取日誌儲存在不同的儲存貯體中。如需詳細資訊，請參閱[如何啟用日誌交付？](ServerLogs.md#server-access-logging-overview)。

錯誤：用於記錄的目標儲存貯體不存在

在設定組態之前，目的地儲存貯體必須存在。此錯誤表示目的地儲存貯體不存在或找不到。請確定儲存貯體名稱拼寫正確，然後再試一次。

錯誤：儲存貯體擁有者強制執行的儲存貯體不允許目標授予

此錯誤表示目的地儲存貯體針對「S3 物件擁有權」使用儲存貯體擁有權強制執行設定。儲存貯體擁有者強制執行設定不支援目的地 (目標) 授權。如需詳細資訊，請參閱[日誌交付許可](enable-server-access-logging.md#grant-log-delivery-permissions-general)。

## 針對交付失敗進行疑難排解
<a name="delivery-failures"></a>

若要避免伺服器存取記錄問題，請確定您遵循下列最佳實務：
+ **S3 日誌交付群組具有目的地儲存貯體的寫入存取權** - S3 日誌交付群組可將伺服器存取日誌交付到目的地儲存貯體。儲存貯體政策或儲存貯體存取控制清單 (ACL) 可以用來將寫入存取權授予目的地儲存貯體。不過，建議您使用儲存貯體政策，而不是 ACL。如需如何將寫入存取權授予目的地儲存貯體的詳細資訊，請參閱 [日誌交付許可](enable-server-access-logging.md#grant-log-delivery-permissions-general)。
**注意**  
如果目的地儲存貯體針對「物件擁有權」使用儲存貯體擁有權強制執行設定，請注意下列事項：  
ACL 已停用，不再影響許可。這表示您無法更新儲存貯體 ACL 以授予 S3 日誌交付群組的存取權。相反地，若要授予記錄服務主體的存取權，您必須更新目的地儲存貯體的儲存貯體政策。
您無法將目的地授權納入您的 `PutBucketLogging` 組態。
+ **目的地儲存貯體的儲存貯體政策允許存取日誌** - 檢查目的地儲存貯體的儲存貯體政策。搜尋儲存貯體政策找出包含 `"Effect": "Deny"` 的任何陳述式。然後，確認 `Deny` 陳述式並未阻止存取日誌寫入儲存貯體。
+ **目的地儲存貯體上未啟用 S3 物件鎖定** - 檢查目的地儲存貯體是否啟用了「物件鎖定」。「物件鎖定」會封鎖伺服器存取日誌交付。您必須選擇未啟用「物件鎖定」的目的地儲存貯體。
+ **如果目的地儲存貯體上已啟用預設加密，則會選取 Amazon S3 受管金鑰 (SSE-S3)** - 只在您使用伺服器端加密搭配 Amazon S3 受管金鑰 (SSE-S3) 時，才能在目的地儲存貯體上使用預設儲存貯體加密。伺服器存取記錄目的地儲存貯體不支援使用 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 的預設伺服器端加密。如需啟用預設加密的詳細資訊，請參閱 [設定預設加密](default-bucket-encryption.md)。
+ **目的地儲存貯體未啟用請求者付款** - 不支援使用「請求者付款」儲存貯體作為伺服器存取記錄的目的地儲存貯體。若要允許交付伺服器存取日誌，請停用目的地儲存貯體上的「請求者付款」選項。
+ **檢閱您的 AWS Organizations 服務控制政策 SCPs) 和資源控制政策 (RCPs)** – 當您使用 時 AWS Organizations，請檢查服務控制政策和資源控制政策，以確保允許 Amazon S3 存取。這些政策會指定受影響帳戶中主體和資源的許可數目上限。搜尋政策找出包含 `"Effect": "Deny"` 的任何陳述式，並確認 `Deny` 陳述式不會防止任何存取日誌寫入儲存貯體。如需詳細資訊，請參閱《AWS Organizations IAM 使用者指南》**中的[在 AWS Organizations中授權政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_authorization_policies.html)。
+ **預留一些時間讓最近記錄組態變更生效** - 第一次啟用伺服器存取記錄，或變更日誌的目的地儲存貯體，需要時間才能完全生效。所有請求可能需要一個小時以上的時間才能適當地記錄和交付。

  若要檢查日誌交付失敗，請在 Amazon CloudWatch 中啟用請求指標。如果日誌未在幾個小時內交付，請尋找 `4xxErrors` 指標，其可以指出日記交付失敗。如需啟用請求指標的詳細資訊，請參閱 [為儲存貯體中的所有物件建立 CloudWatch 指標組態](configure-request-metrics-bucket.md)。