お疲れ様です。satimoです。
AWSの勉強2回目になります。下のような構成を構築していて、前回VPC、サブネットを2つ、インターネットゲートウェイを構築、アタッチまで行いました。
前回構築した内容:AWSの勉強何から始める?手を動かそう!!(VPCの作成)
今回はパブリックサブネット内にAmazon EC2(サーバー)や、NATゲートウェイなんかを構築してインターネット越しにEC2に接続できるようにしていきます。

パブリックサブネット内にEC2インスタンスを作成
AWSのコンソールにログインし、検索窓に「ec2」と入力し『EC2』サービスをクリックします。

表示された画面から『インスタンスを起動』-『インスタンスを起動』をクリックします。

ここからいよいよEC2の作成が始まります。
ステップ1でマシンイメージの選択を行います。
今回は一番お買い得なAmazon Linux 2 AMIの項目にある『選択』をクリックします。

ステップ2でサーバーのスペック選択を行います。
ここも一番安いタイプを選択しています。(t2.micro)
選択後、『次のステップ:インスタンスの詳細設定』をクリックします。

ステップ3ではインスタンスのこまごました設定を行います。
設定する項目は下記3点です。
変更後、『次のステップ:ストレージの追加』をクリックします。
設定項目 | 設定値 |
---|---|
ネットワーク | 前回作成したVPCを指定 |
サブネット | 前回作成したパブリックサブネットを指定 |
自動割り当てパブリックIP | 有効 |

ステップ4ではストレージの選択です。
変更なしで『次のステップ:タグの追加』をクリックします。

ステップ5ではタグの追加を行うことができます。
『タグの追加』をクリックし設定する項目を表示させます。

タグについては今回、下記のように設定をしていきます。
設定後『次のステップ:セキュリティグループの設定』をクリックします。
設定項目 | 設定値 |
---|---|
キー | Name |
値 | satimo-public-ec201 |

ステップ6ではセキュリティグループの設定を行います。
セキュリティグループの設定は後ほど行うので、ここでは変更名無しにしておきます。
『確認と作成』をクリックします。

キーペアの作成画面が表示されます。
ログインする際にすごい大事なものです!!
新しいキーペアの作成を選択し
キーペア名に任意のものを入力し『キーペアのダウンロード』をクリックします。
キーペアがダウンロードされることを確認し『インスタンスの作成』をクリックします。

これでインスタンスの作成は完了となります!

インスタンスの作成完了まで5分弱といったとこでしょうか。しばらく待ってからインスタンスの状態とステータスチェックがOKなことを確認します。

セキュリティグループの設定 インターネットからの接続を許可する

画面の左の『セキュリティグループ』をクリックします。

画面右上にある『セキュリティグループを作成』をクリックします。

まず、作成するセキュリティグループ名などの設定を行います。
ここでは下記のように設定します。
入力後少し下にスクロールします。
設定項目 | 設定値 |
---|---|
セキュリティグループ名 | satimo-sg-public-ec2 |
説明 | satimo-sg-public-ec2 |
VPC | 作成したVPCを指定 |

インバインドルール(AWSのそとからECに接続する為の通信を許可する設定)の設定を行います。
『ルールを追加』をクリックします。

今回はインターネット越しからSSH接続する為の設定を行います。
初期では下記のように設定されているのでタイプなどの設定変更を行います。

変更箇所は下記2点です。
ソースに設定している『0.0.0.0/0』はどのアドレスからでもSSH(22番ポート)での接続を許可するという意味になります。
設定項目 | 設定値 |
---|---|
タイプ | SSH |
ソース | 0.0.0.0/0 |

これで設定完了です。
1番下までスクロールし『セキュリティグループを作成』をクリックします。

完了後、「インバウンドルール」の設定を見てみると設定した内容が反映されていることが確認できます。

次に「アウトバウンドルール」タブをクリックしてアウトバウンドルールの設定見てみます。
全てのトラフィックが0.0.0.0/0に対して許可されていることがわかります。

作成したEC2インスタンスに作成したセキュリティグループを割り当て

作成したセキュリティグループですが、まだ作っただけでどこにも割り当てられていない状態です。
今回作成する構成では、パブリックサブネットにあるAmazon EC2からインターネットに接続できるようにする必要がある為、作成したEC2インスタンスに作成したセキュリティグループの割り当てを行います。
画面左にある『インスタンス』をクリックします。

作成したEC2インスタンスが表示されますので対象のインスタンスを選択します。
選択後、画面右上の『アクション』をクリックします。

『アクション』-『セキュリティ』-『セキュリティグループを変更』をクリックします。

セキュリティグループを変更の画面に移ります。
まず、インスタンスの詳細の項目にパブリックネットワークにあるインスタンスが表示されていることを確認します。
次にネットワークインターフェースの項目にEC2インスタンス作成時に設定されたセキュリティグループが割り当てられているのでこちらの削除を行います。
右下にある『削除』をクリックします。

アタッチされたセキュリティグループがなくなったことを確認し、作成したセキュリティグループの割り当てを行います。

次に作成したセキュリティグループの割り当てを行います。
虫メガネの項目に作成したセキュリティグループ名(今回はsatimo-sg-public-ec2)と入力しすると作成したセキュリティグループが表示されるので選択し、下のようになった状態で『保存』をクリックします。



セキュリティグループが変更された旨のメッセージが表示されることを確認します。

『セキュリティ』タブをクリックしセキュリティグループの項目に作成したセキュリティグループが割り当てられたことを確認します。

下にスクロールすると設定されているセキュリティグループの内容を確認できます。

次の項目でEC2に接続してみます。
いま、EC2に割り当てられているパブリックIPアドレスを確認を行います。
(下の場合は54.178.67.105になります)

自宅から作成したEC2インスタンスへ接続
いよいよサーバー(EC2)インスタンスへ接続してみます。
自宅や社内から接続する場合、プロキシサーバーやファイアーウォールでSSHでインターネットに接続することを拒否している場合があります。

今回はTera Termで接続してみます。
まずTera Termを起動し確認したIPアドレスをホストの項目に入力します。
入力後、『OK』をクリックします。

セキュリティ警告が表示される場合『続行』をクリックします。

SSH認証の画面が表示されます。
ユーザ名の項目に『ec2-user』と入力します。

入力後「RSA/DSA/ECDSA/ED25519」の項目にチェックをいれダウンロードした秘密鍵を指定します。

今回は「satimo-ec2-20210421.pem」です。
(Windowsの設定によっては拡張子が表示されない場合もあります。)

秘密鍵を指定後、『OK』をクリックします。

下のように表示されれば接続完了です!

プライベートサブネットにEC2を構築する
ここまでで、パブリックサブネット(インターネットから接続できるネットワーク)にEC2を構築してインターネット越しに接続できることを確認しました。
次に、下図のプライベートサブネットにEC2の作成を行っていきます。
条件として、プライベートネットワーク内に構築するのでインターネットから接続は不可としてインターネットに接続する際はNATゲートウェイなるもの経由で接続するように構築していきます。

AWSのコンソールからEC2サービスを呼び出します。

インスタンスを起動をクリックしてインスタンスの構築を行っていきます。

今回も無料枠対象のAmazon Linuxを選択していきます。

インスタンスタイプでは『t2.micro』を選択し『次のステップ:インスタンスの詳細の設定』をクリックします。

ステップ3では下記設定を行っていきます。
入力後、『次のステップ:ストレージの追加』をクリックします。
設定項目 | 設定値 |
---|---|
ネットワーク | 作成したvpc(satimo-vpc) |
サブネット | 作成したプライベートサブネット (satimo-private-subnet) |
自動割り当てパブリックネットワークIP | 有効 |

ストレージの追加は変更なしで『次のステップ:タグの追加』をクリックします。

タグの追加では「タグの追加」をクリックして下記設定を行います。
入力後、『次のステップ:セキュリティグループの設定』をクリックします。
設定項目 | 設定値 |
---|---|
キー | Name |
値 | satimo-private-ec201 |

最後の設定セキュリティグループの設定では設定変更なしで『確認と作成』をクリックします。

内容の確認をし『起動』をクリックします。

キーペアに関するウインドウが表示されます。
今回は、パブリックネットワーク内に作成したEC2の時に作ったキーペアを利用しようと思いますので、既存のキーペアから作成したキーペアを選択します。
「インスタンスの作成」をクリックし作成完了です!

インスタンスの作成が開始されます。

しばらくしてから『インスタンスの表示』をクリックし、

インスタンスの画面に表示されることを確認します。

インスタンスの状態が実行中、ステータスが合格しましたと表示されれば用意完了です!

最後に作成したEC2のIPアドレスを確認しておきます。
私の環境ではパブリックIPアドレスが『13.114.186.5』
プライベートIPアドレスが、『10.0.2.196』にそれぞれ割り当てられていることが確認できます。

プライベートサブネットに作成したEC2へのログイン

ではでは、作成したプライベートサブネット内のEC2へログインしてみます。
繰り返しになりますが、プライベートサブネットはインターネット経由で接続できないネットワークになりますで、自宅からは直接ログインはできません。
その為、パブリックネットワークに作成したEC2を踏み台にして接続を行います。
まず、パブリックサブネット内のEC2へログインをします。

アドレスを確認すると、パブリックサブネットのIPアドレスが割り当てられていることがわかります。

次に、ログインに必要なキーペアをパブリックネットワークのEC2へアップロードを行います。
Teara Termで行う場合はダウンロードしたkeypairをドラッグアンドドロップで持っていくと楽です。

送信先は適当なとこでOKですが、今回は/tmpディレクトリに保存しておきます。
送信先を指定後『OK』をクリックします。

/tmpディレクトリに保存されたか確認してみます。

このままだと権限で問題で利用ができません。
下記コマンドを実行して権限の変更を行います。
chmod 400 /tmp/satimo-ec2-20210421.pem

ではプライベートサブネットのEC2へログインしてみます。
ssh -i /tmp/satimo-ec2-20210421.pem ec2-user@10.0.2.196
成功するとこんな感じの表示

下のようにメッセージが表示される場合は「yes」と入力して下さい。
The authenticity of host ‘10.0.2.196 (10.0.2.196)’ can’t be established.
ECDSA key fingerprint is SHA256:ko23C1ZYIA/x73u+pDIhUvc/5B0AtOGQPT5fWejvX34.
ECDSA key fingerprint is MD5:df:74:9b:fa:55:13:d8:08:2b:e8:95:6b:b1:fb:2d:c5.
Are you sure you want to continue connecting (yes/no)? yes
IPアドレスの確認をすると、「10.0.2.196」であることが確認できます。

プライベートサブネットからのインターネット接続 NATゲートウェイの用意
プライベートサブネット内にあるEC2についてはインターネットに直接接続させるのではなく、NATゲートウェイ経由で接続させる設定を行います。
まず、NATゲートウェイの作成を行っていきます。

『NATゲートウェイを作成』をクリック

NATゲートウェイの作成画面が表示されます。

今回は下記のような設定を行っていきます。

設定を入力後『NATゲートウェイを作成』をクリックします。

これで作成完了です。

プライベートサブネット上にルートテーブルの作成
最後にプライベートサブネットに対してルートテーブルの作成・割り当てを行っていきます。

『ルートテーブルの作成』をクリックします。

今回の設定値はこんな感じで行います。
設定後『作成』をクリックします。

作成完了です!
『閉じる』をクリックします。

次に作成したルートテーブルの設定変更を行います。
作成したルートテーブルを選択し『ルートの編集』をクリックします。

『ルートの追加』をクリックして

送信元を『0.0.0.0/0』
ターゲットに作成したNATゲートウェイを指定します。

『ルートの保存』をクリック。

下の画面が表示されれば作成完了です。
『閉じる』をクリックして終了します。

作成したルートテーブルを確認すると下のような感じです。

最後にプライベートサブネットに作成したNATゲートウェイの割り当てを行います。

作成したプライベートを選択し「アクション」-「ルートテーブルの関連付けを編集」をクリックします。

割り当てられているルートテーブルを作成したルートテーブルに変更します。
『保存』をクリックして作成完了です。

正しく動作していてみます。
対象のEC2から8.8.8.8にpingを打って応答が帰ってくればOKです。

コメント