株式会社ビッグツリーテクノロジー&コンサルティングは、2025年1月1日をもってキャップジェミニ株式会社に統合されます。
統合後のウェブサイトはこちらをご覧ください。
column

コラム

AWSのその構成、一緒に見直してみませんか vol.1

  • TAG

    AWS vpc
  • UPDATE

    2023/01/15

はじめに

こんにちは、株式会社ビッグツリーテクノロジー&コンサルティング(BTC)の熊谷です。
本ブログは、Japan AWS Ambassador Advent Calendar 2022の15日目の記事となります。

私は仕事柄、お客様や私の同僚が作成した基本設計書やAWS構成図のレビューをする機会を多く頂きます。

今回の記事では、今年20システム以上のAWS構成をチェックした中で
お客様にご説明する機会が何度かあった3つのことについて触れたいと思います。

  • 初めてAWSを使ってシステム構成を検討する方
  • レビューを引き受ける立場にある方
  • 事業者さんが作るシステムの構成をチェックするユーザー企業のIT担当者の方

の参考になれば幸いです。

ALBとEC2が同じPublic Subnetに居る

Webサイト用のシステムを構築する場合、ロードバランサーとしてApplication Load Balancer(ALB)を利用し、WebサーバーとしてEC2もしくはECS等のコンピューティングサービスを組み合わせることが多いかと思います。

このとき、VPC内を複数のサブネットに分割して、それぞれのサブネットにALBEC2等を配置することになります。

インターネットからアクセス可能なサブネットはパブリックサブネットといい、インターネットからのアクセスを遮断するサブネットをプライベートサブネットと言います。

特に制約がない限り、ALBパブリックサブネットに配置し、EC2等のコンピューティングサービスをプライベートサブネットに配置することで、意図しないインターネットからのアクセスを防ぐことが出来ます。
仮にEC2のSecurity Group等の設定にミスがあり誰でもアクセス可能な状態になってしまっていたとしても、プライベートサブネットに配置していればインターネットからのアクセスはブロックできます。

AWS Well-Architected Framework セキュリティの柱 インフラストラクチャの保護の中の「SEC05-BP02 すべてのレイヤーでトラフィックを制御する」でもこのように記載されています。

引用:AWS Well-Architected Framework セキュリティの柱 インフラストラクチャの保護 SEC05-BP02 すべてのレイヤーでトラフィックを制御する

名前解決の為にNLBでIPの固定が必要?

ALBEC2という構成の前段に、Network Load Balancer(NLB)Global Acceleratorを配置する設計をされていたお客様が複数いらっしゃいました。

お客様は、お客様自身で管轄する会社ドメインをオンプレミスのDNSサーバーで管理していました。

お話を聞くと、「オンプレミスのDNSサーバでAWSリソースの名前解決をするためには、AWSリソースのIPアドレスを固定しなければならないと思っていた」とのことでした。

確かにNLBはAWSのL4ロードバランサーで、AZ毎に1つの固定IPアドレスを持つことが出来ます。
そしてALBは固定IPを持つことが出来ません。

ですが、NLBALBもxxxxxxx.ap-northeast-1.elb.amazonaws.comという形式のDNSネームが発行されます。
そのため、インターネットからの通信を許す外部ロードバランサーとして利用する場合は、こちらのDNSネームで名前解決することが可能です。

DNSサーバに登録できるリソースレコードのタイプには、FQDNに対応するIPアドレスを応答するAレコード以外にも、CNAMEレコードとして上記のDNSネームを設定することになります。

つまり、オンプレミスのDNSを利用する場合でも、固定のIPアドレスを持たないALBによる名前解決の設定をすることが可能です。

もちろん、NLBを使ってIPアドレスを固定したいケースもあります。
オンプレミスからのアウトバウンド通信を特定のIPアドレスへのアクセスにのみ制御したいようなケースでは、NLBALB+コンピューティングサービスの前段に配置し、オンプレミスのファイアウォールでNLBのIPアドレスを指定することになります。

NAT Gatway vs VPCエンドポイント

VPCエンドポイントって使った方が良いの?というご質問も多く頂きました。

まずNAT GatewayVPCエンドポイントの話をする前に、VPC内のAWSサービスからVPCの外にあるAWSリソースへアクセスするパターンを整理しましょう。
大きく分けると4つのパターンがあります。

CloudWatchにログを配置するときも、EC2からS3にファイルをアップロードする際も、この4つのパターンのどれかの経路で行われます。

参考:「EC2からS3へアクセスする4つのルートとコスト」,NRI Netcom BLOG,佐々木拓郎,2021/09/24

今回は②・③・④について触れます。

②NAT Gatewayを経由するパターン

NAT Gatewayパブリックサブネットに配置していれば、プライベートサブネットに配置したAWSリソースから、VPCの外のAWSサービスにアクセスすることが出来ます。

NAT Gatewayは、インターネットへの通信を中継するサービスです。
プライベートサブネット内のAWSサービスのプライベートIPを、NAT Gatewayが持つパブリックIPアドレスにNAT(Network Address Translation:ネットワークアドレス変換)し、インターネットへの通信を出来るようにします。

NAT Gatewayを配置するだけでインターネット上のあらゆるサービスへ接続が出来ます。
コストを度外視すれば、この構成で十分かもしれません。

実際はセキュリティ・コストを加味して②NAT Gateway経由パターンに加えて、③・④のVPC Endpointを併用するパターンが多いです。

VPC Endpointを利用すると、インターネットを介さずにVPC内のAWSリソースとVPC外のAWSサービスとの通信が出来るようになります。
VPC EndpointにはGateway型とInterface型があります。

③VPC Endpoint(Gateway型)パターン

VPC Endpoint(Gateway型)を使うと、DynamoDBS3の2つのサービスに対して、Internet Gatewayに接続することなくプライベートな接続ができるようになります。

このVPC Endpoint(Gateway型)は重要です。
弊社宮國のブログを読んでいただけるとわかるのですが、NAT Gatewayは1台あたりの利用料金に加えて処理データ量に応じた従量課金が加算されます。

NAT Gatewayのコスト分析で、S3ゲートウェイエンドポイントのありがたさに気づいた | BTC Cloud (bigtreetc.com)

S3へのデータ転送量が多ければ多いほど、NAT Gatewayの利用料が嵩むことになります。
VPC Endpoint(Gateway型)は利用料金が無料なので、使わない手はありません。

VPC Endpoint(Gateway型)を使うことで、

  • EC2→NAT Gateway→S3

だった経路が

  • EC2→VPC Endpoint(Gateway型)→S3

となるので、
NAT Gatewayの処理データ量に対する課金の大半は削減できるということになります。

④VPC Endpoint(Interface型)パターン

VPC Endpoint(Gateway型)DynamoDBS3にのみ対応しているのでした。
一方、VPC Endpoint(Interface型)は150種類以上のAWSサービスに対応しています。

引用:AWS PrivateLink と統合できる AWS のサービス

VPC Endpoint(Interface型)は、AWSサービスごと、Availability ZoneごとにENIが作成されます。

処理データあたりの料金をNAT Gatewayと比較すると、1つあたりの利用料金も、処理データあたりの料金もVPC Endpoint(Interface型)の方が安いです。

上記の構成図のようにCloudWatch LogsSESを2AZに配置したEC2からアクセスしたい場合は2VPC Endpoint × 2ENIs × $0.014=$0.056/hourになります。
つまり、利用するAWSサービスが多ければ多いほど利用料が増えます。AZ冗長にする場合利用料は2倍です。

ではNAT Gatewayを使わずにVPC Endpoint(Interface型)のみを使う方に倒せるのかというと、そうではありません。

VPC Endpointはあくまで、VPC外のAWSサービスへのプライベート接続をするためのサービスです。
実際はパッチを適用したり、ウィルスパターン定義ファイルをダウンロードしたり、外部システムと通信をするようなケースでインターネットへ接続しなくてはならないと思います。

よって基本的にはNAT Gatewayは使いつつ、一部のAWSサービスについてはVPC Endpoint(Interface型)を使って接続することになります。

CloudWatch Logsに出力したいログに機密情報が含まれるため、ログをインターネット上に経由したくない、特定のVPCからの接続時のみKMSの鍵の利用を許可したい場合などにVPC Endpoint(Interface型)を利用することを検討しましょう。

まとめますと、

  • S3DynamoDBVPC Endpoint(Gateway型)は利用する前提で検討
  • NAT Gatewayを利用しつつ、VPC Endpoint(Interface型)はセキュリティやデータ処理量を加味して利用を検討

になります。

以上です。
皆様の参考になれば幸いです。

RECOMMEND

おすすめ記事一覧