- 有志勉強会第二回です。
- 前回は「AWSを始めるにあたって、押さえておきたいサービスやセキュリティの設定」というテーマでお話しましたが、今回は「EC2やコンテナが動いているAWSの基盤、ネットワークが何となく理解できる」をゴールにしたいと思います。
- Amazonの各サービスは世界各地の場所でホスティングされています。
- マネジメントコンソール上から、リージョンの選択ができます。
- 例えばEC2を構築する際、どこのリージョンを利用するかを選択する必要があります。
- リージョンはそれぞれ地理的に離れており、2022年12月現在、30ものリージョンがあります。
- 日本には東京(ap-northeast-1)、大阪(ap-northeast-3)リージョンがあります。
- 東京は2011年に開設し、大阪は2018年にローカルリージョンとして開設され、2021年3月にフルリージョンに昇格しました。
- ローカルリージョンはアベイラビリティゾーン(後述)を一つしか持たず、提供サービス数も制限されており、申請制でした。
- とは言っても大阪リージョンで使えない機能もまだ存在します。
- 例えばCodepipeline等。大阪だから東京と完全に同じように使える訳ではありません。
- DR戦略を検討する上では悩みの種だったりします。
- 各リージョンで提供されているサービスの一覧
- リージョンごとに存在する複数のデータセンター群を一つの論理的な管理単位としてまとめたものです。
- 東京リージョンの場合は
ap-northeast-1a
、ap-northeast-1c
、ap-northeast-1d
の3つのアベイラビリティゾーンで構築が可能です。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
- 以前、WikiLeaksがAmazonデータセンター所在地を暴露したそうです。
Amazon Virtual Private Cloud (Amazon VPC) では、ユーザー定義の仮想ネットワークで AWS リソースを起動できます。この仮想ネットワークはデータセンターで運用する従来のネットワークに非常によく似ており、AWS のスケーラブルなインフラストラクチャを利用できるという利点があります。
- AWS内のプライベートな仮想ネットワークです。
- アカウント作成時から利用できるデフォルトVPCも存在します。
- デフォルトVPCを使えばその中にすぐEC2を立てることができますが、注意が必要です。(後述)
- システムの種類でVPCを分けたり、環境別(本番環境とステージング環境)にVPCを分けたりします。
- AWSマネジメントコンソール - VPC
サブネットは、VPC 内の IP アドレスの範囲です。VPC を作成したら、各アベイラビリティーゾーンに 1 つ以上のサブネットを追加できます。
- プライベートサブネットとパブリックサブネットが存在します。
- パブリックサブネット
- インターネットゲートウェイ(IGW)経由でVPCの外部と通信ができます。※IGWについては後述します。
- 例えば踏み台サーバ(Webサーバにログインする為に中継するサーバ)やロードバランサ等、外部からのアクセスを許可するリソースを配置したりします。
- プライベートサブネット
- インターネットやVPC外からのアクセスが出来ない(=インターネットゲートウェイに関連付けられていない)状態です。
- 例えばWeb・DBサーバ等、外部からの直接アクセスを許可しないリソースを配置したりします。
- パブリックサブネットかプライベートサブネットかは「サブネット > ルートテーブル」を確認した際にIGWに関連付けがあるかどうかで判別が可能です。
- AWSマネジメントコンソール - サブネット
今回紹介するのはインターネットゲートウェイとNATゲートウェイです。
https://ryonotes.com/difference-between-internet-gateway-and-nat-gateway/
インターネットゲートウェイは、VPC とインターネット間の通信を可能にする、水平に拡張され、冗長性と可用性に優れた VPC コンポーネントです。
-
VPC をインターネットに接続する仮想ルーターです。
-
パブリックサブネット内のインスタンスが外部(インターネット)と通信する際はこちらを経由します。
- 例えばパブリックIPアドレスを持つ踏み台サーバに、手元のPCから直接SSHで接続をする場合、IGWを経由しているという事になります。
- 踏み台サーバ(EC2)を構築する場合は「パブリックIPアドレスの自動割り当てをONに設定」するか「Elastic IP(固定IP)を割り当て」し、IPv4のインターネット経由の通信を有効にする必要があります。
ネットワークアドレス変換 (NAT) ゲートウェイを使用して、プライベートサブネットのインスタンスが VPC 外のサービスに接続できるようにしながら、そのような外部サービスがこれらのインスタンスとの接続を開始しないようにすることができます。
- 各アベイラビリティーゾーンのパブリックサブネットに紐づくゲートウェイで、プライベートサブネット内のインスタンスが外部(インターネット)と通信する際はこちらを経由します。
- 通信を受けたNATゲートウェイはVPC外への通信なのでインターネットゲートウェイ経由で通信を行います。
- AWSマネジメントコンソール - NATゲートウェイ
https://and-engineer.com/articles/YNAgFhMAAPVEJWdD#heading3-2
ルートテーブルには、サブネットまたはゲートウェイからのネットワークトラフィックがルーティングされる場所を決定するために使用される、ルートと呼ばれる一連のルールが含まれます。
- ルーティングに利用されるためのルールが記載されているテーブル、とまずは理解頂くと良いと思います
- パブリックサブネット用のルートテーブル
- 「送信先 0.0.0.0/0」/「ターゲット igw-XXXXXXXXX」
- サブネットからインターネットゲートウェイ経由でのインターネットアクセスが可能という意味です。
- プライベートサブネット用のルートテーブル
- 「送信先 0.0.0.0/0」/「ターゲット nat-XXXXXXXXX」
- サブネットからNATゲートウェイ経由でのインターネットアクセスが可能という意味です
- AWSマネジメントコンソール - ルートテーブル
セキュリティグループは、1 つ以上のインスタンスのトラフィックをコントロールする仮想ファイアウォールとして機能します。インスタンスを起動するときに、1 つ以上のセキュリティグループを指定できます。セキュリティグループのルールはいつでも変更できます。
- インスタンス単位(ALB、EC2、RDS)で設定するファイアウォール機能です。
- インバウンドルールとアウトバウンドルールが存在します。
- ホワイトリスト形式で、許可していないプロトコル・ポートの通信は拒否されます。
- 「許可するプロトコル」「許可するポートの範囲」などをIP、セキュリティグループ別で指定できます。
- 例えば、Webサーバのインバウンドルールの例だと
- 80番(HTTP)はALBからのセキュリティグループからのアクセスを許可する
- 22番(SSH)ポートへのアクセスは特定のIPからのみ許可する など。
ネットワークアクセスコントロールリスト (ACL) は、VPC 向けのセキュリティのオプションレイヤーで、1 つ以上のサブネットに出入りするトラフィックを制御するファイアウォールとして機能します。
- サブネット単位で設定するファイアウォール機能です。
- ブラックリスト形式で、定義した通信のみを拒否する形となっています。
- 例えば特定IPアドレスからのアクセスを制限する など。
- AWSマネジメントコンソール - ネットワークACL
- 最終的に「ネットワークACLで許可」かつ「セキュリティグループで許可」で初めてインスタンスへのアクセスが可能となります。
- デフォルトVPCにはパブリックなサブネットしか用意されていない&セキュリティグループのインバウンドが全許可の為、注意が必要です。
- 例えばデフォルトVPCのパブリックサブネットにEC2を立て、デフォルトのセキュリティグループを設定した場合「EC2のパブリックIPアドレスさえ知っていれば、誰でも対象のEC2のどのポートにもアクセスできる」という状態です。
- 機密性の高くないインスタンスを立てたりするといった用途や、セキュリティグループでアクセス許可の範囲を絞る等の調整した上で利用すると良いのかなと思います。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/what-is-amazon-vpc.html
- その他紹介しきれなかったサービスも多々ありますが、この辺りを抑えて頂くとロードバランサ・Webサーバ・DBサーバの立ち位置が見えてくると思います。