

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

# Network Load Balancer 的存取日誌
<a name="load-balancer-access-logs"></a>

Elastic Load Balancing 提供存取日誌，可擷取使用 Network Load Balancer 建立之 TLS 連線的詳細資訊。您可以使用這些存取日誌來分析流量模式和排除問題。

**重要**  
 雖然傳統的「舊版」存取日誌 （本節中所述） 仍然可用，但 Network Load Balancer 現在透過 CloudWatch Logs 提供增強型記錄選項。CloudWatch Logs 提供更靈活的交付選項，包括 Amazon CloudWatch Logs、Amazon Data Firehose 和 Amazon Simple Storage Service。若要設定這些改進的記錄選項，請造訪負載平衡器的***整合***索引標籤。如需 CloudWatch Logs 的詳細資訊，請參閱 [Network Load Balancer 的 CloudWatch 日誌](load-balancer-cloudwatch-logs.md)。

**重要**  
只有在負載平衡器具有 TLS 接聽程式，且日誌僅包含 TLS 請求的相關資訊時，才會建立存取日誌。盡最大努力存取日誌記錄請求。建議您使用存取日誌來了解請求的性質，而不是為了全面解釋所有請求。

存取記錄是 Elastic Load Balancing 的選用功能，預設為停用。在啟動負載平衡器的存取日誌之後，Elastic Load Balancing 會擷取日誌為壓縮檔案並存放在您指定的 Amazon S3 儲存貯體。您可以隨時停用存取記錄。

您可利用 Amazon S3 受管的加密金鑰 (SSE-S3) 來啟用伺服器端加密，或針對 S3 儲存貯體搭配客戶受管金鑰 (SSE-KMS CMK) 採用金鑰管理服務。每個存取日誌檔在存放於 S3 儲存貯體之前會自動加密，並於您存取它時解密。存取加密或未加密日誌檔的方式沒有不同，所以您不需要採取任何動作。每個日誌檔案都會使用唯一的金鑰進行加密，該金鑰本身會使用定期輪換的 KMS 金鑰進行加密。如需詳細資訊，請參閱《[Amazon S3 使用者指南》中的指定 Amazon S3 加密 (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-s3-encryption.html) 和[使用 AWS KMS (SSE-KMS) 指定伺服器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-kms-encryption.html)。 *Amazon S3 *

存取日誌無需額外收費。您將需支付 Amazon S3 的儲存成本，但 Elastic Load Balancing 傳送日誌檔到 Amazon S3 所使用的頻寬不需付費。如需儲存成本的詳細資訊，請參閱 [Amazon S3 定價](https://aws.amazon.com/s3/pricing/)。

**Topics**
+ [存取日誌檔](#access-log-file-format)
+ [存取日誌項目](#access-log-entry-format)
+ [處理存取日誌檔](#log-processing-tools)
+ [啟用存取日誌](enable-access-logs.md)
+ [停用存取日誌](disable-access-logs.md)

## 存取日誌檔
<a name="access-log-file-format"></a>

Elastic Load Balancing 每 5 分鐘發佈每個負載平衡器節點的日誌檔。日誌傳遞最終會達到一致。負載平衡器可能在相同期間傳遞多個日誌。這通常是在網站的流量很高時才會發生。

存取日誌的檔案名稱使用以下格式：

```
bucket[/prefix]/AWSLogs/aws-account-id/elasticloadbalancing/region/yyyy/mm/dd/aws-account-id_elasticloadbalancing_region_net.load-balancer-id_end-time_random-string.log.gz
```

*bucket*  
S3 儲存貯體的名稱。

*prefix*  
儲存貯體中的字首 (邏輯階層)。如果不指定字首，日誌會放在儲存貯體的根層級。

*aws-account-id*  
擁有者的 AWS 帳戶 ID。

*region*  
負載平衡器和 S3 儲存貯體的區域。

*yyyy*/*mm*/*dd*  
傳遞日誌的日期。

*load-balancer-id*  
負載平衡器的資源 ID。如果資源 ID 包含任何斜線 (/)，斜線會換成句點 (.)。

*end-time*  
記錄間隔結束的日期和時間。例如，結束時間 20181220T2340Z 包含在 23:35 和 23:40 之間所提出之請求的項目。

*random-string*  
系統產生的隨機字串。

以下是日誌檔名稱範例：

```
s3://my-bucket/prefix/AWSLogs/123456789012/elasticloadbalancing/us-east-2/2020/05/01/123456789012_elasticloadbalancing_us-east-2_net.my-loadbalancer.1234567890abcdef_20200501T0000Z_20sg8hgm.log.gz
```

日誌檔案可存放於儲存貯體任意長時間，但您也可以定義 Amazon S3 生命週期規則，自動封存或刪除日誌檔案。如需詳細資訊，請參閱《*Amazon S3 使用者指南*》的[管儲存生命週期](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)。

## 存取日誌項目
<a name="access-log-entry-format"></a>

下表依序說明存取日誌項目的欄位。所有欄位以空格分隔。引進的新欄位會新增到日誌項目尾端。處理日誌檔案時，您應該忽略日誌項目尾端任何非預期的欄位。


| 欄位 | 說明 | 
| --- | --- | 
| type |  接聽程式的類型。支援的值為 `tls`。  | 
| version |  日誌項目的版本。目前版本是 2.0。  | 
| time |  在 TLS 連線結束時記錄的時間，採用 ISO 8601 格式。  | 
| elb |  負載平衡器的資源 ID。  | 
| 接聽程式 |  適用於連線的 TLS 接聽程式資源 ID。  | 
| client\$1port |  用戶端的 IP 地址和連接埠。  | 
| destination\$1port |  目的地的 IP 地址和連接埠。如果用戶端直接連線至負載平衡器，則目的地就是接聽程式。如果用戶端使用 VPC 端點服務連線，則目的地就是 VPC 端點。  | 
| connection\$1time |  連線從開始到結束的完成時間，以毫秒計。  | 
| tls\$1handshake\$1time |  ​TCP 連線建立後，TLS 交握完成的總時間，包括用戶端的延遲，以毫秒計。此時間包含在 `connection_time` 欄位中。如果沒有 TLS 交握或 TLS 交握失敗，此值會設為 `-`。  | 
| received\$1bytes |  負載平衡器從用戶端接收的解密後位元數。  | 
| sent\$1bytes |  負載平衡器向用戶端傳送的加密前位元數。  | 
| incoming\$1tls\$1alert |  負載平衡器從用戶端接收的 TLS 提醒整數值 (若有)。否則，此值會設為 `-`。  | 
| chosen\$1cert\$1arn |  向用戶端所提供憑證的 ARN。如果未傳送有效的用戶端 hello 訊息，此值會設為 `-`。  | 
| chosen\$1cert\$1serial |  保留以供日後使用。此值一律設定為 `-`。  | 
| tls\$1cipher |  與用戶端交涉的密碼套件，採用 OpenSSL 格式。如果 TLS 交涉未完成，此值會設為 `-`。  | 
| tls\$1protocol\$1version |  與用戶端交涉的 TLS 通訊協定，採用字串格式。可能值為 `tlsv10`、`tlsv11`、`tlsv12` 與 `tlsv13`。如果 TLS 交涉未完成，此值會設為 `-`。  | 
| tls\$1keyexchange |  TLS 或 PQ-TLS 交握期間使用的金鑰交換。如果 TLS 或 PQ-TLS 交涉未完成，此值會設為 `-`。  | 
| domain\$1name |  server\$1name 副檔名的值位於用戶端 hello 訊息中。此值為 URL 編碼格式。如果沒有傳送有效的用戶端 hello 訊息或延伸模組不存在，則此值會設為 `-`。  | 
| alpn\$1fe\$1protocol |  與用戶端交涉的應用程式通訊協定，採用字串格式。可能的值為 `h2`、`http/1.1` 和 `http/1.0`。如果在 TLS 接聽程式中未設定 ALPN 政策、找不到相符的通訊協定，或未傳送有效的通訊協定清單，則此值會設為 `-`。  | 
| alpn\$1be\$1protocol |  與目標交涉的應用程式通訊協定，採用字串格式。可能的值為 `h2`、`http/1.1` 和 `http/1.0`。如果在 TLS 接聽程式中未設定 ALPN 政策、找不到相符的通訊協定，或未傳送有效的通訊協定清單，則此值會設為 `-`。  | 
| alpn\$1client\$1preference\$1list |  用戶端您好訊息中的 application\$1layer\$1protocol\$1negotiation 延伸的值。此值為 URL 編碼格式。每個通訊協定用雙引號括起來，並以逗號分隔。如果 TLS 接聽程式中未設定 ALPN 政策、未傳送任何有效的用戶端 hello 訊息，或延伸模組不存在，則此值會設為 `-`。如果字串長度超過 256 個位元組，則會被截斷。  | 
| tls\$1connection\$1creation\$1time |  在 TLS 連線開始時記錄的時間，採用 ISO 8601 格式。  | 

### 範例日誌項目
<a name="access-log-entry-examples"></a>

以下為日誌項目範例。請注意，分成多行顯示文字只是為了更輕鬆閱讀。

以下是不含 ALPN 政策的 TLS 接聽程式範例。

```
tls 2.0 2018-12-20T02:59:40 net/my-network-loadbalancer/c6e77e28c25b2234 g3d4b5e8bb8464cd 
72.21.218.154:51341 172.100.100.185:443 5 2 98 246 - 
arn:aws:acm:us-east-2:671290407336:certificate/2a108f19-aded-46b0-8493-c63eb1ef4a99 - 
ECDHE-RSA-AES128-SHA tlsv12 - 
my-network-loadbalancer-c6e77e28c25b2234.elb.us-east-2.amazonaws.com
- - - 2018-12-20T02:59:30
```

以下是具有 ALPN 政策的 TLS 接聽程式範例。

```
tls 2.0 2020-04-01T08:51:42 net/my-network-loadbalancer/c6e77e28c25b2234 g3d4b5e8bb8464cd 
72.21.218.154:51341 172.100.100.185:443 5 2 98 246 - 
arn:aws:acm:us-east-2:671290407336:certificate/2a108f19-aded-46b0-8493-c63eb1ef4a99 - 
ECDHE-RSA-AES128-SHA tlsv12 - 
my-network-loadbalancer-c6e77e28c25b2234.elb.us-east-2.amazonaws.com
h2 h2 "h2","http/1.1" 2020-04-01T08:51:20
```

## 處理存取日誌檔
<a name="log-processing-tools"></a>

存取日誌檔已壓縮。如您利用 Amazon S3 主控台開啟檔案，則會解壓縮檔案並顯示資訊。如果您下載檔案，則必須先將其解壓縮才能看到資訊。

如果您的網站上有許多需求，負載平衡器產生的日誌檔可能有好幾 GB 的資料。您可能無法逐行處理這麼龐大的資料。因此，您可能需要使用提供平行處理解決方案的分析工具。例如，您可以使用以下分析工具來分析和處理存取日誌：
+ Amazon Athena 是一種互動式查詢服務，可讓您使用標準 SQL 輕鬆分析 Amazon S3 中的資料。如需詳細資訊，請參閱《*Amazon Athena 使用者指南*》的[查詢 Network Load Balancer 日誌](https://docs.aws.amazon.com/athena/latest/ug/networkloadbalancer-classic-logs.html)。
+ [Loggly](https://documentation.solarwinds.com/en/success_center/loggly/content/admin/s3-ingestion-auto.htm)
+ [Splunk](https://splunk.github.io/splunk-add-on-for-amazon-web-services/)
+ [Sumo Logic](https://www.sumologic.com/application/elb/)

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

當您對負載平衡器啟用存取記錄時，您必須指定 S3 儲存貯體的名稱，供負載平衡器存放日誌。儲存貯體必須具有儲存貯體政策，能授予 Elastic Load Balancing 寫入儲存貯體的許可。

**重要**  
只有在負載平衡器具有 TLS 接聽程式，且日誌僅包含 TLS 請求的相關資訊時，才會建立存取日誌。

## 儲存貯體需求
<a name="access-logging-bucket-requirements"></a>

您可以使用現有儲存貯體，也可以建立專門用於存取日誌的儲存貯體。儲存貯體必須符合下列需求。

**要求**
+ 儲存貯體與負載平衡器必須位於相同的 Region (區域)。儲存貯體和負載平衡器可以由不同的帳戶擁有。
+ 您指定的前綴不得包含 `AWSLogs`。我們在您指定的儲存貯體名稱和前綴之後，增加了以 `AWSLogs` 開頭的檔案名稱部分。
+ 儲存貯體必須有儲存貯體政策，以授權將存取日誌寫入您的儲存貯體。儲存貯體政策是以存取政策語言所編寫的 JSON 陳述式集合，可定義儲存貯體的存取許可。

**儲存貯體政策的範例**  
政策範例如下。對於 `Resource`元素，請以存取日誌的 S3 儲存貯體名稱取代 *amzn-s3-demo-destination-bucket*。如果您不使用儲存貯體*字首，請務必省略字首/*。對於 `aws:SourceAccount`，使用負載平衡器指定 AWS 帳戶的 ID。對於 `aws:SourceArn`，將*區域* 和 *012345678912* 分別取代為負載平衡器的區域和帳戶 ID。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "AWSLogDeliveryWrite",
    "Statement": [
        {
            "Sid": "AWSLogDeliveryAclCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": [
                        "012345678912"
                    ]
                },
                "ArnLike": {
                    "aws:SourceArn": [
                        "arn:aws:logs:us-east-1:012345678912:*"
                    ]
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/Prefix/AWSLogs/account-ID/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control",
                    "aws:SourceAccount": [
                        "012345678912"
                    ]
                },
                "ArnLike": {
                    "aws:SourceArn": [
                        "arn:aws:logs:us-east-1:012345678912:*"
                    ]
                }
            }
        }
    ]
}
```

------<a name="access-log-bucket-encryption"></a>

**加密**

您可利用下列其中一種方式為 Amazon S3 存取日誌儲存貯體啟用伺服器端加密：
+ Amazon S3 受管金鑰 (SSE-S3)
+ AWS KMS 存放在 AWS Key Management Service (SSE-KMS) † 中的金鑰

† 使用 Network Load Balancer 存取日誌時，您無法使用 AWS 受管金鑰，您必須使用客戶受管金鑰。

如需詳細資訊，請參閱《[Amazon S3 使用者指南》中的指定 Amazon S3 加密 (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-s3-encryption.html) 和[使用 AWS KMS (SSE-KMS) 指定伺服器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-kms-encryption.html)。 *Amazon S3 *

金鑰政策必須允許服務加密及解密日誌。政策範例如下。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "*"
    }
  ]
}
```

------

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

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

------
#### [ 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 取決於您是否使用字首。
   + 字首為 s3：//*amzn-s3-demo-logging-bucket*/*logging-prefix* 的 URI
   + 沒有字首的 URI：s3：//*amzn-s3-demo-logging-bucket*

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=access_logs.s3.enabled,Value=true \
        Key=access_logs.s3.bucket,Value=amzn-s3-demo-logging-bucket \
        Key=access_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-nlb
      Type: network
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "access_logs.s3.enabled"
          Value: "true"
        - Key: "access_logs.s3.bucket"
          Value: "amzn-s3-demo-logging-bucket"
        - Key: "access_logs.s3.prefix"
          Value: "logging-prefix"
```

------

# 停用 Network Load Balancer 的存取日誌
<a name="disable-access-logs"></a>

您可以隨時對負載平衡器停用存取記錄。在您停用存取記錄之後，存取日誌會保留在 S3 儲存貯體中，直到您刪除它們。如需詳細資訊，請參閱《Amazon [ S3 使用者指南》中的建立、設定和使用 S3 儲存貯](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html)體。 *Amazon S3 *

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

**停用存取日誌**

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

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

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

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

1. 針對**監控**，請關閉**存取日誌**。

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=access_logs.s3.enabled,Value=false
```

------