Network Load Balancer のアクセスログ - Elastic Load Balancing

Network Load Balancer のアクセスログ

Elastic Load Balancing は、Network Load Balancer に送信される TLS リクエストについて、詳細情報を収集するアクセスログを提供します。これらのアクセスログを使用して、トラフィックパターンの分析や、問題のトラブルシューティングを行うことができます。

重要

アクセスログが作成されるのは、ロードバランサーに TLS リスナーがあり、TLS リクエストに関する情報のみを含む場合のみです。

アクセスログの作成は、Elastic Load Balancing のオプション機能であり、デフォルトでは無効化されています。ロードバランサーのアクセスログの作成を有効にすると、Elastic Load Balancing はログを圧縮ファイルとしてキャプチャし、指定した Amazon S3 バケット内に保存します。アクセスログの作成はいつでも無効にできます。

S3 バケットに対して、Amazon S3 管理の暗号化キーによるサーバー側の暗号化 (SSE-S3) を有効にした場合、各アクセスログファイルは、S3 バケットに保存される前に自動的に暗号化され、アクセス時に復号されます。暗号化あるいは復号化されたログファイルにアクセスする方法に違いがないため、特別なアクションを実行する必要はありません。各ログファイルは、一意のキーで暗号化されます。この一意のキー自体が、定期的に更新されるマスターキーで更新されます。詳細については、Amazon Simple Storage Service 開発者ガイド の「Amazon S3 で管理された暗号化キーによるサーバー側の暗号化 (SSE-S3) を使用したデータの保護」を参照してください。

アクセスログに対する追加料金はありません。Amazon S3 のストレージコストは発生しますが、Amazon S3 にログファイルを送信するために Elastic Load Balancing が使用する帯域については料金は発生しません。ストレージコストの詳細については、Amazon S3 料金表を参照してください。

アクセスログファイル

Elastic Load Balancing は各ロードバランサーノードのログファイルを 5 分ごとに発行します。ログ配信には結果整合性があります。ロードバランサーでは、同じ期間について複数のログが発行されることがあります。これは通常、サイトに高トラフィックがある場合に発生します。

アクセスログのファイル名には次の形式を使用します。

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

S3 バケットの名前。

プレフィックス

バケットのプレフィックス (論理階層)。プレフィックスを指定しない場合、ログはバケットのルートレベルに配置されます。

aws-account-id

所有者の AWS アカウント ID。

リージョン

ロードバランサーおよび S3 バケットのリージョン。

yyyy/mm/dd

ログが配信された日付。

load-balancer-id

ロードバランサーのリソース ID。リソース ID にスラッシュ (/) が含まれている場合、ピリオド (.) に置換されます。

end-time

ログ作成の間隔が終了した日時。たとえば、終了時間 20181220T2340Z には、23:35~23:40 に行われたリクエストのエントリが含まれます。

random-string

システムによって生成されたランダム文字列。

ログファイルは無期限に保管できますが、ログファイルを自動的にアーカイブまたは削除するにように Amazon S3 ライフサイクルルールを定義することもできます。詳細については、Amazon Simple Storage Service 開発者ガイド の「オブジェクトのライフサイクル管理」を参照してください。

アクセスログのエントリ

次の表は、アクセスログのエントリのフィールドを順に示しています。すべてのフィールドはスペースで区切られています。新しいフィールドが導入されると、ログエントリの最後に追加されます。ログファイルの処理中に、予期していなかったログエントリの最後のフィールドは無視する必要があります。

フィールド 説明

type

リスナーの種類。サポートされる値は tls です。

バージョン

ログエントリのバージョン。現在のバージョンは 2.0 です。

time

TLS 接続の最後に記録された時間 (ISO 8601 形式)。

elb

ロードバランサーのリソース ID。

listener

接続の TLS リスナーのリソース ID。

client:port

クライアントの IP アドレスとポート。

destination:port

送信先の IP アドレスとポート。クライアントがロードバランサーに直接接続する場合、送信先はリスナーです。クライアントが VPC エンドポイントサービスを介して接続する場合、送信先は VPC エンドポイントです。

connection_time

接続が完了するまでの合計時間 (開始から終了まで) (ミリ秒単位)。

tls_handshake_time

TCP 接続が確立された後に TLS ハンドシェイクが完了するまでの合計時間 (クライアント側の遅延時間を含む) (ミリ秒単位)。この時間は connection_time フィールドに含まれています。

received_bytes

クライアントからロードバランサーによって受信されたバイト数 (復号後)。

sent_bytes

ロードバランサーからクライアントに送信されたバイト数 (復号前)。

incoming_tls_alert

クライアントからロードバランサーによって受信された TLS アラートの整数値 (存在する場合)。それ以外の場合、この値は - に設定されます。

chosen_cert_arn

クライアントに提供された証明書の ARN。有効なクライアント hello メッセージが送信されない場合、この値は - に設定されます。

chosen_cert_serial

将来の利用のために予約されています。この値は常に - に設定されます。

tls_cipher

クライアントとネゴシエートされた暗号スイート (OpenSSL 形式)。TLS ネゴシエーションが完了しない場合、この値は - に設定されます。

tls_protocol_version

クライアントとネゴシエートされた TLS プロトコル (文字列形式)。指定できる値は、tlsv10tlsv11、および tlsv12 です。TLS ネゴシエーションが完了しない場合、この値は - に設定されます。

tls_named_group

将来の利用のために予約されています。この値は常に - に設定されます。

domain_name

クライアント hello メッセージの server_name 拡張機能の値。この値は URL でエンコードされます。有効なクライアント hello メッセージが送信されない場合、または拡張機能が存在しない場合、この値は - に設定されます。

alpn_fe_protocol

クライアントとネゴシエートされたアプリケーションプロトコル (文字列形式)。指定できる値は、h2http/1.1、および http/1.0 です。TLS リスナーで ALPN ポリシーが設定されていない場合、一致するプロトコルが見つからない場合、または有効なプロトコルリストが送信されない場合、この値は - に設定されます。

alpn_be_protocol

ターゲットとネゴシエートされたアプリケーションプロトコル (文字列形式)。指定できる値は、h2http/1.1、および http/1.0 です。TLS リスナーで ALPN ポリシーが設定されていない場合、一致するプロトコルが見つからない場合、または有効なプロトコルリストが送信されない場合、この値は - に設定されます。

alpn_client_preference_list

クライアントの hello メッセージ内の application_layer_protocol_negotiation 拡張機能の値。この値は URL でエンコードされます。各プロトコルは二重引用符で囲まれ、プロトコルはカンマで区切られます。TLS リスナーで ALPN ポリシーが設定されていない場合、有効なクライアント hello メッセージが送信されない場合、または内線番号が存在しない場合、この値は - に設定されます。文字列は、256 バイトを超える場合は切り捨てられます。

ログエントリの例

以下にログエントリの例を示します。読みやすくするためだけの目的で、テキストは複数の行に表示されています。

次に、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 - - -

次に、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"

バケットの要件

アクセスログの作成を有効にするときは、アクセスログの S3 バケットを指定する必要があります。バケットは、ロードバランサーを所有するアカウントとは別のアカウントが所有するものでもかまいません。バケットは、次の要件を満たしている必要があります。

要件

  • バケットは、ロードバランサーと同じリージョンに配置されている必要があります。

  • Amazon S3 マネージドの暗号化キー (SSE-S3) が必要です。その他の暗号化オプションはサポートされていません。

  • このバケットには、バケットにアクセスログを書き込む許可を付与するバケットポリシーが必要です。バケットポリシーは、バケットのアクセス許可を定義するためにアクセスポリシー言語で記述された JSON ステートメントのコレクションです。ポリシーの例を次に示します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket_name/prefix/AWSLogs/123456789012/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } }, { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::bucket_name" } ] }

アクセスログの作成の有効化

ロードバランサーのアクセスログの作成を有効にする場合は、ロードバランサーがログを保存する S3; バケットの名前を指定する必要があります。詳細については、「バケットの要件」を参照してください。

コンソールを使用してアクセスログの作成を有効にするには

  1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[Load Balancers] を選択します。

  3. ロードバランサーを選択します。

  4. [Description] タブで、[Edit attributes] を選択します。

  5. [Edit load balancer attributes] ページで、以下を実行します。

    1. [アクセスログ] で、[有効化] を選択します。

    2. [S3 location] に、プレフィックスを含めて S3 バケットの名前を入力します (たとえば my-loadbalancer-logs/my-app)。既存のバケットの名前や新しいバケットの名前を指定できます。既存のバケットを指定する場合は、このバケットを所有していること、および必要なバケットポリシーを設定したことを確認します。

    3. (オプション) バケットが存在しない場合は、[Create this location for me] を選択します。Amazon S3 内のすべての既存のバケット名全体で一意な名前を指定し、DNS 命名規則に従う必要があります。詳細については、Amazon Simple Storage Service 開発者ガイドの「バケット命名規則」を参照してください。

    4. [保存] を選択します。

AWS CLI を使用してアクセスログの作成を有効にするには

modify-load-balancer-attributes コマンドを使用します。

アクセスログの作成の無効化

ロードバランサーのアクセスログの作成は、いつでも無効にできます。アクセスログの作成を無効にした後は、削除するまでアクセスログは S3; バケットに残されたままです。詳細については、Amazon Simple Storage Service コンソールユーザーガイド の「バケットの使用」を参照してください。

コンソールを使用してアクセスログの作成を無効にするには

  1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[Load Balancers] を選択します。

  3. ロードバランサーを選択します。

  4. [説明] タブで、[属性の編集] を選択します。

  5. [アクセスログ] で、[有効化] をクリアします。

  6. [Save] を選択します。

AWS CLI を使用してアクセスログの作成を無効にするには

modify-load-balancer-attributes コマンドを使用します。

アクセスログファイルの処理

アクセスログファイルは圧縮されます。Amazon S3 コンソールを使用してファイルを開くと、ファイルは解凍され、情報が表示されます。ファイルをダウンロードする場合、情報を表示するには解凍する必要があります。

ウェブサイトの需要が大きい場合は、ロードバランサーによって数 GB のデータ量のログファイルが生成されることがあります。このような大容量のデータは、行単位で処理できない場合があります。このため、場合によっては、並列処理ソリューションを提供する分析ツールを使用する必要があります。たとえば、次の分析ツールを使用するとアクセスログの分析と処理を行うことができます。

  • Amazon Athena は、標準 SQL を使用して Amazon S3 のデータの分析を簡易化するインタラクティブなクエリサービスです。詳細については、Amazon Athena ユーザーガイド の「Network Load Balancer ログのクエリ」を参照してください。

  • Loggly

  • Splunk

  • Sumo Logic