はじめに
インフラエンジニアを勧められ、AWSのVPCを用いた仮想ネットワーク構築してインフラ関係の勉強中。
目次
- VPCとサブネットワークの作成
- ルートテーブル、インターネットゲートウェイの作成とメインルートの設定
- 踏み台サーバーとバッチサーバーの作成
- 踏み台サーバーへSSHログイン
- 踏み台サーバーからバッチサーバーへSSHログイン
- バッチサーバーへのアクセス制限
インフラ構築図
VPCとサブネットワークの作成
VPC IPv4 CIDR
192.168.0.0/16
サブネットを作成したVPC範囲内で作成
今回は、下記の値で作成
Public subnet
192.168.1.0/24
Private subnet
192.168.2.0/24
ルートテーブル、インターネットゲートウェイの作成とメインルートの設定
ルートテーブルの作成
ルートテーブルとは、どのサブネットとどのサブネットを通信させるのかを設定するためのものになります。
今回は、作成したVPCと関連付けさせたルートテーブルをPublic subnet用とPrivate subnet用の2つ作成します。
インターネットゲートウェイの作成
インターネットゲートウェイは、サブネットをパブリック(メインルート)に設定するために必要になります。
任意の名前を設定し作成した後、先ほど作成したVPCにアタッチします。
メインルートの設定
今回は、Public subnet をメインルートに設定したいので、先ほど作成したPublic subnet用ルートテーブルの設定を行います。
Public subnet用ルートテーブルのルート編集から、ルートの追加で「送信先」に「0.0.0.0/0」を入力し、「ターゲット」で先ほど作成したインターネットゲートウェイIDを設定して、保存します。
「送信先」に「0.0.0.0/0」にすることで、Public subnetがインターネットとの通信が行えるようになります。
Private subnet用ルートテーブルの設定は、インフラ構築図にあるように今回はVPCのCIDRのルートだけ良いので、特に設定はしません。
踏み台サーバーとバッチサーバーの作成(EC2インスタンス)
踏み台サーバーの作成
EC2インスタンス作成時のインスタンスの詳細の設定で、どのネットワーク(VPC)のどのサブネットに置くかを選択する欄があります。
〜インスタンスの詳細の設定〜
ネットワーク "作成したVPCを選択"
サブネット "public subnet(メインルートに設定したサブネット)"
自動割り当てパブリックIP ”サブネット設定を使用(有効)or有効”
〜セキュリティグループの設定〜
デフォルトでSSHでのアクセスはできるようになっているので、ルールを追加でHTTPを追加します。
ソースは「0.0.0.0/0」のままでどこからでもアクセスできるようにします。
〜SSH認証用キーペア〜
新しいキーペアを作成もしくは、既存のキーがあればそちらを設定します。
新しいキーペアを作成した場合は、ダウンロードも忘れずに!
以上の設定で踏み台サーバー(EC2インスタンス)を作成します。
バッチサーバーの作成
〜インスタンスの詳細の設定〜
ネットワーク "作成したVPCを選択"
サブネット "private subnet"
自動割り当てパブリックIP ”サブネット設定を使用(無効)or無効”
既存のキーペアを選択で、踏み台サーバーで選択したキーペアと同じものを選択します。
※ここで作成したキー名を「vpc-practice.pem」
として説明を進めていきます。
以上の設定でバッチサーバー(EC2インスタンス)を作成します。
踏み台サーバーへSSHログイン
キーをローカルの ~/.ssh/へ格納したいので、vpc-practice.pem
をホームディレクトリへ保存し、
ホームディレクトリにあるvpc-practice.pem
を~/.ssh/へ移動する以下のコマンドを実行します。
ec2-user:~/environment $ mv vpc-practice.pem ~/.ssh/
次にキーペアファイルの権限を変更する以下のコマンドを実行します。
ec2-user:~/environment $ sudo chmod 600 ~/.ssh/vpc-practice.pem
これでキーが使用できるようになり、踏み台サーバーへSSHログインできるようになります。
- chmod 600について
SSHログインのコマンドを実行
ec2-user:~/environment $ ssh -i ~/.ssh/vpc-practice.pem ec2-user@xxx.xxx.xxx.xxx(パブリックIP)
ログインできます。
踏み台サーバーからバッチサーバーへSSHログイン
2種類のやり方を紹介します。
①ローカルのキーを使って踏み台サーバーを中継し、バッチサーバーへ1つのコマンドでアクセスする方法
②ローカルから踏み台サーバーへSSHログインした後に、バッチサーバーへSSHログインする方法
①ローカルのキーを使って踏み台サーバーを中継し、バッチサーバーへ1つのコマンドでアクセスする方法
オプションのProxyCommandを使うことで、ローカルにあるキーを使って踏み台サーバーを経由してバッチサーバーへアクセスできます。
セキュリティ観点からも、キーを踏み台サーバーに置かなくても良いので安全なのかなと思います。
ec2-user:~/environment $ ssh -o ProxyCommand='ssh -i ~/.ssh/vpc-practice.pem ec2-user@xxx.xxx.xxx.xxx(踏み台サーバーのパブリックIP) -W xxx.xxx.xxx.xxx(バッチサーバーのプライベートIP):22' -i ~/.ssh/vpc-practice.pem ec2-user@xxx.xxx.xxx.xxx(バッチサーバーのプライベートIP)
②ローカルから踏み台サーバーへSSHログインした後に、バッチサーバーへSSHログインする方法
踏み台サーバーにもローカル同様にキーを格納し、権限を付与させるだけ
まずは、下記のコマンドでローカルにあるキーを踏み台サーバーへコピー
します。
ec2-user:~/environment $ scp -i ~/.ssh/vpc-practice.pem ~/.ssh/vpc-practice.pem ec2-user@xxx.xxx.xxx.xxx(踏み台サーバーのパブリックIP):
vpc-practice.pem(コピーができればコピーしたファイル名がコマンド実行結果に表示されます。)
※パブリックIPの後ろに:(コロン)をつけるのを忘れないように!
次に、踏み台サーバーへSSHログイン
します。
ec2-user:~/environment $ ssh -i ~/.ssh/vpc-practice.pem ec2-user@xxx.xxx.xxx.xxx(パブリックIP)
ls コマンドでキー(vpc-practice.pem)がコピーできていることが確認できます。
次に、踏み台サーバーのホームディレクトリにあるvpc-practice.pem
を~/.ssh/へ移動する以下のコマンドを実行します。
[ec2-user@ip-xx-xx-xx-xx ~]$ mv vpc-practice.pem ~/.ssh/
cdコマンド、lsコマンドで移動できているか、確認できます。
次にキーペアファイルの権限を変更する以下のコマンドを実行します。
[ec2-user@ip-xx-xx-xx-xx ~]$ sudo chmod 600 ~/.ssh/vpc-practice.pem
これでキーが使用できるようになり、バッチサーバーへSSHログインできるようになります。
ec2-user:~/environment $ ssh -i ~/.ssh/vpc-practice.pem ec2-user@xxx.xxx.xxx.xxx(バッチサーバープライベートIP)
これでアクセスできます。
最後に、バッチサーバーへのアクセスを踏み台サーバーのみに制限します。
バッチサーバーへのアクセス制限
バッチサーバーインスタンスのインバウンドルールを設定します。
現在SSHのソースが「0.0.0.0/0」になっているものを踏み台サーバーのプライベートIP/32へ変更します。
以上で簡単な仮想ネットワークの構築できました。