Thanks to visit codestin.com
Credit goes to dev.classmethod.jp

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

クライアント 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〜のプレミアムデータ転送料金で利用できますので、是非お試し下さい。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事