クライアント IP アドレス保持が可能になったAWS Global Accelerator を試してみた

2019.09.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWSチームのすずきです。

AWS Global Accelerator のアップデートにより、クライアントのIPアドレス情報を保持が可能になりました。

クライアントIPの保持設定(Preserve client IP) を有効とした AWS Global Accelerator を用意、ALBとEC2(httpd)で 接続元クライアントIP情報を取得できる事を確認する機会がありましたので、紹介させていただきます。

新機能: AWS Global Accelerator でのクライアント IP アドレス保持

構成

設定

Webコンソールを利用して、AWS Global Acceleratorの設定を実施しました。

名称

任意の名称を指定します。

リスナー

TCP80、443、HTTPとHTTPSを提供するALB用の設定としました。 Client affinity はデフォルトのままとしています。

エンドポイントグループ

ALBを設置した東京リージョン(ap-northeast-1)を指定します。 ヘルスチェックはデフォルト、TCPのポート疎通の設定としました。

エンドポイント

東京リージョンに設置済みのALBを指定します。

新規設定では「Preserve client IP」、クライアントIPの保持指定がデフォルトで有効となっています。

既存のGlobal Acceleratorで、クライアントIPの保持設定を有効にするためには、エンドポイントの削除、再作成が必要です。

作成完了

数分〜5分程度で設定が完了、Static IPとして示されたIPアドレスの利用が可能になります。

動作確認

クライアントIPの保持設定(Preserve client IP) を有効とした AWS Global Acceleratorに対し、 「121.2.xx.xx」のIPを持つクライアントからHTTPリクエストを実施、ALBとEC2(httpd)のアクセスログを確認しました。

ALBアクセスログ

「client」のログ出力より、接続元クライアント(121.2.xx.xx)のIPアドレスが確認可能になりました。

  • サンプル
http 2019-09-23T05:xx:xx app/xxx/xxx 121.2.xx.xx:61956 172.31.45.180:80 0.002 0.002 0.000 200 200 86 306 "GET http://13.248.133.92:80/test.html HTTP/1.1" "curl/7.54.0" - - arn:aws:elasticloadbalancing:ap-northeast-1:xx:targetgroup/xx/xx "Root=1-x-xx" "-" "-" 0 2019-09-23T05:xx:xx "forward" "-" "-"

httpd (access_log)

「X-Forwarded-For」ヘッダのログ出力より、接続元クライアントのIPアドレスが確認可能となりました。

  • access_log サンプル
121.2.xx.xx 172.31.43.190 - - [23/Sep/2019:05:xx:xx +0000] "GET /test.html HTTP/1.1" 200 29 "-" "curl/7.54.0"
  • LogFormat設定
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

従来

AWS Global Accelerator で予約されたIPアドレスが アクセスログの接続元クライアントとして記録される仕様でした。

ALBアクセスログ

http 2019-09-23T05:xx:xx app/xxx/xxx 13.248.98.8:42018 172.31.45.180:80 0.002 0.002 0.000 200 200 86 306 "GET http://13.248.158.67:80/test.html HTTP/1.1" "curl/7.54.0" - - arn:aws:elasticloadbalancing:ap-northeast-1:xx:targetgroup/xx/xx "Root=1-x-xx" "-" "-" 0 2019-09-23T05:xx:xx "forward" "-" "-"

httpd (access_log)

13.248.98.8 172.31.10.68 - - [23/Sep/2019:05:xx:xx +0000] "GET /test.html HTTP/1.1" 200 29 "-" "curl/7.54.0"

ip-ranges

wget https://ip-ranges.amazonaws.com/ip-ranges.json
cat ip-ranges.json | jq .prefixes[] | jq '.| select (.service=="GLOBALACCELERATOR")' | jq -c
{"ip_prefix":"13.248.106.0/24","region":"me-south-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.103.0/24","region":"us-east-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.100.0/24","region":"eu-north-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.99.0/24","region":"us-west-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.174.0/24","region":"ca-central-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.128.0/17","region":"GLOBAL","service":"GLOBALACCELERATOR"}
{"ip_prefix":"76.223.0.0/17","region":"GLOBAL","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.160.0/24","region":"ap-south-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.97.0/24","region":"eu-central-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.113.0/24","region":"eu-west-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.98.0/24","region":"ap-northeast-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.161.0/24","region":"eu-west-3","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.116.0/24","region":"us-east-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.171.0/24","region":"us-east-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.105.0/24","region":"ap-south-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.162.0/24","region":"eu-west-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.173.0/24","region":"ap-southeast-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.163.0/24","region":"eu-central-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.114.0/24","region":"sa-east-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.166.0/24","region":"us-east-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"75.2.0.0/17","region":"GLOBAL","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.175.0/24","region":"us-east-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.109.0/24","region":"ap-southeast-2","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.107.0/24","region":"ap-southeast-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.104.0/24","region":"sa-east-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.164.0/24","region":"sa-east-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.168.0/24","region":"ap-northeast-2","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.83.128.0/17","region":"GLOBAL","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.112.0/24","region":"us-west-2","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.167.0/24","region":"us-east-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.101.0/24","region":"eu-west-2","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.108.0/24","region":"us-east-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.156.0/22","region":"GLOBAL","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.172.0/24","region":"us-west-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.96.0/24","region":"eu-west-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.169.0/24","region":"eu-west-2","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.165.0/24","region":"us-east-1","service":"GLOBALACCELERATOR"}
{"ip_prefix":"13.248.102.0/24","region":"ap-southeast-2","service":"GLOBALACCELERATOR"}
{"ip_prefix":"99.82.170.0/24","region":"ap-northeast-1","service":"GLOBALACCELERATOR"}

まとめ

AWS Global Accelerator のエンドポイント設定で クライアントIPの保持設定を行う事により、 セキュリティグループ、AWS WAF、リスナールールなどで、接続元IPに基づいたアクセス制御が可能になりました。

AWS Global Acceleratorの固定IP、最適化されたネットワークを必要としているが、 AWS WAFのレートベース(Rate-based)や、地域条件(Geo match)ルールの利用を優先するため、 Global Accelerator の 採用が難しかった環境では朗報となるアップデートでした。

AWS Global Accelerator は初期費用無し、1 時間毎に 0.025 USD の時間課金と、日本を含むアジアパシフィックでは1GB あたり0.01 USD〜のプレミアムデータ転送料金で利用できますので、是非お試し下さい。