【初心者】AWS Global Accelerator を使ってみる

# 目的
- ALBにFQDNではなく、固定のIPアドレスでアクセスしたいという要件あり。Global Acceleratorでできるのではないかと思い検証することにした。

# Global Acceleratorとは（自分の理解）
- Global Acceleratorを使うと、クライアント(PCやスマホ)と、サーバ(ELB配下のWEBとか)の通信時に、AWSが用意するネットワークを通る区間が長くなるため、通常のインターネット経由よりも速くなる。
- 固定のIPが払い出されるので、それをALBと紐づけることで、結果的にALBに固定IPでアクセスできるようになる。

# やったこと
- ALB + EC2(nginx) の作成
- Global Accelerator と ALBの紐づけ(=ALBへの固定IPでのアクセス)
- 通常のインターネット経由とGlobal Accelerator経由の速度の比較
- ALBのアクセスログの確認

# 構成図
![kousei.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/02abe452-e54d-ca6b-3552-ca848cc81996.png)

# 手順
- ALB + EC2(nginx) を作成 (ohioリージョン)。
- ACMで証明書を2個作成し、2つの証明書をそれぞれALBに適用。1個のALBに2個の証明書を付与する手順は以下サイトを参照。（[ALBで複数のSSL/TLS証明書を設定できるSNIに対応しました](https://dev.classmethod.jp/cloud/aws/alb-support-sni/)）
    - mksamba-web.aaa.com  ⇒  インターネット経由で直接アクセスする用
    - mksamba-web-ga.aaa.com　⇒  Global Accelerator 経由でアクセスする用
- Global Accelerator を申し込む。Global Acceleratorはohioリージョンにはなく、oregonリージョンになる。申し込むと固定IPが2個払い出され、それをohioリージョンに作成したALBとひもづける。この設定により、この2個のIPのどちらかをたたくとALBにGlobal Accelerator経由の経路でアクセス可能になる。
- Route53 で以下のレコード登録を行う。これにより、https://mksaba-web.aaa.com では通常のインターネット経由で、https://mksaba-web-ga.aaa.com ではGlobal Accelerator 経由で同じALBにアクセス可能になる。
    - mksamba-web.aaa.com  A  "ALIAS ALB"
    - mksamba-web-ga.aaa.com  A  "GlobalAcceleratorのIP2個"

# アクセス速度の比較
筆者のPC(東京都内)からインターネット経由とGlobal Accelerator経由でALBにアクセス(ping)して、速度の差異を確認した。(FQDN、IPアドレス等は架空のものに修正）

- インターネット経由の場合：

```
C:\Users\mksamba>ping mksamba-web.aaa.com

mksamba-web.aaa.com [3.20.238.1]に ping を送信しています 32 バイトのデータ:
3.20.238.1 からの応答: バイト数 =32 時間 =250ms TTL=230
3.20.238.1 からの応答: バイト数 =32 時間 =180ms TTL=230
3.20.238.1 からの応答: バイト数 =32 時間 =265ms TTL=230
3.20.238.1 からの応答: バイト数 =32 時間 =207ms TTL=230

3.20.238.1 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 180ms、最大 = 265ms、平均 = 225ms
```

- Global Accelerator 経由の場合：

```
C:\Users\mksamba>ping mksamba-web-ga.aaa.com

mksamba-web-ga.aaa.com [13.245.141.1]に ping を送信しています 32 バイトのデータ:
13.245.141.1 からの応答: バイト数 =32 時間 =22ms TTL=115
13.245.141.1 からの応答: バイト数 =32 時間 =22ms TTL=115
13.245.141.1 からの応答: バイト数 =32 時間 =26ms TTL=115
13.245.141.1からの応答: バイト数 =32 時間 =24ms TTL=115

13.245.141.1 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 22ms、最大 = 26ms、平均 = 23ms
```
Global Acceleratorを使用した場合の詳細の経路は不明だが、AWSの高速なネットワークを通る区間が長いと想定されるため、今回の比較ではかなり高速になっている。

# ALBのアクセスログの確認
インターネット経由とGlobal Accelerator経由でhttpsアクセスした際のALBのアクセスログを確認する。（FQDN、IPアドレス等は架空のものに修正）

- インターネット経由のアクセス

```
h2 2019-04-08T15:01:32.267255Z app/mksamba-alb/9a10856600279c13 100.100.100.1:58554 10.0.0.14:80 0.001 0.000 0.000 304 304 1426 102 "GET https://mksamba-web.aaa.com:443/ HTTP/2.0"
```
インターネット経由のアクセスの場合は、アクセス元のSRCIP(ここでは100.100.100/1)がログに記録される。

- Global Accelerator経由のアクセス

```
h2 2019-04-08T15:01:41.921439Z app/mksamba-alb/9a10856600279c13 13.245.98.3:39591 10.0.0.14:80 0.001 0.001 0.000 304 304 1429 102 "GET https://mksamba-web-ga.aaa.kddi.com:443/ HTTP/2.0"
```
Global Accelerator経由のアクセスの場合は、Global Accelerator用にAWSが持っていると思われるアドレス(ここでは13.248.98.3)がログに保存される。アクセス元のSRCIPはALB側では分からない。

# まとめ
- Global Acceleratorを使えば、クライアント側からFQDNではなく、IP指定でALBにアクセスすることは可能。
- ただし、Global Accelerator経由でアクセスされた場合、ALB側で実際のアクセス元のIPが分からない。そのためIPアドレスレンジでのアクセス制限をかけることができない。（2019/4時点での仕様）

# 参考にした記事
[Application Load Balancer のアクセスログ]
(https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-access-logs.html)
[Global Acceleratorを使ってALBを固定IP化する #reinvent](https://dev.classmethod.jp/cloud/reinvent-2018-global-accelerator-alb/)