[UPDATE] Amazon CloudFrontでクライアントのIPアドレスと接続ポートを確認できるCloudFront-Viewer-Addressヘッダが利用可能になりました
はじめに
清水です。本日お届けするアップデート情報はこちら、AWSのCDNサービスであるAmazon CloudFrontでクライアントのIPアドレスと接続ポート情報を確認できるCloudFront-Viewer-Addressヘッダが利用可能になりました。2021/10/25付でポストされたアップデート内容になります。
CloudFront-Viewer-Addressヘッダをオリジンサーバに転送するようCloudFrontを設定することで、オリジンサーバ側でクライアントのIPアドレスならびに接続ポート情報の確認がリアルタイムに行えます。これまでだと接続元IPアドレスの確認はX-Forwarded-Forヘッダの解析が必要、接続ポートまで含めた情報はアクセスログの解析が必要な状況でした。なおCloudFront-Viewer-Addressヘッダは従来のLegacy cache settingsでは利用できず、Origin request poilcyとして設定する必要がある点に注意しましょう。本エントリでは実際にCloudFront-Viewer-AddressヘッダをOrigin request policyに設定して動作を確認してみたのでまとめてみます。
CloudFront-Viewer-Addressヘッダを確認する
それでは実際にCloudFrontにCloudFront-Viewer-Addressヘッダをオリジンに転送するよう設定、このヘッダ内容を確認してみます。
まずはOrigin request policyを作成作成します。マネジメントコンソールの[Create origin request policy]ボタンから進みます。Origin request settingsのHeadersの項目で、All viewer headers and the following CloudFront headers
を選択、続くAdd headerの項目ではCloudFront-Viewer-Address
を選択します。
Distribution作成の際、Cache key and origin requestsの項目、 Legacy cache settingsではなくCache policy and origin request policyを選択して Origin request policyで作成したポリシー(今回は「Custom-CloudFrontViewerAddressHeader」という名称)を選択します。今回は動作検証のため、Cache policyは「CachingDisabled」としました。
以上でCloudFront側の設定は完了です。オリジンサーバ側ではApache + PHPの環境を準備、以下のindex.phpのコードを配置してヘッダの内容を出力するようにします。
<?php foreach (getallheaders() as $name => $value) { echo "<p>"; echo "$name: $value\n"; echo "</p>"; } ?>
CloudFront DistributionのDeployが完了したら、実際にCloudFrontドメインにアクセスしてみます。
CloudFront-Viewer-Addressのヘッダとして、202.XXX.XXX.50:5399
という情報が取得できていますね。クライアントはIPアドレス202.XXX.XXX.50
、ポート5399
で接続していることがわかります。
以下はIPv6環境から接続した例です。クライアントのIPアドレスは240b:XXXXXXXXXX:8ef3
、ポート6097
で接続していることが確認できます。
まとめ
AWSのCDNサービスAmazon CloudFrontで新たに追加されたCloudFront-Viewer-Addressヘッダを確認してみました。これまで確認や利用に一手間二手間かかっていたクライアントのIPアドレスと接続ポートの情報が1つのヘッダでシンプルに取得できます。大変うれしいアップデートだなと思いました。なおCloudFront-Viewer-AddressヘッダはCloudFront Functionsでも利用可能とのことです、こちらでも活用の幅が広がりそうですね。