ALBの接続ログ (Connection logs)を試してみた
2023年11月 Application Load Balancer (ELB) が接続ログ(Connection Logs)をサポートするアップデートがありました。
接続ログ出力を有効化したALBを用意し、そのログ記録内容について確認する機会がありましたので、紹介させて頂きます。
設定
ALBの「属性」タブで、接続ログの設定が可能になりました。
接続ログの出力先のS3バケット、ELBからのログ書き込みを許可するバケットポリシーが必要です。
今回の動作確認は東京リージョンを利用。以下のバケットポリシーをS3バケットに設定し、ログ出力先としました。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::582318560864:root" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<S3バケット名>/*" } ] }
動作確認
CloudShellで利用可能な 「curl」コマンドを利用して、以下リスナー設定をしたELBへのアクセスを実施して、接続ログの出力内容を確認しました。
- プロトコル: HTTPS:443
- Security policy: ELBSecurityPolicy-TLS13-1-2-2021-06
$ curl --version curl 8.3.0 (x86_64-amazon-linux-gnu) libcurl/8.3.0 OpenSSL/3.0.8 zlib/1.2.11 libidn2/2.3.2 nghttp2/1.57.0 Release-Date: 2023-09-13
TLSネゴシエーション失敗
サポート外のTLSv1を指定。意図的にTLS接続を失敗を再現しました。
Curl
$ curl -v --tls-max 1.0 https://alb.example.com/ * Trying 52.xxx.xxx.xxx:443... * Connected to alb.example.com (52.xxx.xxx.xxx) port 443 * ALPN: curl offers h2,http/1.1 * TLSv1.3 (OUT), TLS alert, protocol version (582): * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none * OpenSSL/3.0.8: error:0A0000BF:SSL routines::no protocols available * Closing connection curl: (35) OpenSSL/3.0.8: error:0A0000BF:SSL routines::no protocols available
Connection Log
Unmapped runtime connection error のログ記録が確認できました。
2023-12-05T14:39:18.169062Z 54.92.36.xxx 49823 443 TLSv1.2 ECDHE-ECDSA-AES128-GCM-SHA256 - "-" - - Failed:UnmappedConnectionError 2023-12-05T14:39:19.173977Z 54.92.36.xxx 34719 443 TLSv1.2 ECDHE-ECDSA-AES128-GCM-SHA256 - "-" - - Failed:UnmappedConnectionError 2023-12-05T14:39:22.179932Z 54.92.36.xxx 52081 443 TLSv1.2 ECDHE-ECDSA-AES128-GCM-SHA256 - "-" - - Failed:UnmappedConnectionError 2023-12-05T14:39:31.186108Z 54.92.36.xxx 48725 443 TLSv1.2 ECDHE-ECDSA-AES128-GCM-SHA256 - "-" - - Failed:UnmappedConnectionError 2023-12-05T14:39:48.450383Z 54.92.36.xxx 57233 443 TLSv1.2 ECDHE-ECDSA-AES128-GCM-SHA256 - "-" - - Failed:UnmappedConnectionError 2023-12-05T14:39:49.455209Z 54.92.36.xxx 36119 443 TLSv1.2 ECDHE-ECDSA-AES128-GCM-SHA256 - "-" - - Failed:UnmappedConnectionError 2023-12-05T14:39:52.460734Z 54.92.36.xxx 56745 443 TLSv1.2 ECDHE-ECDSA-AES128-GCM-SHA256 - "-" - - Failed:UnmappedConnectionError
接続成功時
Curl
$ curl -v --tls-max 1.3 https://alb.example.com/ * Trying 52.xxx.xxx.xxx:443... * Connected to alb.example.com (52.xxx.xxx.xxx) port 443 * ALPN: curl offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 * ALPN: server accepted h2 * Server certificate: * subject: CN=*.example.com * start date: Feb 3 00:00:00 2023 GMT * expire date: Mar 4 23:59:59 2024 GMT * subjectAltName: host "alb.example.com" matched cert's "*.example.com" * issuer: C=US; O=Amazon; CN=Amazon ECDSA 384 M02 * SSL certificate verify ok. * using HTTP/2 * [HTTP/2] [1] OPENED stream for https://alb.example.com/ * [HTTP/2] [1] [:method: GET] * [HTTP/2] [1] [:scheme: https] * [HTTP/2] [1] [:authority: alb.example.com] * [HTTP/2] [1] [:path: /] * [HTTP/2] [1] [user-agent: curl/8.3.0] * [HTTP/2] [1] [accept: */*] > GET / HTTP/2 > Host: alb.example.com > User-Agent: curl/8.3.0 > Accept: */* > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): < HTTP/2 200 < server: awselb/2.0 < date: Tue, 05 Dec 2023 14:27:13 GMT < content-type: text/plain; charset=utf-8 < content-length: 14 < * Connection #0 to host alb.example.com left intact
Connection Log
2023-12-05T14:27:13.699577Z 54.248.xx.xx 54414 443 TLSv1.3 TLS_AES_128_GCM_SHA256 0.057 "-" - - Success
まとめ
ALBの接続ログ、TLS認証失敗時のログ記録が可能になりました。
TLSクライアント認証(mTLS)をトラストストア検証で利用、接続失敗時の調査が必要な場合や、
mTLSを利用しない場合でも、
- 古いTLSバージョンのサポートを打ち切るセキュリティポリシーを採用した。
- CloudWatchのELBのメトリクスで 「Client TLS Negotiation Errors」の値が増加した。
- TLSネゴシエーションに失敗している環境の調査が必要。
といった場合、ALBが新たにサポートした接続ログをご活用ください。
Client TLS Negotiation Errorsメトリクス例