Welcome

AWS Network Study AWSネットワークの学習用設計

学習用設計 / AWS・Terraform

社内ネットワークとAWSの考え方を比べる学習用設計

かんたんに言うと会社の中に作るネットワークと、AWS(Amazon Web Services/インターネット経由で借りるサーバーやネットワークのサービス)で作るネットワークを、同じ考え方で並べて整理した学習ノートです。設計図とコードは書きましたが、AWS上に実際の環境はまだ作っていません。

AWS上でネットワークを分け、接続できる範囲を制限する方法を学ぶための設計例です。設定内容はTerraform(サーバーやネットワークの構成を設定ファイルに書き残し、その通りに作れるようにする道具)で記録しています。書式と構文が正しいことは自動テストで確認しています。

確認できたのは設計とコードの構文までです。AWS上に環境を作る作業は未実施です。

AWS環境の作成・削除、実際の通信確認、利用料金の確認はまだ行っていません。料金が発生するEC2(AWSで借りる仮想サーバー)、NAT Gateway(内側から外へ通信を出すための中継サービス)、Elastic IP(固定の外向けIPアドレス)は作成対象から外しています。このページは構築済みAWS環境の実績ではありません。

AWS VPC 通信制限 Terraform 料金対策
学習用のAWSネットワーク構成

かんたんに言うと下の図は、AWSの中にネットワークを1つ用意し、その中を2つの区画に分けた形です。上の区画はインターネットとつながる場所、下の区画はつながらない場所です。外から中へ入るときは、必ず入口用のサーバーを1台だけ経由します。

graph TD Internet((Internet)) --> IGW[Internet Gateway] IGW --> PublicRoute[Public Route Table] subgraph VPC[VPC: 10.20.0.0/16] PublicRoute --> PublicSubnet subgraph PublicSubnet[Public Subnet: 10.20.10.0/24] Bastion[Bastion / NAT] end subgraph PrivateSubnet[Private Subnet: 10.20.20.0/24] AppServer[App Server] DB[Database] end Bastion -- SSH / Admin --> AppServer Bastion -- SSH / Admin --> DB end subgraph SecurityGroups[Security Groups] BastionSG[Bastion SG: Allow SSH from Admin CIDR] PrivateSG[Private SG: Allow from Bastion SG] end
AWSネットワークの学習用構成図。AWS上へ実際に作成した構成ではありません(クリックで拡大できます)。

図の中の英語表記は次の意味です。Internet Gatewayは、AWSのネットワークとインターネットをつなぐ出入口です。Route Tableは、通信をどこへ流すかを決める行き先の表です。Subnetは、ネットワークを区切った小さな区画です。Bastionは、外から中へ入るときだけ通る踏み台サーバーです。Security Groupは、サーバーごとの通信許可ルールです。SSHは、離れた場所からサーバーを文字で操作する通信です。Admin CIDRは、管理者が使うIPアドレスの範囲を指します。

10.20.0.0/16のような表記は、使えるIPアドレスの範囲を表します。斜線の後ろの数字が小さいほど範囲は広く、/16/24より広い範囲を指します。

AWSネットワークの設計例
AWSネットワークの学習用設計値と確認ポイント
要素 設計値 社内ネットワークで近いもの 確認すること
VPC
AWS上のネットワーク全体
10.20.0.0/16 拠点やデータセンター全体のネットワーク 将来の拡張に備え、ほかの拠点やVPN(拠点同士を安全につなぐ通信)とIPアドレスの範囲が重ならないようにします。重なると通信の行き先が定まらなくなるためです。
Public Subnet
外部接続用の領域
10.20.10.0/24 外部公開用または管理用のネットワーク インターネットへの経路を持たせます。SSH接続は管理者が使うIPアドレスの範囲だけに制限します。
Private Subnet
外部へ直接公開しない領域
10.20.20.0/24 社内サーバー用のネットワーク インターネットへ直接公開せず、管理用の入口を経由した必要な通信だけを許可します。
Security Group
サーバーごとの通信許可ルール
管理用とアプリ用のルールを分ける ファイアウォールの許可ルール 管理用サーバーからの通信だけを許可し、ほかのサーバーへ意図せず接続できる状態を防ぎます。
Terraform
構成をコードで記録する仕組み
cloud-lab/terraform/ 構成管理の記録 / 変更点の一覧 fmtinit -backend=falsevalidateを自動テストで確認しています。AWS上での作成確認ではありません。
コード確認・安全・料金への配慮

かんたんに言うとこの節は、AWSに実際に作る前の自己点検の内容です。コードの書き方が正しいかを確かめること、誰でも接続できる設定を避けること、料金が発生するものは作らないことの3点をまとめています。あわせて、実務環境ではさらに何が必要かも並べています。

変更前の確認(AWSに作る前のコード点検)

  • terraform fmt -checkでコードの書式を確認します。
  • terraform init -backend=falseで、AWSを操作するための部品(プロバイダ)を取り込み、初期化できることを確認します。-backend=falseは、状態を保存する外部の置き場所に接続せずに確認するための指定です。
  • terraform validateで、書き方の誤りと、設定同士の参照(あるまとまりが別のまとまりを正しく指しているか)を確認します。AWSに実際に作る前の段階で、コードの誤りに気づけたと言えます。

セキュリティ

  • SSH接続は管理者が使うIPアドレスの範囲だけに限定し、誰でも接続できる設定(0.0.0.0/0=すべてのIPアドレスを表す書き方)を禁止します。世界中の見知らぬ相手から接続を試される状態を防ぐためです。
  • 外部へ直接公開しない領域は、管理用の入口から必要な通信だけを許可します。
  • 実務では、会社で指定された安全な接続方法(SSM Session Manager、VPNなど)を優先します。SSM Session Managerは、SSH用の入口を開けずにAWSの管理画面経由でサーバーを操作できる仕組みです。開ける入口を減らせるため、より安全に運用できます。

コスト

  • この学習用設計では、料金が発生するEC2、NAT Gateway、Elastic IPを作りません。
  • 将来これらを作成する場合は、予算の通知と削除手順を先に用意します。消し忘れによって料金が増え続けることを防ぐためです。
  • 検証用に作ったもの(サーバーやネットワークなど)には、目的と環境が分かるタグ(名前付きの目印)を付ける想定です。あとから見たときに、消してよいものを見分けられるようにするためです。

実務環境で追加するもの(未実施)

  • 操作記録、通信ログ、異常検知の仕組みを追加します(CloudTrail、VPC Flow Logsなど)。CloudTrailは「誰がAWSで何を操作したか」を、VPC Flow Logsは「どの通信が行き来したか」を残す機能です。問題が起きたときに原因をたどれるようにするためです。
  • 異常を知らせる通知と、通知を受けたあとの対応手順を対応させておきます。通知だけが届いて、誰も次に何をすればよいか分からない状態を防ぐためです。
  • バックアップを設定し、定期的に復元できるかを確認します。