はじめまして。
本年度入社しました小林と申します。
城に魅了されてしまったエンジニアです。
どうぞ、よろしくお願いします。
今回はちょうど業務でAWSに触れる機会があったため、ネットワークの設定に関して紹介していきます。
要件
以下のような環境を構築します。
- 踏み台サーバ(Amazon EC2)
- インターネットから直接アクセス可能
- Webサーバ(Amazon EC2)(※今回Webサーバとして公開することは考慮しない)
- インターネットから直接アクセス不可
- 踏み台サーバからのみアクセス可能
- 踏み台サーバとWebサーバは異なるサブネットに所属
- サブネットはそれぞれ異なるAZに存在
ネットワークの構成図はこのようになります。
ネットワークの構築
はじめに
用件に見合う構成にするために、以下のサービスを利用します。
- Amazon VPC-VPC
- Amazon VPC-サブネット
- Amazon VPC-インターネットゲートウェイ
- Amazon VPC-ルートテーブル
- Amazon VPC-セキュリティグループ
※VPCは以下の設定で作成し、これら以外はデフォルトの設定を使用することを前提とします。
VPC | VPC ID | vpc-XXXXXXX |
IPv4 CIDRブロック | 10.125.0.0/16 | |
IPv6 CIDRブロック | IPv6 CIDRブロックなし | |
テナンシー | デフォルト | |
タグ | Name | TestVPC |
サブネット
パブリックサブネット(インターネットからアクセス可能なサブネット)
以下の設定でサブネットを作成します。
名前タグ | TestPublicSubnet |
VPC | vpc-XXXXXXX |
アベイラリティゾーン※ | us-east-2a |
IPv4 CIDR ブロック | 10.125.1.0/24 |
※リージョンはオハイオ(us-east−2)を利用しています。
このままだと、EC2インスタンスを起動した際にパブリックIPが自動で割り当てられないため、自動割り当ての設定を行います。(EC2インスタンスの作成時に割り当てることも可能です。)
- 該当のサブネットを選択→アクション→「自動割り当てIP設定の変更」を押下
- 「IPv4 の自動割り当て」をチェック→保存
プライベートサブネット(インターネットからアクセス不可なサブネット)
以下の設定でサブネットを作成します。
名前タグ | TestPrivateSubnet |
VPC | vpc-XXXXXXX |
アベイラリティゾーン※ | us-east-2b |
IPv4 CIDR ブロック | 10.125.2.0/24 |
※リージョンはオハイオ(us-east−2)を利用しています。
インターネットゲートウェイ
VPCの内部とインターネット間の通信を許可するために、インターネットゲートウェイを作成します。
インターネットゲートウェイ自体には細かい設定は存在しません。
名前タブ | TestIG |
作成後、VPCと関連付けます。
- アクション→「VPCにアタッチ」を押下
- 「使用可能なVPC」に対象のVPC(TestVPC)を選択→「インターネットゲートウェイのアタッチ」を押下
これでVPCは作成したゲートウェイ経由でインターネットと通信ができるようになる入り口が用意されました。
ルートテーブル
ゲートウェイは入り口に過ぎず、ゲートウェイへのルートを用意する必要があり、そのためにルートテーブルを用意する必要があります。
以下の設定でルートテーブルを作成します。
名前タグ | TestPublicRouteTable | |
VPC | vpc-XXXXXXX |
作成したルートテーブルにインターネットゲートウェイを経由する設定を追加します。
- 対象のルートテーブルを選択→「ルートタブ」を選択→「ルートの編集」を押下
- ルートに以下の設定を追加
送信先 0.0.0.0/0 ターゲット 作成したインターネットゲートウェイ
作成したルートテーブルにサブネットを関連付けします。
- 対象のルートテーブルを選択→「サブネットの関連付け」を選択→「サブネットの編集」を押下
- パブリックサブネットのみを選択→保存
セキュリティグループ
最後にEC2への接続を許可するためにセキュリティグループを作成します。
踏み台サーバ用のセキュリテイグループ
以下の設定でセキュリティグループを作成します。
- 基本的な詳細
セキュリティグループ名 TestSGForBastion 説明 ssh from internet to bastion VPC vpc-XXXXXXX - インバウンドルール/アウトバウンドルール
タイプ プロトコル ポート範囲 ソース インバウンド SSH TCP 22 0.0.0.0/0 アウトバウンド すべて すべて すべて 0.0.0.0/0
これでインターネット側からのSSH接続を許可しました。
※必要に応じて接続元を絞ることをお勧めします。
この設定ではどこからでもアクセスできてしまいます。
Webサーバ用のセキュリティグループ
以下の設定でセキュリティグループを作成します。
- 基本的な詳細
セキュリティグループ名 TestSGForWebServer 説明 ssh from bastion to web server VPC vpc-XXXXXXX - インバウンドルール/アウトバウンドルール
タイプ プロトコル ポート範囲 ソース インバウンド SSH TCP 22 踏み台サーバ用のSG アウトバウンド すべて すべて すべて 0.0.0.0/0
ソースに対象のセキュリティグループを指定することで、そのセキュリティグループが設定されているEC2インスタンスからのアクセスを許可することができます。
もちろん、IPアドレスで指定することも可能です。
ネットワーク側の設定は以上になります。
これらの設定をEC2インスタンスに関連付けることで、踏み台サーバからのSSHのみを受け付ける環境が完成します。
EC2 インスタンス | サブネット | セキュリティグループ |
踏み台サーバ | パブリックサブネット | 踏み台サーバ用のセキュリティグループ |
Webサーバ | プライベートサブネット | Webサーバ用のセキュリティグループ |
まとめ
肝となるのは、以下の2点かと思います。
私自身はこの設定が漏れていたことにより、うまく接続することができませんでした。
- ルートテーブルとインターネットゲートウェイの関連付け
- セキュリティグループのソースにセキュリティグループを指定
補足
セキュリティグループに関してなのですが、実はWebサーバ用のセキュリティグループで設定した内容は、VPCを作成した際に作成されるデフォルトのセキュリティグループを指定することで実現が可能です。
しかし、デフォルトのセキュリティグループを使用する場合は、踏み台サーバ、Webサーバ双方に設定する必要があり、双方向の接続が可能になってしまうことに注意が必要です。