AWS Global Acceleratorのネットワーク・セキュリティ設計のために考えるべきこと

AWS Global Accelerator利用時にアプリケーションへセキュアに通信する方法について、エンドポイントごとにまとめてみた。
2020.10.06

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

AWSにはGlobal AcceleratorというGSLB(グローバルサーバロードバラシング)サービスがあり、アプリケーションの可用性とパフォーマンスをグローバルに改善することができます。

アプリケーション(エンドポイント)には

  • アプリケーションロードバランサー(ALB)
  • ネットワークロードバランサー(NLB)
  • EC2
  • EIP

を指定できます。

本エントリーでは、AWS Global Accelerator利用時にアプリケーションへセキュアに通信する方法について、エンドポイントごとに解説します。

AWS Global Acceleratorとセキュアに通信するには?

エンドポイントにALBを指定した場合の一般的な構成例が下図です。

※ 図は Accessing private Application Load Balancers and EC2 instances through AWS Global Accelerator | Networking & Content Delivery から引用

  • AWS Global Accelerator
  • AWS Global Accelerator 用の ENI
  • アプリケーション(構成図ではALB以下)
  • Internet Gateway

といったコンポーネントがあります。

セキュアにネットワーク設計する上で重要なポイントを個別に述べます。

クライアントIPアドレスベースのアクセス制限

エンドポイントが

  • EC2
  • internal ALB
  • (オプトインでIPアドレス保持)internet-facing ALB

の場合、クライアントの送信元IPアドレスでエンドポイントにアクセスできます。

オプトインでIPアドレス保持した場合、Global Acceleratorは専用のENI(elastic network interface)とセキュリティグループを作成します。 このENI・セキュリティグループを利用したアクセス制限方法は後ほど解説します。

ALB 配下のアプリケーションにはリクエストヘッダー X-Forwarded-For が渡ります。

参考 : Preserve client IP addresses in AWS Global Accelerator - AWS Global Accelerator

セキュリティグループやAWS WAF等を利用し、クライアントのIPアドレスでフィルターすることができます。

IPアドレスを保持しない場合、AWS Global AcceleratorエッジサーバーのIPアドレスでアクセスします。IPレンジの更新頻度についての記載はありませんが、エッジの性質上、高頻度で変更するものと思われます。

Global Accelerator 用 ENI/セキュリティグループを利用したアクセス制限

クライアントのIPアドレス保持をするために、Global Acceleratorは「GlobalAccelerator」という名前のセキュリティグループがアタッチされた ENI(elastic network interface)を作成します。

Global Accelerator関連のトラフィックは、ヘルスチェックを含めてこのENIを経由するため、エンドポイントへの通信をGlobal Acceleratorに制限したい場合に利用できます。

ドキュメントから引用します。

Even if the elastic network interfaces of your targets are present in a public subnet (that is, a subnet with an internet gateway route), when you use Global Accelerator for internet traffic, Global Accelerator overrides the typical internet route and all logical connections that arrive through the Global Accelerator also return through Global Accelerator rather than through the internet gateway. ... Security groups apply to any traffic that arrives to your instances, including traffic from Global Accelerator and any public or Elastic IP address that is assigned to your instance ENI. Use private subnets to ensure that traffic is delivered only by Global Accelerator.

注意点としては、Global AcceleratorのENIにアタッチされているセキュリティグループのインバウンドルールを変更してもクライアントのアクセス制限には使えません。

そもそも、このセキュリティグループは一切編集しないようにドキュメントに明記されています。 ドキュメントから引用します。

Global Accelerator creates security groups that are associated with its elastic network interfaces. Although the system doesn't prevent you from doing so, you shouldn't edit any of the security group settings for these groups.

ALB/EC2はパブリックIPアドレス不要

エンドポイントがALB/EC2の場合、パブリックIPアドレスは不要です。

プライベートサブネットにエンドポイントをプロビジョンしても、上述のENI経由で AWS Global Accelerator と通信できます。

オリジンクローキングできるため、インターネットからの攻撃を軽減する事ができます。

ドキュメントから引用します。

When you add an internal Application Load Balancer or an Amazon EC2 instance endpoint in AWS Global Accelerator, you enable internet traffic to flow directly to and from the endpoint in Virtual Private Clouds (VPCs) by targeting it in a private subnet. The VPC that contains the load balancer or EC2 instance must have an internet gateway attached to it, to indicate that the VPC accepts internet traffic. However, you don't need public IP addresses on the load balancer or EC2 instance. You also don't need an associated internet gateway route for the subnet.

ヘルスチェックの違いに注意

Global Acceleratorはエンドポイントをヘルスチェックします。

エンドポイントが ALB/NLB の場合、Global AcceleratorはこれらLBのヘルスステータスを利用します。

エンドポイントが EC2/EIP の場合、Global AcceleratorはAmazon Route 53でヘルスチェックします。 そのため、EC2/EIP 型 エンドポイントには Route 53 ヘルスチェックサービスからのトラフィックを許可する必要があります。

ドキュメントから引用します。

Global Accelerator requires your router and firewall rules to allow inbound traffic from the IP addresses associated with Route 53 health checkers to complete health checks for EC2 instance or Elastic IP address endpoints. You can find information about the IP address ranges associated with Amazon Route 53 health checkers in Health Checks for Your Target Groups in the Amazon Route 53 Developer Guide.

AWS は各サービスが利用するIPアドレス範囲を公開しています。 Route 53 ヘルスチェックの場合、サービス名は ROUTE53_HEALTHCHECKS です。

次の Wireshark のキャプチャーはエンドポイントにEC2インスタンス(プライベートIP:172.31.32.171)の80ポートを指定した際のヘルスチェックパケットです。

ソースのIPアドレス「15.177.38.19」をAWSのIPレンジと突合すると、確かに ROUTE53_HEALTHCHECKS の範囲内でした。

ip-ranges.json

    ...
    {
      "ip_prefix": "15.177.0.0/18",
      "region": "GLOBAL",
      "service": "ROUTE53_HEALTHCHECKS",
      "network_border_group": "GLOBAL"
    },
    ...

ドキュメントによると、IPレンジはまれにしか変更されず、変更がある場合も、事前に通知されるため、ホワイトリストとして活用しやすいです。

We rarely change the IP addresses of name servers; if we need to change IP addresses, we'll notify you in advance.

エンドポイント毎の制約一覧

エンドポイント アクセス ヘルスチェック IP保持 ENI・セキュリティグループ作成
ALB パブリック・プライベート LB→ターゲット △(※) △(※)
NLB パブリックのみ LB→ターゲット x x
EC2 パブリック・プライベート Route53→エンドポイント
EIP パブリックのみ Route53→エンドポイント x x

※internal ALBは「○」に。internet facing ALBの場合、エンドポイント作成時に選択

エンドポイント別ネットワーク設計

以上を踏まえて、Global Accelerator - エンドポイント間の通信をセキュアにする方法について、エンドポイント毎に解説します。

ALB エンドポイントの場合

ALBエンドポイントの特徴は次の通りです。

  • internet facing/internalの両方に対応 → internal でよりセキュアに。
  • LBのヘルスチェックを利用
  • IP保持できる(internet facingの場合はオプトイン) → 保持すること

Global Accelerator からのアクセスに制限

ALB へのアクセスを Global Accelerator のみに制限したい場合、ALB のセキュリティグループのインバウンドルールのソースに Global Accelerator ENI のセキュリティグループを指定します。

特定のIPレンジからのアクセスに制限

アプリケーションを特定のIPレンジでのみ公開したい場合

  • Global AcceleratorのIP保存を有効化し
  • ALB以下のコンポーネントでアクセス制限をかけます。

例えば、ALB セキュリティグループのインバウンドルールのソースにおいて、クライアントのIPレンジを指定します。

internet facing な ALB にこのようなセキュリティグループを設定すると、Global Acceleratorを経由せずにALBへ直接通信できてしまいます。 インターナルALBを検討しましょう。

セキュリティグループの代わりに AWF WAF やALBのターゲットでアクセス制限したり、ALB のターゲットでリクエストヘッダー(X-Forwarded-For)を利用してアクセス制限することも可能です。

NLB エンドポイントの場合

NLBエンドポイントの特徴は次の通りです。

  • internet facingのみに対応
  • LBのヘルスチェックを利用
  • IP保持できない

Global Accelerator からのアクセスに制限

エンドポイントにはAWS Global Acceleratorエッジサーバーの公開されているIPレンジでアクセスします。

Location and IP address ranges of Global Accelerator edge servers - AWS Global Accelerator

NLB のターゲットが EC2 であれば EC2のセキュリティグループのインバウンドルールで制限をかけることも可能です。

ただし、Route 53 ヘルスチェックのように、変更が稀と明記されているわけでも、変更告知があるわけでもありません。定期的にIPレンジを更新しましょう。

特定のIPレンジからのアクセスに制限

IP保持できないので、実現できません。

EC2 エンドポイントの場合

EC2エンドポイントの特徴は次の通りです。

  • パブリック・プライベートサブネットの両方に対応
  • route53 からヘルスチェック
  • IP保持できる

Global Accelerator からのアクセスに制限

通常のリクエストも、ヘルスチェックも、Global AcceleratorのENIを経由します。

EC2 のセキュリティグループのインバウンドルールのソースに Global Accelerator ENI のセキュリティグループを指定します。

特定のIPレンジからのアクセスに制限

EC2エンドポイントの場合、EC2にはクライアントのIPアドレスでアクセスします。更には、ALB と異なり、ヘルスチェック用のアクセスも考慮する必要があります。

EC2 のセキュリティグループのインバウンドルールのソースで

  • Route 53 health check のIP範囲
  • クライアントのIP範囲

を指定します。

Elastic IP エンドポイントの場合

EIPエンドポイントの特徴は次の通りです。

  • route53 からヘルスチェック
  • IP保持できない

Global Accelerator からのアクセスに制限

EIP を利用しているコンポーネントで

  • Global AcceleratorのIP範囲
  • Route 53 health check のIP範囲

からの通信を許可します。

特定のIPレンジからのアクセスに制限

IP保持できないので、実現できません。

まとめ

AWS Global Acceleratorでエンドポイントへのアクセスをセキュアにする方法を紹介しました。

セキュアにネットワーク設計する上で重要なポイントを再掲します。

クライアントIP保持

  • ALB/EC2エンドポイントはクライアントIP保持に対応
  • これらエンドポイントはクライアントのIPによってアクセス制限をかけることも可能
  • EC2エンドポイントの場合、ヘルスチェック用のアクセスも許可する必要がある点に注意
  • IP保持すると、Global Accelerator専用のENI/セキュリティグループが作成されるため、Global Acceleratorからの通信に制限しやすい

パブリック・プライベートアクセス

  • NLB/EIP はパブリックIPアドレスが必要
  • ALB/EC2 はパブリック・プライベートの両方で利用可能

ヘルスチェック

  • Global Acceleratorはエンドポイントのヘルスチェックが必要
  • エンドポイントがALB/NLBの場合、LBのヘルスチェックをそのまま利用
  • エンドポイントがEC2/EIPの場合、ヘルスチェック用の通信を行う

エンドポイントから捉えると

ALB/EC2

  • プライベートサブネットにアプリをデプロイ
  • Global Accelerator用ENI・セキュリティグループを利用し、Global Acceleratorとの通信をセキュアに行える
  • クライアントのIPレンジでアクセス制限することも可能
  • EC2にはRotue 53からヘルスチェックあり

NLB/EIP

  • パブリックサブネットにアプリをデプロイ
  • Global AcceleratorエッジのIPレンジでアクセス制限することも可能。IPレンジの変更には随時追従すること。
  • EIPにはRotue 53からヘルスチェックあり

それでは。

参考