タイトルが長くなりましたが、AWS の VPC に「パブリックサブネット」と「プライベートサブネット」を作成し、それぞれのサブネットに所属する EC2インスタンスがインターネットに出ていけるようにする設定の方法について解説します。
AWS ネットワーク構成図
AWSの場合は絵がないと本当に理解するのが大変なので、まずは構成図を作成しました。
構成図を基にどのような構成で何をしたいのかを説明していきます。
VPCは1つです。
VPCに2つのサブネット(「パブリックサブネット」と「プライベートサブネット」)作ります。
イメージとしては
- パブリックサブネット ← Webサーバ
- プライベートサブネット ← DBサーバ(RDSでもよい)
が配置されるような構成です。
決して複雑な構成ではないのですが、AWS のルール(規則)や、ルーティングなどを把握していないと、単純にサブネットを作成しても会社や自宅からインターネット経由でログインできない、ログインできても「yum update」や「Windows Update」すらできないことがあります。
1つ1つ手順を確認しつつ上記の構成を構築していきます。
事前準備 NAT ゲートウェイ用の IP アドレス(EIP、パブリックIP)を設定する
これから VPC を作成していきますが、その前に「NAT ゲートウェイ」用の IP アドレスを設定しておきます。
構成図で言えば、この青色で説明している部分です。
今回は、プライベートサブネットに所属する EC2 インスタンスがインターネットに出ていく要件(yum update でアップデートしたい)があるため、NAT ゲートウェイを作成して EIP(パブリック IP アドレス)を設定します。
NAT ゲートウェイ用の EIP を作成する手順
AWS コンソール画面にログインして「サービス」–「VPC」をクリックします。
「VPC ダッシュボード」に移動したら左側ペインより「Elastic IP」をクリックします。
「新しいアドレスの割り当て」ボタンをクリックします。
「新しいアドレスの割り当て」画面で「割り当て」ボタンをクリックします。
下図のように「新しいアドレスのリクエストが成功しました」のメッセージが表示されることを確認し「閉じる」ボタンをクリックします。
下図のように新しい EIP が追加されていることを確認します。
以上で準備は完了です。
VPCを作成する
まずは基盤となる VPC を1つ作成します。
AWS コンソールにログインして「VPC ダッシュボード」から「VPC ウィザードの開始」ボタンをクリックします。
「ステップ1:VPC 設定の選択」画面で「パブリックとプライベートサブネットを持つ VPC」を選択して「選択」ボタンをクリックします。
「ステップ2:パブリックとプライベートサブネットを持つ VPC」画面で下図のように設定をします。
- IPv4 CIDR ブロック ← デフォルト(10.0.0.0/16)のままです。
- VPC名 ← 分かりやすい任意の名前を付けます。
- パブリックサブネットの IPv4 CIDR ← デフォルト(10.0.0.0/24)のままです。
- パブリックサブネット名 ← デフォルト(パブリックサブネット)のままです。
- アベイラビリティゾーン ← 任意のアベイラビリティゾーンを選択します。基本的にパブリックサブネットとプライベートサブネットは異なるアベイラビリティゾーンに所属させます。
- プライベートサブネットの IPv4 CIDR ← デフォルト(10.0.1.0/24)のままです。
- アベイラビリティゾーン ← 任意のアベイラビリティゾーンを選択します。基本的にパブリックサブネットとプライベートサブネットは異なるアベイラビリティゾーンに所属させます。
- プライベートサブネット名 ← デフォルト(プライベートサブネット)のままです。
- NATゲートウェイ Elastic IP 割り当て ID ← 先ほど作成した EIP(パブリックIP)の ID を設定します。
設定が完了したら「VPC の作成」ボタンをクリックします。
下図のように「VPC が正常に作成されました」メッセージが表示されることを確認します。
ルートテーブルを確認する
次のネットワークの構成を調べるため、ルートテーブルを確認します。
初めに「サブネット」の構成を確認しておきます。
今回構築した環境は以下のようになっています。
※構築後にすぐに削除するため ID まで載せていますが、本番環境で運用する場合は ID や IP アドレスは知られないようにしましょう。(攻撃対象になる危険性があります)
プライベートサブネット:subnet-ec593fb7 ルートテーブル:rtb-a3f41dc5 デフォルトゲートウェイ(0.0.0.0/0):nat-055a18b1fa8bf18ef
パブリックサブネット :subnet-b5c6f3fc ルートテーブル:rtb-a3f41dc5 デフォルトゲートウェイ(0.0.0.0/0):igw-71763115
ID付きのネットワーク構成図
以下、ID付きのネットワーク構成図です。
以下がルートテーブルです。
■パブリックサブネットのルートテーブル
■プライベートサブネットのルートテーブル
パブリックサブネットにEC2インスタンスを構築する手順
実際に「パブリックサブネット」に EC2 インスタンスを構築して、インターネットに出ていくところまで確認をします。
ネットワーク構成図
パブリックサブネットにEC2インスタンスを構築する手順
AWS コンソールより「EC2」をクリックします。
「インスタンスの作成」ボタンをクリックします。
「ステップ1:Amazon マシンイメージ(AMI)」で任意の AMI を選択します。
今回は無料利用枠の対象である「Red Hat Enterprise Linux 7.5」を選択しました。
「ステップ2:インスタンプの選択」画面で任意のインスタンスタイプを選択し、「インスタンスの詳細の設定」ボタンをクリックします。
「ステップ3:インスタンスの詳細の設定」画面で以下のように設定します。
- ネットワーク ← 今回利用する VPC を選択します。
- サブネット ← パブリックサブネットを選択します。
- 自動割り当てパブリックIP ← 「有効化」を選択してパブリックIPを割り当てます。
- ネットワークインタフェース ← パブリックサブネット(10.0.0.0/24)の中から任意の IP アドレスを割り当てます。
設定が完了したら「ストレージの追加」ボタンをクリックします。
「ステップ4:ストレージの追加」画面でディスクサイズを設定し「タグの追加」ボタンをクリックします。
「ステップ5:タグの追加」画面で任意のタグを設定し「セキュリティグループの設定」ボタンをクリックします。
「ステップ6:セキュリティグループの設定」画面で「新しいセキュリティグループを作成する」を選択し下図のように設定をします。
- セキュリティグループ名 ← 任意の名前を付けます。
- ルール ← 任意のルールを追加します。インターネット経由で SSH でログインする場合は最低でもソース「0.0.0.0/0(ソースのグローバルIPが分かっているなら指定した方がセキュリティ的にいいです)」を指定します。
設定が完了したら「確認と作成」ボタンをクリックします。
「ステップ7:インスタンスの確認」画面で設定内容を確認し「作成」ボタンをクリックします。
「既存のキーペアを選択するか、新しいキーペアを選択します。」の画面で新規もしくは任意のキーペアを選択して「インスタンスの作成」ボタンをクリックします。
パブリックサブネットに作成した EC2 インスタンスにログインする
EC2 インスタンスの作成が完了したらログインをしてみます。
ログインするためには下図のように
「パブリック DNS(IPv4)」か「IPv4 パブリック IP」の情報が必要です。
※「Elastic IP」と「IPv4 パブリック IP」は同一の IP アドレスです。
Teraterm を起動して「IPv4 パブリック IP」を入力して「OK」ボタンをクリックします。
以下の「セキュリティ警告」画面が表示されたら「続行」ボタンをクリックします。
「SSH認証」画面で以下のように設定します。
- ユーザ名 ← ec2-user
- パスフレーズ ← なし
- 「RSA/DSA/ECDSA/ED25519鍵を使う」 ← チェックを入れます。
- 秘密鍵 ← 秘密鍵を選択します。
設定が完了したら「OK」ボタンをクリックします。
ログインできることを確認します。
パブリックサブネットの EC2 インスタンスがインターネットに出て行けるかチェック
パブリックサブネットの EC2 インスタンスからインターネットに出て行けるか確認します。
NICの設定
まずは現在の NIC の設定を確認します。
IPアドレスは「パブリックサブネット」の「10.0.0.11」のみ設定されています。
[ec2-user@ip-10-0-0-11 ~]$ ifconfig |
ルーティングテーブルの確認
次にルーティングテーブルを確認します。
デフォルトゲートウェイは「10.0.0.1」になっています。
ここからインターネットに出ていきます。
[ec2-user@ip-10-0-0-11 ~]$ netstat -rn |
インターネットに出て行けるか確認
curlコマンドで外部サイトにアクセスできるか確認しました。
[ec2-user@ip-10-0-0-11 ~]$ curl -i https://google.co.jp The document has moved <A HREF=”https://www.google.co.jp/”>here. |
プライベートサブネットにEC2インスタンスを構築する手順
次は「プライベートサブネット」に EC2 インスタンスを構築して、インターネットに出ていくところまで確認をします。
ネットワーク構成図
プライベートサブネットにEC2インスタンスを構築する手順
AWS コンソールより「EC2」をクリックします。
「インスタンスの作成」ボタンをクリックします。
「ステップ1:Amazon マシンイメージ(AMI)」で任意の AMI を選択します。
今回は無料利用枠の対象である「Red Hat Enterprise Linux 7.5」を選択しました。
「ステップ2:インスタンプの選択」画面で任意のインスタンスタイプを選択し、「インスタンスの詳細の設定」ボタンをクリックします。
「ステップ3:インスタンスの詳細の設定」画面で以下のように設定します。
- ネットワーク ← 今回利用する VPC を選択します。
- サブネット ← プライベートサブネットを選択します。
- 自動割り当てパブリックIP ← 「サブネット設定を使用(無効)」を選択します。(パブリックIPは不要です)
- ネットワークインタフェース ← プライベートサブネット(10.0.1.0/24)の中から任意の IP アドレスを割り当てます。
設定が完了したら「ストレージの追加」ボタンをクリックします。
「ステップ4:ストレージの追加」画面でディスクサイズを設定し「タグの追加」ボタンをクリックします。
「ステップ5:タグの追加」画面で任意のタグを設定し「セキュリティグループの設定」ボタンをクリックします。
「ステップ6:セキュリティグループの設定」画面で「新しいセキュリティグループを作成する」を選択し下図のように設定をします。
- セキュリティグループ名 ← 任意の名前を付けます。
- ルール ← 任意のルールを追加します。今回はプライベートサブネットから SSH でログインできればいいのでソースを「10.0.0.0/16」を指定します。(Webサーバを踏み台にしてログインすることができる)
設定が完了したら「確認と作成」ボタンをクリックします。
「ステップ7:インスタンスの確認」画面で設定内容を確認し「作成」ボタンをクリックします。
「既存のキーペアを選択するか、新しいキーペアを選択します。」の画面で新規もしくは任意のキーペアを選択して「インスタンスの作成」ボタンをクリックします。
以上で EC2 インスタンスの作成は完了です。
プライベートサブネットに作成した EC2 インスタンスにログインする
EC2 インスタンスの作成が完了したらログインをしてみます。
ログインするためには一度パブリックサブネットにある EC2 インスタンス(web001)にログインしてから、下図の情報を基に「プライベート DNS」か「プライベート IP」へログインすることになります。
※今回の場合は web001 が踏み台サーバーになります。
Teraterm を起動して「web001」の IP アドレスを入力して「OK」ボタンをクリックします。
「SSH認証」画面で以下のように設定します。
- ユーザ名 ← ec2-user
- パスフレーズ ← なし
- 「RSA/DSA/ECDSA/ED25519鍵を使う」 ← チェックを入れます。
- 秘密鍵 ← 秘密鍵を選択します。
設定が完了したら「OK」ボタンをクリックします。
ログインできることを確認します。
ここから先ほどプライベートサブネットに作成した db001 にログインします。
web001 に秘密鍵の配布
db001 にログインする前に、web001 に秘密鍵を配布します。
今回は「.ssh」ディレクトリに配布します。
[ec2-user@ip-10-0-0-11 ~]$ cd .ssh/ —–BEGIN RSA PRIVATE KEY—–
~ 省略 ~
wDkyoq6bSZIqKcCD1RA/Cmtwy3/NxgyJR+8XpFy0hzylFNIhfND7mdlWZfbaU9ZdGgydhmJ7sLvN [ec2-user@ip-10-0-0-11 .ssh]$ chmod 600 web-server-key.pem ← 秘密鍵の権限を「600」に変更します。 [ec2-user@ip-10-0-0-11 .ssh]$ ll |
プライベートサブネットの db001 へログインをする
プライベートサブネットの EC2 インスタンス(db001)に ssh でログインします。
オプション「-i」を付けて秘密鍵を指定してログインをします。
[ec2-user@ip-10-0-0-11 ~]$ ssh -i .ssh/web-server-key.pem 10.0.1.11 |
プライベートサブネットの EC2 インスタンスがインターネットに出て行けるかチェック
プライベートサブネットの EC2 インスタンスからインターネットに出て行けるか確認します。
NICの設定
まずは現在の NIC の設定を確認します。
IPアドレスは「プライベートサブネット」の「10.0.1.11」のみ設定されています。
[ec2-user@ip-10-0-1-11 ~]$ ifconfig |
ルーティングテーブルの確認
次にルーティングテーブルを確認します。
デフォルトゲートウェイは「10.0.1.1」になっています。
ここからインターネットに出ていきます。
[ec2-user@ip-10-0-1-11 ~]$ netstat -rn |
インターネットに出て行けるか確認
「yum update」コマンドが実行できるか確認します。
エラーが出力されなければインターネットに出ていけています。
[ec2-user@ip-10-0-1-11 ~]$ sudo su – |
curlコマンドで外部サイトにアクセスできるか確認しました。
[root@ip-10-0-1-11 ~]# curl -i https://google.co.jp
~ 省略 ~ |
検証が完了したら確実に削除をしておくこと
AWS を利用する上で一番重要な部分ですが、AWS は基本的に従量課金制です。
本番のサービスとして利用していないのにインスタンスを起動しっぱなし、EIP を保持しっぱなしにしていると思った以上に課金されて後で驚く羽目になります。
そのため検証が完了したら綺麗に削除しましょう。(削除が一番確実です)
以下の主要なサービスで削除し忘れていないサービスがあるか確認します。
- EC2 インスタンス
- RDS
- VPC
■EC2 インスタンス
■RDS
■VPC
※NAT ゲートウェイは既に削除済みですがなぜか1になっています。
コメント