
Amazon CloudFront の CloudFront-Viewer-ISP と CloudFront-Viewer-TLS-Details をオリジンで受け取ってみた
はじめに
2026年10月、Amazon CloudFront が CloudFront-Viewer-ISP と CloudFront-Viewer-TLS-Details の2つのヘッダーをオリジンへ転送できるようになりました。これらのヘッダーから、ビューワーの ISP 名や、PQC を含む鍵交換方式などの TLS 接続情報を確認できます。
この記事では、2つのヘッダーを追加したオリジンリクエストポリシーをディストリビューションに紐づけ、オリジンに届いた値をアクセスログで確認します。
検証方法
オリジンリクエストポリシー
次の内容を origin-request-policy.json として保存します。2つのヘッダーは HeadersConfig に指定します。クエリパラメーター case をオリジンのログに残すため、QueryStringBehavior は all としました。
{
"Name": "cfv-1031-viewer-isp-tls-details",
"Comment": "Add CloudFront-Viewer-ISP and CloudFront-Viewer-TLS-Details to origin requests",
"HeadersConfig": {
"HeaderBehavior": "whitelist",
"Headers": {
"Quantity": 2,
"Items": [
"CloudFront-Viewer-ISP",
"CloudFront-Viewer-TLS-Details"
]
}
},
"CookiesConfig": {
"CookieBehavior": "none"
},
"QueryStringsConfig": {
"QueryStringBehavior": "all"
}
}
aws cloudfront create-origin-request-policy \
--origin-request-policy-config file://origin-request-policy.json
ディストリビューションのキャッシュビヘイビアで、作成したポリシーの ID を OriginRequestPolicyId に指定すると、2つのヘッダーがオリジンに届きます。
検証環境
| 項目 | 値 |
|---|---|
| オリジン | Amazon Linux 2023 の EC2、nginx 1.30.6。2つのヘッダーをアクセスログに記録 |
| オリジンへの接続 | Elastic IP の公開 DNS 名を指定し、HTTP 80 を使用 |
| ディストリビューション | 既定のドメイン(*.cloudfront.net)と既定の証明書。ビューワープロトコルは HTTPS のみ |
| キャッシュポリシー | Managed-CachingDisabled。各リクエストをオリジンへ転送 |
| クライアント | Docker の alpine/openssl:latest(OpenSSL 3.5.9)で鍵交換グループを指定。ホストの curl 8.18.0(OpenSSL 3.5.9)ではグループを指定せずに接続 |
| 接続元 | 作業環境の1回線(グローバル IP は1つ) |
nginx のログ形式(/etc/nginx/conf.d/viewer-log.conf)
log_format viewer escape=json
'{"time":"$time_iso8601",'
'"uri":"$request_uri",'
'"status":$status,'
'"viewer_isp":"$http_cloudfront_viewer_isp",'
'"viewer_tls_details":"$http_cloudfront_viewer_tls_details"}';
access_log /var/log/nginx/viewer.log viewer;
OpenSSL のクライアント
Docker コンテナ内で、次のスクリプトを実行しました。引数は CloudFront のドメイン、鍵交換グループ、ログでリクエストを見分けるための case の値です。
#!/bin/sh
set -eu
DOMAIN="$1"
GROUP="$2"
CASE="$3"
(
printf 'GET /?case=%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n' \
"$CASE" "$DOMAIN"
sleep 3
) |
openssl s_client \
-connect "${DOMAIN}:443" \
-servername "$DOMAIN" \
-tls1_3 \
-groups "$GROUP" \
-brief 2>&1 |
grep -E 'Protocol version|Ciphersuite|Negotiated TLS1.3 group|Peer Temp Key|HTTP/1.1|x-cache|error|alert'
実行例です。CloudFront のドメインはマスクしています。
./openssl-request.sh dxxxxxxxxxxxxx.cloudfront.net X25519MLKEM768 pqc-x25519mlkem768
sleep 3 で標準入力を開いたままにしています。これを省くと、TLS の接続情報は表示されても、リクエストがオリジンのログに記録されませんでした。
グループを指定しない接続も確認するため、ホストの curl から1回リクエストを送りました。
検証結果
CloudFront-Viewer-ISP
検証には KDDI 系の ISP 回線を使用しました。この1回線から送った6件では、CloudFront-Viewer-ISP の値はすべて au one net でした。今回の値は、空白を含む文字列のままオリジンに届きました。
CloudFront-Viewer-ISP は、CloudFront が ISP を特定できた場合にのみ追加されるため、オリジン側ではヘッダーがないリクエストも考慮する必要があります。
CloudFront-Viewer-TLS-Details
PQC を使った接続(X25519MLKEM768)で、オリジンに届いた値です。アクセスログの記録を整形して載せています。
{
"tlsVersion": "TLSv1.3",
"cipherSuite": "TLS_AES_128_GCM_SHA256",
"handshakeType": "fullHandshake",
"keyExchange": "X25519MLKEM768",
"signatureScheme": "rsa_pss_rsae_sha256",
"signaturePublicKeyType": "rsa2048"
}
従来型の接続(クライアントで X25519 を指定)の値です。
{
"tlsVersion": "TLSv1.3",
"cipherSuite": "TLS_AES_128_GCM_SHA256",
"handshakeType": "fullHandshake",
"keyExchange": "x25519",
"signatureScheme": "rsa_pss_rsae_sha256",
"signaturePublicKeyType": "rsa2048"
}
既定の *.cloudfront.net 証明書を使う今回のディストリビューションでは、PQC を使った接続でも署名スキームと証明書の公開鍵タイプは従来型の接続と同じ値でした。
keyExchange の値
CloudFront が対応する PQC の鍵交換方式は、X25519MLKEM768 と SecP256r1MLKEM768 の2種類で、TLS 1.3 でのみ使えます。
鍵交換のグループを1つに限定した5通りの接続の結果です。
| クライアントが指定したグループ | クライアント側の表示 | オリジンに届いた keyExchange |
|---|---|---|
| X25519MLKEM768 | Negotiated TLS1.3 group: X25519MLKEM768 | X25519MLKEM768 |
| SecP256r1MLKEM768 | Negotiated TLS1.3 group: SecP256r1MLKEM768 | SecP256r1MLKEM768 |
| X25519 | Peer Temp Key: X25519, 253 bits | x25519 |
| prime256v1 | Peer Temp Key: ECDH, prime256v1, 256 bits | secp256r1 |
| secp384r1 | Peer Temp Key: ECDH, secp384r1, 384 bits | secp384r1 |
参考として、鍵交換グループを指定しない curl 8.18.0(OpenSSL 3.5.9)でも、今回の環境では X25519MLKEM768 が選択されました。
まとめ
オリジンリクエストポリシーに CloudFront-Viewer-ISP と CloudFront-Viewer-TLS-Details を追加し、ビューワーの ISP 名と、PQC を含む鍵交換方式をオリジンで確認できました。
接続元の ISP や鍵交換方式を、オリジン側での判定やログ記録に利用したい場合は、今回のアップデートをお試しください。









