VPCの主な構成要素
1. サブネット
・VPCネットワークをさらに分割したやつ、ホスト部の間借りをしたもの
・パブリックサブネット:インターネットと直接通信するサブネットである。Webサーバーなど外部公開するリソースを配置する。
・プライベートサブネット:インターネットと直接通信しないサブネットで、DBサーバーなど内部で使用するリソースを配置する。
2.ゲートウェイ
・VPC内のリソースがインターネットと通信するための出入り口である。これをVPCに接続することで、パブリックサブネット内のリソースがインターネットにアクセスできる。
3.ルートテーブル(AWSのルートテーブルはちょっと特殊なので参考文献を参照してください。)
・ネットワーク内のトラフィックの行き先を決定するための設定である。どのサブネットやゲートウェイにパケットを送るかをここて定義する。
4.セキュリティグループとネットワークACL
・セキュリティグループ:特定のリソース(例:EC2インスタンス)に対するファイアーウォールの役割を果たし、どのIPアドレスやポートからのアクセスを許可するかを設定する。
・ネットワークACL(アクセスコントロールリスト):サブネット単位でパケット制御をし、セキュリティグループよりも広範囲なアクセス制御が可能。
5.NATゲートウェイ
・プライベートサブネット内のリソースがインターネットにアクセスする際使用する。内部から外部への通信は許可されるが、外部から内部への直接的なアクセスはブロックされる。(原則exgress通信はOK,ingress通信はNGだよというお話。)
具体例を用いてネットワーク図の考察をしてみる(参考文献2より)
・VPC:10.0.0.0/16 (us-east-1リージョンに存在している。)
・サブネット
パブリックサブネット 10.0.0.0/24
プライベートサブネット 10.0.1.0/24 (us-east-1b)
→別リージョンにおいている。(CAP定理の観点から
・ゲートウェイ
インターネットゲートウェイ(パブリックサブネットのインターネット接続用)
NATゲートウェイ(プライベートサブネットのインターネット通信用)
VPNゲートウェイ(オンプレミスとの接続用)
・エンドポイント
S3エンドポイント(プライベートサブネットのインスタンスがS3と直接通信可能)
・外部サービス
Amazon DynamoDB
S3
オンプレミス(この場合VPN経由でデータセンターに接続している。)
復習がてら
VPCとサブネットの関係である。
VPC(10.0.0.0/16)
・10.0.0.0~10.0.255.255までのアドレスをカバーしている。(ホスト部を間借りしているので、変化するのはホスト部の下位16bitのみ)
・つまり、10.0.x.xの範囲すべてのIPがこのVPCに含まれる。
サブネット
10.0.0.0/24(パブリックサブネット) → 10.0.0.0 ~ 10.0.0.255
10.0.1.0/24(プライベートサブネット) → 10.0.1.0 ~ 10.0.1.255
→どちらも 10.0.0.0/16 の範囲内に含まれる!
サブネット間の通信
VPC内では、デフォルトですべてのサブネット間の通信が許可されている。
そのため、特別にルーティング設定をしなくても通信はできる。
もし通信を制限したい場合
→セキュリティグループやネットワークACLで制限を掛ける。
→パブリックサブネットからプライベートサブネットへのSSH接続を禁止にするなどの設定が可能となる。
やったほうがいいセキュリティ設定の一例とその理由
パブリックサブネットからプライベートサブネットへのSSH接続の禁止
理由:セキュリティの向上
プライベートサブネットにあるEC2は外部から直接アクセスできないようにするのが基本である。(公式でもこれがベストプラクティスだとされている。)
パブリックサブネットが乗っ取られたら、公開してはいけないDBの中身とかを覗けるようになってしまうので必要な設定ですね。
インバウンドトラフィックの制限
理由:不要な通信をブロックするため。
セキュリティグループを設計するときも最小権限の原則的思想を忘れずに!
対象 | 許可するポート | 許可する送信元 | 説明 |
---|---|---|---|
Webサーバー(公開用) | 443(HTTPS) | 0.0.0.0/0 | 誰でも接続していいよー、インターネット公開 |
Webサーバー(公開用) | 22 | コンソールに繋いでいる制御用のPCのIPアドレス | 管理者だけ |
アプリケーションサーバー(非公開) | 8080など | Webサーバー自体のIPアドレス | Webサーバーからのみ通信可能にし、web3層構造を実現する。 |
DB(非公開) | 3306(MySQLの標準ポート番号) | アプリケーションサーバー自体のIPアドレス | アプリケーションサーバーからのみ通信可能 |
内部ネットワークに管理者PCがある場合である。
セキュリティグループ定義の際に、管理者PCのプライベートIPアドレスを登録する。
NATゲートウェイの制限
理由:不要な外部アクセスを防ぐ
プライベートサブネットのEC2は、NATゲートウェイ経由でインターネットにアクセスできる。
ただし、すべての外部に対する通信を許可するのはリスキーである。特定のAPIエンドポイントのみに設定などが適切である。
IAMロールの最小権限設定
ダメな例です。すべてのユーザーがすべてのリソースに対してすべての操作が可能
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
いい例です。特定のs3に対してのみ読み書きできるようになっています。
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::my-secure-bucket/*"
}
VPCフローログの有効化
理由:ネットワークの可視化&セキュリティ監査
VPCフローログを有効化すると、どのIPアドレスがどこに通信しているかをCloudWatch LogsやS3に記録できる。
参考文献(いずれも参照日2025年2月12日)↓わかりやすいです。
参考文献1
参考文献2