AWS VPCのネットワーク設計入門|サブネット・セキュリティグループの実践構成

kento_morota 15分で読めます
社内のAI・IT活用、技術がわかる相手に無料相談。 相談 →
目次

AWSでシステムを構築する際、最初に設計しなければならないのがネットワークです。VPC(Virtual Private Cloud)の設計を間違えると、後からの修正に膨大な工数がかかります。

この記事では、AWS VPCの基本概念からサブネット設計、セキュリティグループの設定、そして実践的なネットワーク構成パターンまでを体系的に解説します。IT担当者やインフラエンジニアが、自社のAWS環境を安全かつ効率的に設計するための実践ガイドです。

AWS VPCとは?ネットワーク設計の基本を理解する

AWS VPC(Virtual Private Cloud)は、AWS上に作成する仮想的なプライベートネットワークです。オンプレミスのデータセンターでネットワークを構築するのと同じように、IPアドレス範囲の決定、サブネットの作成、ルーティングの設定、セキュリティの制御を行います。

VPCを使う最大のメリットは、論理的に隔離されたネットワーク空間を持てることです。他のAWSアカウントのネットワークとは完全に分離されているため、自社のリソースを安全に運用できます。

VPCの基本構成要素

VPCを理解するために、まずは基本構成要素を押さえましょう。

構成要素 役割 設定例
VPC 仮想ネットワークの最上位コンテナ 10.0.0.0/16
サブネット VPC内のIPアドレス範囲の区分 10.0.1.0/24
インターネットゲートウェイ VPCとインターネットの接続点 VPCに1つ
NATゲートウェイ プライベートサブネットからの外部通信 パブリックサブネットに配置
ルートテーブル ネットワークトラフィックの経路制御 サブネットごとに設定
セキュリティグループ インスタンスレベルのファイアウォール インバウンド/アウトバウンドルール
ネットワークACL サブネットレベルのファイアウォール 許可/拒否ルール

CIDRブロックの基礎知識

VPCを作成する際に最初に決めるのがCIDRブロック(Classless Inter-Domain Routing)です。CIDRブロックはVPC全体で使えるIPアドレスの範囲を定義します。

例えば10.0.0.0/16を指定すると、10.0.0.0から10.0.255.255までの65,536個のIPアドレスが使えます。/16の数字が大きいほど使えるIPアドレスは少なくなります。

  • /16:65,536アドレス(推奨:大規模システム)
  • /20:4,096アドレス(中規模システム)
  • /24:256アドレス(小規模システム)

重要なポイントとして、VPCのCIDRブロックは後から拡張は可能ですが、縮小はできません。また、オンプレミスネットワークや他のVPCとの接続を将来的に考えている場合は、IPアドレス範囲が重複しないように設計する必要があります。

サブネット設計のベストプラクティス

サブネットはVPCを論理的に区分する単位です。適切なサブネット設計は、セキュリティと運用効率の両面で重要です。

パブリックサブネットとプライベートサブネット

AWSのサブネットは、大きく2種類に分けられます。

パブリックサブネットは、インターネットゲートウェイへのルートを持つサブネットです。Webサーバーやロードバランサー(ALB)など、インターネットからアクセスされるリソースを配置します。

プライベートサブネットは、インターネットへの直接ルートを持たないサブネットです。データベースサーバーやアプリケーションサーバーなど、外部から直接アクセスさせたくないリソースを配置します。

プライベートサブネット内のリソースが外部APIの呼び出しやパッケージのダウンロードなど、インターネットへのアウトバウンド通信が必要な場合はNATゲートウェイを経由させます。

マルチAZ構成によるサブネット分割

AWSの各リージョンには複数のアベイラビリティゾーン(AZ)があります。高可用性を実現するために、最低2つのAZにまたがるサブネット構成が推奨されます。

東京リージョン(ap-northeast-1)での典型的なサブネット設計例を示します。

VPC: 10.0.0.0/16

パブリックサブネット(AZ-a): 10.0.1.0/24  → ALB, NAT Gateway
パブリックサブネット(AZ-c): 10.0.2.0/24  → ALB

プライベートサブネット - App(AZ-a): 10.0.11.0/24  → EC2, ECS
プライベートサブネット - App(AZ-c): 10.0.12.0/24  → EC2, ECS

プライベートサブネット - DB(AZ-a): 10.0.21.0/24  → RDS Primary
プライベートサブネット - DB(AZ-c): 10.0.22.0/24  → RDS Standby

このように用途(パブリック / アプリケーション / データベース)とAZの組み合わせで分割することで、障害時の影響範囲を限定しつつ、セキュリティレイヤーを明確に分離できます。

セキュリティグループの設計と実践ルール

セキュリティグループは、EC2インスタンスやRDSなどのリソースに対する仮想ファイアウォールです。インバウンド(受信)とアウトバウンド(送信)のトラフィックを制御します。

セキュリティグループの基本ルール

セキュリティグループには以下の特徴があります。

  • ステートフル:許可したインバウンド通信の戻りトラフィックは自動で許可される
  • 許可ルールのみ:明示的な拒否ルールは設定できない(デフォルトで全拒否)
  • 複数アタッチ可能:1つのリソースに複数のセキュリティグループを付与できる
  • セキュリティグループ間参照:送信元にIPアドレスではなくセキュリティグループIDを指定可能

レイヤー別セキュリティグループ設計

3層アーキテクチャの場合、以下のようなセキュリティグループ設計が推奨されます。

ALB用セキュリティグループ(sg-alb):

方向 プロトコル ポート 送信元/送信先
インバウンド HTTPS 443 0.0.0.0/0
インバウンド HTTP 80 0.0.0.0/0
アウトバウンド TCP 8080 sg-app

アプリケーション用セキュリティグループ(sg-app):

方向 プロトコル ポート 送信元/送信先
インバウンド TCP 8080 sg-alb
アウトバウンド TCP 3306 sg-db
アウトバウンド HTTPS 443 0.0.0.0/0

データベース用セキュリティグループ(sg-db):

方向 プロトコル ポート 送信元/送信先
インバウンド TCP 3306 sg-app

ポイントは、送信元にIPアドレスではなくセキュリティグループIDを指定している点です。これにより、アプリケーションサーバーのIPアドレスが変わっても、セキュリティグループの設定を変更する必要がありません。

ネットワークACLとセキュリティグループの使い分け

AWSでは、ネットワークACL(NACL)セキュリティグループの2層でセキュリティを制御できます。両者の違いを正しく理解し、適切に使い分けることが重要です。

特性 セキュリティグループ ネットワークACL
適用レベル インスタンス(ENI) サブネット
ステート ステートフル ステートレス
ルール種別 許可のみ 許可と拒否
評価順序 すべてのルールを評価 番号順に評価(最初に一致したルール)
デフォルト すべて拒否 すべて許可

実践的な使い分けとしては、セキュリティグループをメインのファイアウォールとして使い、ネットワークACLは特定のIPアドレスからのアクセスを拒否する場合や、サブネット全体に対する追加の防御層として使うのが一般的です。

例えば、不正アクセスが検知された特定のIPアドレスをブロックしたい場合、ネットワークACLの拒否ルールが有効です。セキュリティグループでは拒否ルールを設定できないため、このようなケースではネットワークACLが必要になります。

NATゲートウェイとVPCエンドポイントの活用

プライベートサブネット内のリソースが外部と通信する方法には、NATゲートウェイとVPCエンドポイントがあります。コストとセキュリティの両面から、適切な選択が求められます。

NATゲートウェイの配置と冗長化

NATゲートウェイは、プライベートサブネット内のリソースがインターネットへアウトバウンド通信を行うために使います。パブリックサブネットに配置し、プライベートサブネットのルートテーブルからNATゲートウェイへのルートを設定します。

本番環境では各AZにNATゲートウェイを配置することが推奨されます。1つのAZにしか配置しない場合、そのAZに障害が発生すると他のAZのリソースも外部通信ができなくなります。

ただし、NATゲートウェイは時間課金とデータ転送量課金が発生するため、コストには注意が必要です。開発環境では1つのAZにのみ配置してコストを抑える、という判断も現実的です。コスト管理についてはAWS Cost Explorerでコスト可視化する方法も参考にしてください。

VPCエンドポイントでコスト削減

AWSサービス(S3、DynamoDB、CloudWatchなど)へのアクセスは、NATゲートウェイを経由する代わりにVPCエンドポイントを使うことで、データ転送コストを削減しつつセキュリティも向上させられます。

VPCエンドポイントには2種類あります。

  • ゲートウェイ型:S3とDynamoDBのみ対応。無料で利用可能
  • インターフェース型(PrivateLink):多くのAWSサービスに対応。時間課金あり

特にS3ゲートウェイエンドポイントは無料で使えるため、VPCを作成したら必ず設定しておくことをお勧めします。AWS S3の実践ガイドでS3の活用方法も確認しておくと良いでしょう。

実践的なVPCネットワーク構成パターン

ここでは、中小企業のWebサービス向けに実用的なVPC構成パターンを紹介します。

パターン1:シンプルなWebアプリケーション構成

小規模なWebアプリケーションに適した構成です。

インターネット
    │
    ▼
インターネットゲートウェイ
    │
    ▼
┌─パブリックサブネット──────┐
│  ALB (Application Load    │
│  Balancer)                │
│  NAT Gateway              │
└───────────────────────────┘
    │
    ▼
┌─プライベートサブネット(App)┐
│  ECS Fargate / EC2        │
│  (アプリケーション)         │
└───────────────────────────┘
    │
    ▼
┌─プライベートサブネット(DB)─┐
│  RDS (データベース)         │
│  ElastiCache              │
└───────────────────────────┘

この構成のポイントは以下の通りです。

  • ALBをパブリックサブネットに、アプリとDBをプライベートサブネットに配置
  • 各レイヤーをマルチAZで冗長化
  • セキュリティグループの連鎖参照で通信を制御

AWS ECS/Fargateの導入ガイドAWS RDSデータベースガイドと合わせて読むと、各コンポーネントの詳細設定も理解できます。

パターン2:マルチ環境(本番・ステージング・開発)構成

環境ごとにVPCを分離する構成です。

本番VPC:       10.0.0.0/16
ステージングVPC: 10.1.0.0/16
開発VPC:       10.2.0.0/16

各VPCはVPCピアリングまたはTransit Gatewayで接続します。環境ごとにVPCを分けることで、開発環境の設定ミスが本番環境に影響を与えるリスクを排除できます。

Transit Gatewayは複数VPCの接続を一元管理できるため、3つ以上のVPCを接続する場合はVPCピアリングよりも管理が容易です。

VPC設計をコード化して管理する

VPCの設計が完了したら、Infrastructure as Code(IaC)で構成をコード管理することを強く推奨します。手動でのコンソール操作は、設定の再現性が低く、ヒューマンエラーの原因にもなります。

TerraformによるVPC定義の例

Terraformの基礎を押さえた上で、VPCリソースの定義例を見てみましょう。

resource "aws_vpc" "main" {
  cidr_block           = "10.0.0.0/16"
  enable_dns_support   = true
  enable_dns_hostnames = true

  tags = {
    Name        = "main-vpc"
    Environment = "production"
  }
}

resource "aws_subnet" "public_a" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.1.0/24"
  availability_zone = "ap-northeast-1a"

  tags = {
    Name = "public-subnet-a"
    Type = "public"
  }
}

resource "aws_subnet" "private_app_a" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.11.0/24"
  availability_zone = "ap-northeast-1a"

  tags = {
    Name = "private-app-subnet-a"
    Type = "private"
  }
}

resource "aws_security_group" "app" {
  name_prefix = "app-sg-"
  vpc_id      = aws_vpc.main.id

  ingress {
    from_port       = 8080
    to_port         = 8080
    protocol        = "tcp"
    security_groups = [aws_security_group.alb.id]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

IaCでVPCを管理することで、環境の複製が容易になります。本番環境と同じ構成をステージング環境にもすぐに再現できるため、テスト環境の整備にかかる時間を大幅に短縮できます。

VPC設計で陥りがちなミスと対策

最後に、VPC設計でよくある失敗パターンとその対策をまとめます。

ミス1:CIDRブロックの設計不足

VPCのCIDRブロックを/24など小さく設定してしまい、後からリソースが増えた際にIPアドレスが不足するケースがあります。将来の拡張を見越して/16で確保しておくのが安全です。追加CIDRの割り当ても可能ですが、管理が複雑になります。

ミス2:セキュリティグループの過剰許可

開発時に0.0.0.0/0で全ポートを開放し、そのまま本番環境に持ち込んでしまうケースです。最小権限の原則に従い、必要なポートと送信元のみを許可してください。AWS IAMのベストプラクティスと同じ考え方がネットワークにも適用されます。

ミス3:単一AZ構成での運用

コスト削減のために単一AZで構成すると、AZ障害時にサービス全体が停止します。本番環境では必ずマルチAZ構成を採用しましょう。

ミス4:フローログの未設定

VPCフローログを有効にしていないと、ネットワークの問題が発生した際に原因調査ができません。フローログをCloudWatch LogsまたはS3に出力する設定は、VPC作成直後に必ず行うべきです。CloudWatchでの監視設定ガイドでログ活用の詳細を確認できます。

ミス5:DNS設定の見落とし

VPCのenableDnsSupportenableDnsHostnamesを有効にしていないと、プライベートホストゾーン(Route 53)やVPCエンドポイントが正しく機能しません。VPC作成時にこれらのオプションを必ず有効化してください。

まとめ:段階的にVPC設計を最適化しよう

AWS VPCのネットワーク設計は、システム全体の安全性と拡張性の土台となります。この記事で解説した内容を振り返ります。

  • CIDRブロックは余裕を持って設計し、将来の拡張に備える
  • サブネットはパブリック/プライベートを分離し、マルチAZで冗長化する
  • セキュリティグループは最小権限の原則で設計し、セキュリティグループ間参照を活用する
  • NATゲートウェイは本番環境でAZごとに配置し、VPCエンドポイントでコストを削減する
  • IaCで管理して再現性を確保する

まずは開発環境で小さなVPCを構築し、運用しながら設計を洗練させていくアプローチが現実的です。AWS Well-Architected Frameworkの設計原則も参照しながら、自社に最適なネットワーク構成を見つけてください。

#AWS#VPC#ネットワーク
ManageAI 先行モニター企業 募集中|先着5社・2026年11月末まで

生成AIの利用費、「誰が・何のために・いくら」まで見えていますか?

株式会社カイダンと共同開発したAI利用ガバナンスSaaS「ManageAI」は、OpenAI・Azure OpenAI・Claude・AWS Bedrock・Google Vertex AIの費用と利用状況を、部署・利用者・プロジェクト別に可視化します。導入は読み取り専用キーの登録だけ。初期費用0円・月額5万円(税別)で先行モニター企業を募集しています。

ニュースリリースを読む
共有:
無料メルマガ

週1回、最新の技術記事をお届け

AI・クラウド・開発の最新記事を毎週月曜にメールでお届けします。登録は無料、いつでも解除できます。

プライバシーポリシーに基づき管理します

関連記事

Related / 9 articles

  1. プログラミング

    DDoS攻撃の仕組みと対策入門|レイヤー別の防御とCDN・クラウドの活用

    DDoS攻撃をボリューム型・プロトコル型・アプリ層に分けて仕組みを解説し、自前サーバーで防げない理由、CloudflareやAWS Shieldの標準防御、オリジンIPの隠し方、レートリミットとBot対策、攻撃を受けたときの初動、費用が跳ね上がるDenial of Walletへの備えまでわかります。

  2. プログラミング

    WAFとは?仕組み・導入パターン・誤検知対策|Webアプリを攻撃から守る実践ガイド

    WAFがファイアウォールやIDSと何が違うのか、シグネチャとマネージドルールの仕組み、Cloudflare WAF・AWS WAF・ModSecurityの比較、フォーム送信がブロックされる誤検知の調査と例外設定、ログ監視、WAFが代替できないことまで実践的に解説します。

  3. プログラミング

    セキュリティヘッダー入門|CSP・HSTS・X-Frame-Optionsの設定と効果を実践解説

    CSP・HSTS・X-Frame-Options・X-Content-Type-Optionsなど主要セキュリティヘッダーが防ぐ攻撃と、CSPのReport-Onlyからの段階導入、nonce/hash、HSTS preloadの不可逆リスク、Nginx・Next.js・Astroでの設定例、確認方法を解説します。

  4. プログラミング

    クラウドの通信費(Egress)入門|データ転送量課金の仕組みと転送コストを抑える設計

    クラウドの「受信無料・送信有料」の原則、AZ間・リージョン間・インターネット向けの単価差、NATゲートウェイ処理料の罠、CDNで転送量を減らす方法、バックアップやログ転送の見落とし、請求書で転送料を特定する手順を解説。想定外の請求を防げます。

  5. プログラミング

    秘密情報をGitに入れない仕組み|.gitignore・git-secrets・履歴から漏れた鍵の削除

    APIキーや.envをGitにコミットしてしまう典型経路と、.gitignore・.env.exampleの運用、pre-commitでのgitleaks検知、GitHub secret scanningの活用、漏れた鍵の無効化と履歴書き換え(git filter-repo)の手順を解説。仕組みで再発を防げます。

  6. プログラミング

    開発・ステージング・本番環境の分離設計|環境差分をなくす構成とアクセス制御

    開発・ステージング・本番それぞれの目的と、構成をコードで揃える方法、環境別の設定注入、本番データを使わないテストデータ戦略、ステージングの保護(Basic認証・IP制限・noindex)、コストを抑える運用までを解説。環境差分による本番障害を防げます。

  7. プログラミング

    ngrok・Cloudflare Tunnelでローカルを公開|Webhook開発とデモ環境の作り方

    NAT内のローカル環境にStripeやLINEのWebhookを届けるトンネリングの仕組みを解説。ngrok・Cloudflare Tunnel・localtunnelの比較、固定ドメインと認証、リクエスト検査、公開時のセキュリティ、自宅サーバー公開への応用までわかります。

  8. プログラミング

    ローカル開発環境のHTTPS化|mkcert・hostsファイル・自己署名証明書の正しい使い方

    ローカル開発をHTTPS前提にすべき理由(Secure Cookie・Service Worker・OAuth)と、mkcertでローカルCAを作りhostsで独自ドメインを割り当ててVite・Next.js・Dockerで使う手順を解説。証明書警告を無視する癖の危険も理解できます。

  9. プログラミング

    localhost・0.0.0.0・127.0.0.1の違い|ポートとUnixソケットを理解して「つながらない」を解決

    localhost・127.0.0.1・0.0.0.0の意味の違い、Dockerで外から接続できない原因、host.docker.internal、ポート競合の調べ方、Unixソケットの利点と権限、1024未満ポートの制約を解説。「つながらない」を仕組みから解決できます。

ManageAI

先行モニター企業 募集中

生成AIのコストを「部署別」に、請求書より先に。

先着5社限定・2026年11月末まで。初期費用0円・月額5万円(税別)で、正式版と同等の機能に加え、開発者と伴走者による導入支援を追加費用なしで提供します。プロンプト原文は一切取得しません。

株式会社カイダン × Harmonic Society株式会社の共同事業|読み取り専用キーの登録だけで導入できます