目的
本記事では、CloudTechの学習内容を参考に、EC2インスタンスを構築し、自宅PCからSSH接続するまでを実践します。
単純にEC2を1台構築するだけではなく、以下の2台を構築します。
- EC2A:自宅PCからインターネット経由で直接接続できるEC2
- EC2B:インターネットから直接接続せず、EC2Aを踏み台として接続するEC2
⚠️ 料金に関する注意事項
本ハンズオンでは、途中でNATゲートウェイを作成します。
NATゲートウェイは、作成したまま放置すると利用時間に応じて料金が発生し、学習用途でもAWS利用料金が高くなる可能性があります。
そのため、NATゲートウェイ作成後は途中で止めず、最後の「リソース削除」まで実施してください。
構成図
対象者
・ITパスポートレベルの知識はあること。
・LPICレベル1程度のLinuxコマンドがわかること。
・AWSのアカウントは作成済であること。
前提用語
EC2
AWS上で利用できる仮想サーバー。
VPC
AWS上に作成する仮想ネットワーク。
リージョン
AWSのサービスを提供している地理的なエリア。
例:東京リージョン ap-northeast-1
アベイラビリティゾーン
リージョン内にある、独立したデータセンター群。
略して「AZ」と呼びます。
パブリックサブネット
インターネットと直接通信できるように設定されたサブネット。
プライベートサブネット
インターネットから直接アクセスできないように設定されたサブネット。
インターネットゲートウェイ
VPCとインターネットを接続するための仕組み。
NATゲートウェイ
プライベートサブネット内のリソースから、インターネットへ通信するために利用します。
ハンズオン
VPCを作成する。
AWS マネジメントコンソールにログイン後、東京リージョンになっていることを確認します。
上方の右側のリージョン選択画面で東京リージョンになっていることを確認してください。
続いて、検索窓でVPCを検索して出てきたサービスの中でVPCを押します。

VPC作成では、VPCのみと他のリソースも合わせて作成するVPCなどがありますが、今回はせっかくなので、VPCのみで一つずつ作成していきます。変更する項目のみ記載していきます。
| 項目 | 設定値 |
|---|---|
| 名前タグ | VPC |
| IPv4 CIDR | 10.0.0.0/21 |
必要事項を記入したら、右下のVPC作成を押します。
続いて、作成したパラメーターが表示されるので、自分が入力した箇所が正しいか確認します。名前タグとIPv4 CIDRぐらいですかね。
サブネットを作成する。
続いて、サブネットを作成します。作成するのは構成図通り、パブリックサブネットとプライベートサブネットとなります。上記記載の通り、インターネットからの接続の有無で役割が分かれておりますが、現時点では明確な役割は持たせられず、とりあえず枠だけとなります。
では、左側のVPCダッシュボードからサブネットを選択します。

VPC IDで先ほど作成したVPCを選択します。このVPCにサブネットを作成するよっていう宣言です。
サブネットは一度に複数個作成できるようになっているので、一番下の新しいサブネット追加を押します。

では、サブネット1にパブリックサブネット、サブネット2にプライベートサブネットを作成します。
サブネット1の設定項目になります。
| 項目 | 設定値 |
|---|---|
| サブネット名 | Public Subnet |
| アベイラビリティーゾーン | アジアパシフィック(東京)/ ap-northeast-1a |
| IPv4 サブネット CIDR ブロック | 10.0.0.0/24 |
サブネット2の設定項目になります。
| 項目 | 設定値 |
|---|---|
| サブネット名 | Private Subnet |
| アベイラビリティーゾーン | アジアパシフィック(東京)/ ap-northeast-1a |
| IPv4 サブネット CIDR ブロック | 10.0.2.0/24 |
必要事項を記入したら右下のサブネット作成を押します。作成後、緑の個所を×ボタンで閉じたら、今回作成したサブネットでフィルタリングされているので、作成されたのが確認できます。

インターネットゲートウェイを作成する。
続いて、インターネットゲートウェイを作成します。これを設置することで、AWSリソースがインターネットに接続することができます。では、左側のVPCダッシュボードからインターネットゲートウェイを選択します。

右側のインターネットゲートウェイ作成を押します。
| 項目 | 設定値 |
|---|---|
| 名前タグ | Internet Gateway |
設定したら、右下のインターネットゲートウェイの作成ボタンを押します。

作成されましたが、この状態ですと、どこにも属していないので、VPCへアタッチします。
作成ボタン押した後の緑のVPCへアタッチを押してください。
今回作成したVPCを選択してください。IDの後ろにVPCの名前が書かれています。
選択したら右下のインターネットゲートウェイのアタッチボタンを押します。

アタッチすれば、VPCの状態がAttachedになりました。
NATゲートウェイを作成する。
そして、NATゲートウェイをパブリックサブネットに設置します。
左側のVPCダッシュボードよりNATゲートウェイを押してください。

NATゲートウェイに以下の項目を設定します。
| 項目 | 設定値 |
|---|---|
| 名前-オプション | NAT Gateway |
| アベイラビリティーモード | ゾーナル |
| サブネット | Public Subnet |
そして、Elastic IPの割り当てを押してください。
ここで指定するElastic IPとは、NAT Gatewayからインターネットへ出る際に使用する
固定のIPアドレスです。
追加したら、右下のNATゲートウェイを作成ボタンを押します。

ルートテーブルを作成します。
続いて、ルートテーブルを作成します。ルートテーブルは、各サブネットから出ていく通信を「どこへ送るか」を決める設定です。
右のVPCダッシュボードよりルートテーブルを押します。

パブリックサブネット用とプライベートサブネット用の2つを作成します。
以下を設定してください。
パブリックサブネットのルートテーブルとなります。
| 項目 | 設定値 |
|---|---|
| 名前-オプション | Public route |
| VPC | 今回使用するVPC |
値を入れたら、右下のルートテーブルの作成を押します。
続いて、同じようにプライベートサブネットのルートテーブルも作成します。
| 項目 | 設定値 |
|---|---|
| 名前-オプション | Private route |
| VPC | 今回使用するVPC |
値を入れたら、右下のルートテーブルの作成を押します。
ルートテーブルまで作成しました。ただし、このままでは、ルートテーブルはどこにも属していないので、
サブネットへ関連付けます。
まず、ルートテーブルの作成画面に戻り、Public routeの左側にチェックを入れ、アクションからサブネットの関連付けの編集を押します。

Public Subnetを選択し、右下の関連付けを保存を押します。

同じようにPrivate routeもPrivate Subnetを選択して、右下の関連付けを保存を押します。

これでルートテーブルがサブネットに関連付けられました。
続いて、サブネットに関連付けられたルートテーブルのルーティングを指定します。
パブリックのルートテーブルIDを押します。

ルートの追加を押し、パブリックサブネットからインターネットへ通信できるように、ルートテーブルに以下のルートを追加します。追加後、右下の変更の保存を押します。
| 送信先 | ターゲット |
|---|---|
0.0.0.0/0 |
Internet Gateway |
10.0.0.0/21 宛の通信はVPC内部でルーティングされます。
一方、0.0.0.0/0 はそれ以外のすべてのIPv4アドレスを表しており、VPC外部への通信をInternet Gatewayへ送ります。

同様にプライベートのルートテーブルは内部通信以外はNAT Gatewayへ送るように設定します。

以下、追加後、変更を保存を押します。
| 送信先 | ターゲット |
|---|---|
0.0.0.0/0 |
NAT Gateway |
ルーティング設定したことにより、最初に作成したサブネットがようやくパブリックサブネット、プライベートサブネットとなりました。
ではいったんここまでで作成した構成図を見ます。
なんか家でいうと、家が建つのはまだだけど、道路や庭の整備は完了したよという感じです。
いよいよこれからEC2を立てていきます。
パブリックサブネットにEC2Aを作成する。
AWS マネジメントコンソールの検索窓でEC2を検索します。サービスのEC2を押します。

以下を記入・選択していきます。
| 項目 | 設定値 |
|---|---|
| 名前とタグ | EC2A |
Amazonマシンイメージ(AMI)は最新のAmazon Linux 2023が選択されていることを確認してください。
インスタンスタイプはt3.microが選択されていることを確認してください。
※ほかのインスタンスタイプを選択すると、コストが上がる可能性がある為、ハンズオン等で作成するときは小さいタイプを選択願います。(原則デフォルトで大丈夫です。)
キーペアを作成します。
すでに使用できるキーペアを持っている場合は、既存のものを選択しても構いません。キーペアは、EC2へSSH接続する際の認証に使用します。
AWSでキーペアを作成すると、秘密鍵(.pemファイル)をダウンロードできます。
注意
ダウンロードした秘密鍵は、絶対に第三者へ公開しないでください。
特にGitHubなどの公開リポジトリへ誤ってアップロードしないよう注意してください。
秘密鍵が漏えいすると、第三者にEC2へ不正アクセスされる可能性があります。過去には、認証情報をGitHubなどへ誤って公開したことでAWS環境を不正利用され、
仮想通貨のマイニングなどに利用されて高額な料金が発生した事例もあります。
秘密鍵は、自宅PCなどの安全な場所に保管します。
ネットワーク設定は詳しい設定をする必要がありますので、ネットワーク設定の右側にある編集ボタンを押してください。
以下を選択していきます。
| 項目 | 設定値 |
|---|---|
| VPC - 必須 | 今回使用するVPCを選択 |
| サブネット | Public Subnet |
| パブリックIPの自動割り当て | 有効化 |
セキュリティグループは、そのまま使えるので、デフォルトの設定にします。
ここまで設定したら、右側のインスタンス起動ボタンを押します。
しばらくすると成功の緑のバーがあるので、記載されているインスタンスIDを押します。
設定内容となります。ここで大事なのは、パブリック IPv4アドレスだと思います。

インスタンス画面に戻り、ステータスチェックに3/3がつけば、EC2Aは起動しています。

ではEC2Aにログインしてみます。
AWSのEC2にログインするにはいくつか方法はありますが、今回はTera tarmを使用してログインします。
ダウンロードしていない方は、ダウンロードしてください。(最新バージョンでないと、最新のEC2のログインに失敗することがあります。)
tera tarmのホストにパブリックIPアドレスを入れます。その後OKを押します。
初回接続時は、接続先サーバーのホスト鍵を確認するセキュリティ警告が表示されます。接続先が今回作成したEC2であることを確認したうえで、続行します。

ユーザー名にデフォルトのec2-user、パスワードは空白、認証方式は鍵を使うを選択して、所持している秘密鍵を選択してOkを押してください。
続いて、EC2Aがインターネットに出ていけるか確認します。
以下の通りになっていれば、インターネットに正常に接続できています。
コマンド
curl -I https://www.google.com | grep '^HTTP'
結果
HTTP/2 200
プライベートサブネットにEC2Bを作成する。
続いて、プライベートサブネットにEC2Bを作成します。
| 項目 | 設定値 |
|---|---|
| 名前とタグ | EC2B |
OSとインスタンスタイプはEC2Aと同じです。キーペアもEC2Aと同じキーペアを設定してください。
続いて、ネットワーク設定の右側の編集ボタンを押して、詳細設定をします。
| 項目 | 設定値 |
|---|---|
| VPC - 必須 | 今回使用するVPCを選択 |
| サブネット | Private Subnet |
| パブリックIPの自動割り当て | 有効化 |
本来EC2Aを踏み台サーバーとしてEC2Bに接続する場合、パブリックIPの自動割り当ては無効が正しいのですが、
今回はつながらないということを確認するためにあえて、有効化しておきます。
また、セキュリティーグループの設定も本来であれば、EC2BにSSH接続するのに、EC2Aのセキュリティーグループの通信のみを許可しますが、こちらも、つながらないことを確認するためにそのまま(SSH接続であれば、どのIPからも接続可)にしておきます。
すべての設定を確認したら、インスタンス起動ボタンを押します。
同じように、ステータスチェックが完了するまで待ちます。
では、ステータスチェックも終わったので、tera tarmからログイン出来ないことを確認します。

では、正しく接続できるようにします。
EC2Aを踏み台サーバーとしてEC2Bに接続する。
まず、EC2Bに接続するための秘密鍵をEC2Aが持つ必要があるので、自分のPCからEC2に転送します。
転送方法はいくつかありますが、今回は一番簡単なドラッグ&ドロップで実施します。

鍵の送信先はどこでもよいですが、今回は/tmpに持っていきます。
/tmpに鍵が転送されているか確認します。
[ec2-user@ip-10-0-0-199 ~]$ ls -l /tmp|grep pem
-rw-r--r--. 1 ec2-user ec2-user 1678 Mar 20 05:21 test-ec2-key.pem
転送されていました。
次が一番トラブルになりやすいところで、鍵のパーミッションは400に変更します。SSHでは秘密鍵が他のユーザから読み取れる状態になっていると、セキュリティ上の理由から鍵の使用を拒否される場合があります。
踏み台サーバー使用時に、接続できないエラーはまずは鍵のパーミッションを疑ってください。
[ec2-user@ip-10-0-0-199 ~]$ chmod 400 /tmp/test-ec2-key.pem;ls -l /tmp/test-ec2-key.pem
-r--------. 1 ec2-user ec2-user 1678 Mar 20 05:21 /tmp/test-ec2-key.pem
では鍵の状態も整ったので、いよいよEC2Bにログインします。まず、EC2BのプライベートIPアドレスを確認します。
ではEC2Aで次のコマンドを打ちます。
[ec2-user@ip-10-0-0-199 ~]$ ssh -i /tmp/test-ec2-key.pem ec2-user@10.0.2.101
その後、初回接続サーバーだけど接続してよいか?と聞かれるので、そこでyesと打つとつながります。
では、次にインターネットに出られるか確認します。
コマンド
curl -I https://www.google.com | grep '^HTTP'
結果
HTTP/2 200
接続出来ました。ようやく最初に記載した、構成図どおりになりました。
後処理(必ず実施すること。!!!)
では、目的を達したので、今回作成したAWSリソースの削除を行います。削除を行わなかった場合、今回の小規模な構成でも、月約13000円かかりますので、削除します。円安が進めばもっとかかる可能性はあります。
削除するのは逆からがよいと思います。また、基本料金がかからない、VPCやサブネットはそのままでよいかとも思いますが、今回は参考のために削除を実施します。
①EC2A,EC2Bを削除します。削除する場合は、両方にチェックを入れインスタンス終了(削除)を選択します。

終了(削除)を押します。
VPCダッシュボードでNATゲートウェイを選択して、削除します。

NATゲートウェイ削除後、EIPの解放が必要のためしばらく待ちます。
状態がDeletedになったのを確認して、EIPの開放に移ります。
続いて、VPCダッシュボードのElastic IPを選択して、対象のElastic IPの開放を実施します。

最後にVPCからVPC,サブネット,インターネットゲートウェイを削除します。

AWSの学習はリソースの削除を実施するまでが学習です。
以上となります。お疲れさまでした。































