

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

# 啟用 Application Load Balancer 的運作狀態檢查日誌
<a name="enable-health-check-logging"></a>

當您啟用負載平衡器的運作狀態檢查日誌時，您必須指定負載平衡器將存放日誌的 S3 儲存貯體名稱。儲存貯體必須具有儲存貯體政策，能授予 Elastic Load Balancing 寫入儲存貯體的許可。

**Topics**
+ [步驟 1：建立 S3 儲存貯體](#health-check-log-create-bucket)
+ [步驟 2：連接政策到您的 S3 儲存貯體](#attach-bucket-policy-health-check)
+ [步驟 3：設定運作狀態檢查日誌](#enable-health-check-logs)
+ [步驟 4：確認儲存貯體許可](#verify-bucket-permissions-health-check)
+ [疑難排解](#bucket-permissions-troubleshooting-health-check)

## 步驟 1：建立 S3 儲存貯體
<a name="health-check-log-create-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-health-check"></a>

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

如果您使用的是已連接政策的現有儲存貯體，您可以將 Elastic Load Balancing 運作狀態檢查日誌的 陳述式新增至政策。如果您這樣做，我們建議您評估產生的一組許可，以確保它們適用於需要存取儲存貯體以進行運作狀態檢查日誌的使用者。

### 儲存貯體政策
<a name="bucket-policy-logdelivery-health-check"></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-logging.md#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 帳戶。仍然支援此舊版政策，但建議您將其取代為上述較新的政策。如果您偏好繼續使用此處未顯示的舊版政策，您可以這麼做。

 以下是舊版政策中要在 `Principal` 中指定的 Elastic Load Balancing 帳戶的 IDs，以供參考。請注意，不在此清單中的區域不支援舊版政策。
+ 美國東部 (維吉尼亞北部) – 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

### Outpost 區域
<a name="bucket-policy-outposts"></a>

以下政策會將許可授予指定的日誌交付服務。將此政策用於 Outpost 區域中的負載平衡器。

```
{
    "Effect": "Allow",
    "Principal": {
        "Service": "logdelivery.elb.amazonaws.com"
    },
    "Action": "s3:PutObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*"
    "Condition": {
        "StringEquals": {
            "s3:x-amz-acl": "bucket-owner-full-control"
        }
    }
}
```

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

您指定的 ARN 取決於您是否計劃在[步驟 3 ](enable-access-logging.md#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/*
```

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

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

### 安全最佳實務
<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 儲存貯體。

------
#### [ Console ]

**將儲存貯體政策連接至 S3 儲存貯體**

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

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

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

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

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

------
#### [ AWS CLI ]

**將儲存貯體政策連接至 S3 儲存貯體**  
使用 [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="enable-health-check-logs"></a>

使用下列程序來設定運作狀態檢查日誌，以擷取日誌檔案並將其交付至 S3 儲存貯體。

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

**管理運作狀態檢查日誌的 S3 儲存貯體**  
刪除您為運作狀態檢查日誌設定的儲存貯體之前，請務必停用運作狀態檢查日誌。否則，如果有具有相同名稱的新儲存貯體和所需的儲存貯體政策，但在非您擁有的 AWS 帳戶 中建立，Elastic Load Balancing 可以將負載平衡器的運作狀態檢查日誌寫入此新儲存貯體。

------
#### [ Console ]

**啟用運作狀態檢查日誌**

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

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

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

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

1. 針對**監控**，開啟**運作狀態檢查日誌**。

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

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

------
#### [ AWS CLI ]

**啟用運作狀態檢查日誌**  
使用 [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) 命令搭配相關屬性。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes \
        Key=health_check_logs.s3.enabled,Value=true \
        Key=health_check_logs.s3.bucket,Value=amzn-s3-demo-logging-bucket \
        Key=health_check_logs.s3.prefix,Value=logging-prefix
```

------
#### [ CloudFormation ]

**啟用運作狀態檢查日誌**  
更新 [AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html) 資源以包含相關屬性。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-alb
      Type: application
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "health_check_logs.s3.enabled"
          Value: "true"
        - Key: "health_check_logs.s3.bucket"
          Value: "amzn-s3-demo-logging-bucket"
        - Key: "health_check_logs.s3.prefix"
          Value: "logging-prefix"
```

------

## 步驟 4：確認儲存貯體許可
<a name="verify-bucket-permissions-health-check"></a>

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

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

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

1. 選取您為運作狀態檢查日誌指定的儲存貯體名稱。

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

## 疑難排解
<a name="bucket-permissions-troubleshooting-health-check"></a>

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