NLB のアクセスログ設定

概要

  • 今回は、ロードバランサー(NLB: Network Load Balancer)にアクセスログを設定する方法を紹介します。
  • 以前、下記記事に記載した通り、NLBのアクセスログはTLSプロトコルだけ対応しています。
    • NLBもALB と同じくアクセスログを取得することが可能ですが、NLBにTLSリスナーを設定し、TLSリクエストに関する情報のみログに記録されます。その点がALB と異なりますので、要注意です。
    • NLBにTCPリスナーを設定する場合、アクセスログではなく、VPCフローログで代替します
  

NLBをTLSプロトコルで作成する

  • NLBを作成します。リスナープロトコルにTCPではなく、TLSを選択します。
  • NLBをTCPプロトコルで使用する場合オリジン側でSSLを終端しますが、今回はTLSプロトコルを使用するため、NLB側でSSLを終端します。
 
  • NLBにSSL証明書が必要となりますので、準備を忘れずに。
 

アクセスログ設定方法

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

S3バケットポリシー設定

  • アクセスログの出力先となるS3バケットにバケットポリシーを設定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::s3-bucket-name/nlb_logs/AWSLogs/*",
            "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:::s3-bucket-name"
        }
    ]
}
 

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

  • EC2のロードバランサーより、対象のNLBを選択します。
  • ロードバランサー属性の編集(Edit attributes)より、「アクセスログの有効化(Enable access logs)」をチェックします。「S3の場所(S3 location)」にS3バケットの名前をプレフィックスを含めて入力します。
 
  • 保存ボタンを押します。設定が反映されました。
   

ログ保存の確認

アクセスログの保存場所

  • S3バケットにログが記録されていることを確認します。
  • バケットポリシーのResourceに指定したバケット/プレフィックス配下に、所有者の AWSアカウントIDのフォルダが作成され、下記のパス、ファイル名にてログが格納されています。
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
     

アクセスログのサンプル

  • 以下、アクセスログのサンプルです。正しくは1行ですが、サンプルは複数の行に分かれています。
  • 各フィールドの説明は、下記ドキュメントを参照ください。
 

tls 1.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

AWS, ELB

Posted by takaaki