

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

# 啟用 Classic Load Balancer 的存取日誌
<a name="enable-access-logs"></a>

若要啟用負載平衡器的日誌記錄，您必須指定 Amazon S3 儲存貯體的名稱，供負載平衡器存放日誌。您也必須連接儲存貯體政策到此儲存貯體，其授權 Elastic Load Balancing 寫入儲存貯體。

**Topics**
+ [步驟 1：建立 S3 儲存貯體](#create-s3-bucket)
+ [步驟 2：連接政策到您的 S3 儲存貯體](#attach-bucket-policy)
+ [步驟 3：設定存取日誌](#configure-access-logs)
+ [步驟 4：確認儲存貯體許可](#verify-access-logs)
+ [疑難排解](#enable-access-logs-troubleshooting)

## 步驟 1：建立 S3 儲存貯體
<a name="create-s3-bucket"></a>

當您啟用存取日誌時，您必須為存取日誌檔案指定 S3 儲存貯體。儲存貯體必須符合下列需求。

**要求**
+ 儲存貯體與負載平衡器必須位於相同的 Region (區域)。儲存貯體和負載平衡器可以由不同的帳戶擁有。
+ Amazon S3 受管金鑰 (SSE-S3) 是唯一支援的伺服器端加密選項。如需詳細資訊，請參閱 [Amazon S3 受管加密金鑰 (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)。

**使用 Amazon S3 主控台建立 S3 儲存貯體**

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇**建立儲存貯體**。

1. 在 **Create bucket (建立儲存貯體)** 頁面上，執行下列操作：

   1. 針對 **Bucket name (儲存貯體名稱)**，輸入儲存貯體的名稱。該名稱在 Amazon S3 中所有現有的儲存貯體名稱之間，不得重複。在某些區域，可能會對儲存貯體的名稱進行其他限制。如需詳細資訊，請參閱《*Amazon S3 使用者指南*》中的[儲存貯體配額、限制和限制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)。

   1. 針對 **AWS 區域**，選取您建立負載平衡器時所在的區域。

   1. 對於**預設加密**，選擇 **Amazon S3 受管金鑰 (SSE-S3)**。

   1. 選擇**建立儲存貯體**。

## 步驟 2：連接政策到您的 S3 儲存貯體
<a name="attach-bucket-policy"></a>

您的 S3 儲存貯體必須擁有儲存貯體政策，以授權 Elastic Load Balancing 將存取日誌寫入到儲存貯體。儲存貯體政策是以存取政策語言所編寫的 JSON 陳述式集合，可定義儲存貯體的存取許可。每個陳述式包含單一許可的相關資訊，且包含一系列的元素。

如果您目前使用的儲存貯體有已連接的政策，您可以將 Elastic Load Balancing 存取日誌的陳述式加入至政策中。若您這麼做，建議您評估所產生的一組許可，以確保它們適用於需要存取儲存貯體以取得存取日誌的使用者。

### 儲存貯體政策
<a name="bucket-policy-logdelivery"></a>

此政策會將許可授予日誌交付服務。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "logdelivery.elasticloadbalancing.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*"
    }
  ]
}
```

針對 `Resource`，使用範例政策中顯示的格式，輸入存取日誌位置的 ARN。一律在 S3 儲存貯體 ARN 的資源路徑中包含具有負載平衡器的帳戶 ID。這可確保只有來自指定帳戶的負載平衡器才能將存取日誌寫入 S3 儲存貯體。

您指定的 ARN 取決於您是否計劃在[步驟 3 ](#enable-access-logs)中啟用存取日誌時包含字首。

**字首為 的範例 S3 儲存貯體 ARN**  
S3 儲存貯體名稱為 amzn-s3-demo-logging-bucket，字首為 logging-prefix。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*
```

【AWS GovCloud (US)】 下列範例使用 的 ARN 語法 AWS GovCloud (US) Regions。

```
arn:aws-us-gov:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*
```

**沒有字首的範例 S3 儲存貯體 ARN**  
S3 儲存貯體名稱為 amzn-s3-demo-logging-bucket。S3 儲存貯體 ARN 中沒有字首部分。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*
```

【AWS GovCloud (US)】 下列範例使用 的 ARN 語法 AWS GovCloud (US) Regions。

```
arn:aws-us-gov:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*
```

### 舊版儲存貯體政策
<a name="legacy-bucket-policy"></a>

先前，對於 2022 年 8 月之前可用的區域，我們需要一個政策，將許可授予該區域特定的 Elastic Load Balancing 帳戶。仍然支援此舊版政策，但建議您將其取代為上述較新的政策。如果您偏好繼續使用此處未顯示的舊版儲存貯體政策，您可以這麼做。

以下是要在 中指定的 Elastic Load Balancing 帳戶的 IDs，以供參考`Principal`。請注意，不在此清單中的區域從未支援舊版儲存貯體政策。
+ 美國東部 (維吉尼亞北部) – 127311923021
+ 美國東部 (俄亥俄) – 033677994240
+ 美國西部 (加利佛尼亞北部) – 027434742980
+ 美國西部 (奧勒岡) – 797873946194
+ 非洲 (開普敦) – 098369216593
+ 亞太區域 (香港) – 754344448648
+ 亞太區域 (雅加達) – 589379963580
+ 亞太區域 (孟買) – 718504428378
+ 亞太區域 (大阪) – 383597477331
+ 亞太區域 (首爾) – 600734575887
+ 亞太區域 (新加坡) – 114774131450
+ 亞太區域 (雪梨) – 783225319266
+ 亞太區域 (東京) – 582318560864
+ 加拿大 (中部) – 985666609251
+ 歐洲 (法蘭克福) – 054676820928
+ 歐洲 (愛爾蘭) – 156460612806
+ 歐洲 (倫敦) – 652711504416
+ 歐洲 (米蘭) – 635631232127
+ 歐洲 (巴黎) – 009996457667
+ 歐洲 (斯德哥爾摩) – 897822967062
+ 中東 (巴林) – 076674570225
+ 南美洲 (聖保羅) – 507241528517
+ AWS GovCloud （美國東部） – 190560391635
+ AWS GovCloud （美國西部） – 048591011584

### 安全最佳實務
<a name="bucket-policy-security-best-practices"></a>

若要增強安全性，請使用精確的 S3 儲存貯ARNs。
+ 使用完整資源路徑，而不只是 S3 儲存貯體 ARN。
+ 包含 S3 儲存貯體 ARN 的帳戶 ID 部分。
+ 請勿在 S3 儲存貯體 ARN 的帳戶 ID 部分中使用萬用字元 (\$1)。

建立儲存貯體政策後，請使用 Amazon S3 介面，例如 Amazon S3 主控台或 AWS CLI 命令，將儲存貯體政策連接至 S3 儲存貯體。

**使用主控台將儲存貯體政策連接至儲存貯體**

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選取儲存貯體的名稱，開啟其詳細資訊頁面。

1. 選擇 **Permissions** (許可)，然後選擇 **Bucket policy** (儲存貯體政策)、**Edit** (編輯)。

1. 更新儲存貯體政策，授予所需許可。

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

**使用 將儲存貯體政策連接至 S3 儲存貯體 AWS CLI**  
使用 [put-bucket-policy](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-policy.html) 命令。在此範例中，儲存貯體政策已儲存至指定的 .json 檔案。

```
aws s3api put-bucket-policy \
    --bucket amzn-s3-demo-bucket \
    --policy file://access-log-policy.json
```

## 步驟 3：設定存取日誌
<a name="configure-access-logs"></a>

使用下列程序來設定存取日誌，以擷取請求資訊並將日誌檔案交付至 S3 儲存貯體。

**要求**  
儲存貯體必須符合[步驟 1](#create-s3-bucket) 中所述的要求，且您必須按照[步驟 2](#attach-bucket-policy) 所述連接儲存貯體政策。如果指定字首，則其不得包含字串 "AWSLogs"。

**使用主控台為您的負載平衡器設定存取日誌**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格的 **Load Balancing (負載平衡器)**，選擇 **Load Balancer (負載平衡器)**。

1. 選取您負載平衡器的名稱來開啟其詳細資訊頁面。

1. 在**屬性**索引標籤中，選擇**編輯**。

1. 在**編輯負載平衡器屬性**頁面的**監控**區段中，執行下列操作：

   1. 啟用**存取日誌**。

   1. 針對 **S3 URI**，請輸入日誌檔案的 S3 URI。指定的 URI 取決於您是否使用字首。
      + 帶有字首的 URI：`s3://amzn-s3-demo-logging-bucket/logging-prefix`
      + 不帶字首的 URI：`s3://amzn-s3-demo-logging-bucket`

   1. 將**日誌間隔**保留為 `60 minutes - default`。

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

**使用 設定負載平衡器的存取日誌 AWS CLI**  
首先，建立 .json 檔案，以讓 Elastic Load Balancing 每個 60 分鐘擷取和交付日誌檔到您為日誌建立的 S3 儲存貯體：

```
{ 
  "AccessLog": {
    "Enabled": true,
    "S3BucketName": "amzn-s3-demo-logging-bucket",
    "EmitInterval": 60,
    "S3BucketPrefix": "my-app"
  }
}
```

接著，請以 [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elb/modify-load-balancer-attributes.html) 命令指定 .json 檔案，如下所示：

```
aws elb modify-load-balancer-attributes --load-balancer-name my-loadbalancer --load-balancer-attributes file://my-json-file.json
```

以下是回應範例。

```
{
    "LoadBalancerAttributes": {
        "AccessLog": {
            "Enabled": true,
            "EmitInterval": 60,
            "S3BucketName": "amzn-s3-demo-logging-bucket",
            "S3BucketPrefix": "my-app"
        }
    },
    "LoadBalancerName": "my-loadbalancer"
}
```

**管理存取日誌的 S3 儲存貯體**  
在刪除您為存取日誌設定的儲存貯體之前，請務必停用存取日誌。否則，如果有新儲存貯體的名稱與您 AWS 帳戶 未擁有的 中建立的必要儲存貯體政策相同，Elastic Load Balancing 可以將負載平衡器的存取日誌寫入此新儲存貯體。

## 步驟 4：確認儲存貯體許可
<a name="verify-access-logs"></a>

為負載平衡器啟用存取日誌之後，Load Balancing 會驗證 S3 儲存貯體，並建立測試檔案，以確保儲存貯體政策指定所需的許可。您可以使用 S3 主控台來確認是否已建立測試檔案。測試檔案不是實際的存取日誌檔案；它不包含範例記錄。

**驗證 Elastic Load Balancing 已在 S3 儲存貯體中建立測試檔案**

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選取您為存取日誌指定的 S3 儲存貯體名稱。

1. 導覽到測試檔案，`ELBAccessLogTestFile`。位置取決於您是否使用字首。
   + 字首為 *amzn-s3-demo-loadbalancer-logs*/*logging-prefix*/AWSLogs/*123456789012*/ELBAccessLogTestFile 的位置
   + 沒有字首的位置：*amzn-s3-demo-loadbalancer-logs*/AWSLogs/*123456789012*/ELBAccessLogTestFile

## 疑難排解
<a name="enable-access-logs-troubleshooting"></a>

**對儲存貯體的存取遭拒：*儲存貯體名稱*。請檢查 S3bucket 許可**

如果您收到此錯誤，則以下是可能的原因：
+ 儲存貯體政策不會授權 Elastic Load Balancing 將存取日誌寫入儲存貯體。確認您正在使用適合該區域的正確儲存貯體政策。確認資源 ARN 使用您在啟用存取日誌時指定的相同儲存貯體名稱。如果啟用存取日誌時未指定字首，則請確認資源 ARN 不包含字首。
+ 儲存貯體使用不支援的伺服器端加密選項。儲存貯體必須使用 Amazon S3 受管金鑰 (SSE-S3)。