踏み台サーバー経由のEC2へのSSH接続

# この記事の対象者
AWSでの踏み台サーバーとは何かを知り、それがどんなメリットデメリットがあるかを知りたい方
接続方法にはどんな種類があって、その接続方法をざっくりと知りたい方
ここでは、OSは、MACを扱っていきます。

#踏み台サーバーでのアクセス
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/8e4a55b7-ffbd-6949-42e7-d3f3d072028a.png)

ローカル環境やインターネット環境から、直接プライベートサブネット内にあるEC2サーバーにアクセスするのではなく、**パブリックサブネット内にあるEC2サーバー経由**でプライベートサブネット内EC2サーバーにアクセスすることです。

一旦、パブリックサブネット内のEC2サーバーにアクセスするのがポイントですが、このサーバーのことを**踏み台サーバー**と言います。中継サーバーのことですね。

| メリット | デメリット|
|:-|:-|
|  直接インターネットにさらされないので、セキュアなアクセスにできる | 接続手順が複雑  |
|  アクセスが踏み台サーバー経由に限定されるので、プライベートサブネットのEC2サーバーの負荷が軽減できる | ログインユーザーが増えた場合に秘密鍵を管理するのが手間になる  |

#プライベートサブネット内EC2への接続方法

①踏み台サーバー経由のEC2へのSSH接続
今回のメインテーマですね。以下に解説させていただきます。

②[AWS System Manager Session Maneger](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager.html)を使用する
ここでは、扱いませんが、トレンドな技術なのでいずれは扱っていきたいですね。
CLIを使用して踏み台サーバーなしでダイレクトにプライベートEC2インスタンスにアクセスできます。

#接続手順
![１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/3c7431ed-ba40-906e-17b4-88316eae3fd6.png)

①vpcを作成
②サブネットを作成
③vpcにインターネットゲートウェイをアタッチ
④ルートテーブルの設定
⑤EC2インスタンスを設置
⑥NATゲートウェイをパブリックサブネットにアタッチ
⑦セキュリティーグループの設定
⑧プライベートサブネットEC2インスタンスへのログイン


・vpcを作成してその中に、プライベート・パブリックサブネットを作成します。インターネットゲートウェイをアタッチしてパブリックサブネットから外部への通信を通します。各サブネットにEC2インスタンスを設置します。ナットゲートウェイをパブリックサブネットに設置して、プライベートEC2インスタンスから**外部へ**の通信が通るようにします。
##VPCの作成
![スクリーンショット 2021-11-09 21.44.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/3e117c8e-8e42-5573-7d87-56b53ce14eec.png)
名前タグ：適当な名前
IPv4 CIDERブロック：10.0.0.0/21　　
・ここでIPアドレスの使用範囲を設定しています。「/21」で区切ることにより、10.0.0.0 から10.0.7.255の間の2,048個IPアドレスがこのvpc内で使用できるようにしています。CIDR 表記では /28～/16 がvpcの範囲になります。
・上記を例にして作成ボタンを押しましょう。

##サブネットの作成
・サブネットは、vpcのIPアドレスレンジのことです。vpcの中でさらに使用できるIPアドレス範囲を指定して、その論理的な空間に対して役割を持たせます。外部と通信する場合は、パブリックサブネットになり、そうでない場合は、結果としてプライベートサブネットと呼ばれます。パブリックサブネットにするためには、vpcにインターネットゲートウェイをアタッチする必要があります。
サブネットは、最大で２００個作成できます。

まずは、パブリックサブネットから作成していきましょう。
![スクリーンショット 2021-11-09 21.52.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/e72acc93-639d-fa9e-7d8b-d934ffa4a005.png)
・vpc→サブネット→サブネットを作成まで進みます
・vpc ID：今回作成したvpcを選択します

![スクリーンショット 2021-11-09 21.53.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/deb9452f-3bdf-2447-f509-bb9cc7b5c38d.png)

・アベイラビリティーゾーン：東京リージョンの１a
アベイラビリティーゾーンとは、１つまたは複数のデータセンターの集合体のことで、vpcが論理的な区分であるのに対して、アベイラビリティーゾーンは、物理的な区分になります。
・IPv4 CIDERブロック：10.0.0.0/24
サブネットのCIDERブロック範囲もvpcと同様/28～/16 となります。
１つのサブネットを作成するごとに、５つのIPアドレスを消費します。内訳は、ネットワークアドレスとブロードキャストアドレスでそれぞれ１つずつ、AWSが予約しているアドレスが３つです。
・サブネットの種類は、パブリックサブネット、プライベートサブネットの他にナットサブネット、トランジットサブネットなどがありますが、主にこの２つだけ押さえておけば問題ないと思います。

##vpcにインターネットゲートウェイをアタッチ
![スクリーンショット 2021-11-09 21.55.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/72b9ab57-dd06-1169-33f7-82bc3471b072.png)
・インターネットゲートウェイの作成をクリック

![スクリーンショット 2021-11-09 21.56.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/44e02119-df35-ef5e-5167-2708cd0eeba4.png)

・名前をつけて作成しましょう

![スクリーンショット 2021-11-09 22.03.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/1b1aeafb-e49e-0585-0093-bd3c8ff2f976.png)
・アクションタブの中の「vpcにアタッチ」
![スクリーンショット 2021-11-09 22.06.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/04789780-9785-445e-243a-b8c7443ea6d2.png)
・今回作成したvpcを選択してアタッチ

##ルートテーブルの設定
ルートテーブルとは、サブネットの通信の経路を定めたルールのことです。今回のケースでは、サブネットからインターネットゲートウェイへの通信するルートテーブルを作成します。
![スクリーンショット 2021-11-09 22.15.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/6a8bb6d1-14a8-f81c-f62a-aba70c297f04.png)
・サブネット→作成したパブリックサブネットを選択→ルートテーブルタブをクリック
![スクリーンショット 2021-11-09 22.17.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/a25b0d0b-88c5-1f78-41c0-d4402e599e17.png)
・ルート編集でこの画面に入ったら、「ルートを追加」をクリック
送信先：0.0.0.0/0　　　　
ターゲット：作成したインターネットゲートウェイ
このルールの追加により、サブネットからインターネットゲートウェイへ通信できるようになります。

##EC2インスタンスの設置
**パブリックサブネット**
作成したパブリックサブネットとプライベートサブネットにそれぞれEC2インスタンスを配置していきます。
![スクリーンショット 2021-11-09 22.30.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/9bdc48ea-8714-0210-5d68-3d273fac1901.png)
・EC2画面に入り、「インスタンスを起動」をクリック

![スクリーンショット 2021-11-09 22.30.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/0f5a7dc3-7fed-0cf0-ede0-8e412a36ceb6.png)
![スクリーンショット 2021-11-09 22.31.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/381f8f6d-ba74-d882-bb63-7c101c1e8bee.png)
・無料枠が使える方は、無料枠用のAmazon Linuxを選択していきます。

![スクリーンショット 2021-11-09 22.31.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/b554eedb-87bb-5091-f506-3a777c8b86ae.png)
・ネットワーク：作成したvpc
・サブネット：作成したパブリックサブネット
・自動割り当てパブリックIP：有効
![スクリーンショット 2021-11-09 22.32.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/eaecd37b-68aa-478c-8027-42fc64a5b60f.png)
・タグの作成では、Nameキーに、分かりやすい名前を値に入力しておきます。
![スクリーンショット 2021-11-09 22.32.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/3f2920dc-b165-51f4-cb70-339d9c2d3660.png)
タイプ：SSH
ソース：カスタム
![スクリーンショット 2021-11-09 22.33.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/53eb47c2-581a-e20b-52b1-d8807c352d63.png)
・次に進み、起動をクリック。EC2インスタンスにアクセスするためのキーペアを新規で作成してダウンロードするか、既に作成してある場合は、既存のキーペアを使用するかをこの画面で選択していきます。今回の例では、作成済みのため、既存のキーペアを選択。インスタンスの作成をクリックしましょう。
![スクリーンショット 2021-11-09 22.33.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/2a4b46bb-a49e-1bcf-3f88-7176a7ec5d01.png)
・インスタンスの状態が実行中になったことを確認

次に作成したEC2インスタンスへのアクセスは、パブリックIPアドレスを経由することになりますが、インスタンスが停止してしまうと、パブリックIPアドレスが変わってしまい、固定してアクセスしたい人にとって使い勝手がいいとは言えません。
そこで、外部アクセス用のアドレスを固定するために、ElasticIPをアタッチします。
ElasticIPは、EC2インスタンスにアタッチされていて、かつそのインスタンスが実行中であれば、無料となりますが、追加した場合やアタッチされていない場合は、単位時間で使用料金が請求されるので注意しましょう。

![スクリーンショット 2021-11-13 22.14.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/86fbc50e-18b5-ca1a-69d3-d742e1150b2b.png)
・左メニューのElastic IPから「Elastic IPアドレスを割り当てる」をクリック

![スクリーンショット 2021-11-13 22.14.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/f5191ebb-716f-a626-9359-ab949fb1409f.png)
ネットワークボーダーグループは、EC2インスタンスを作成したときのアベイラビリティーゾーンを選択

![スクリーンショット 2021-11-13 22.14.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/90bd30a4-5a6c-2d31-b3f6-f1ca1be8a7dd.png)
・作成できたら、アクション→Elastic IPアドレスの関連付け　と進んでいきます
![スクリーンショット 2021-11-13 22.15.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/8cddc2ff-34f6-32bd-aa53-638b1d937f14.png)
作成したEC2インスタンスを選択して、関連付けます。

**プライベートサブネットへのEC2インスタンス設置**
パブリックサブネットへのEC2設置との差異を説明していきます。

![スクリーンショット 2021-11-13 22.35.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/e911df79-3657-4de6-4653-f2f09ad772d4.png)
・パブリックサブネットへのEC2インスタンス設置と同様に、プライベートもEC2インスタンスを作成していきます。
ネットワーク：作成したvpc
サブネット：プライベートサブネット
自動割り当てパブリックIP：無効化　　

##パブリックサブネットへNATゲートウェイのアタッチ
NATゲートウェイとは、ネットワークアドレス変換サービスです。パブリックサブネットに設置し、多対１のアドレス変換を行います。プライベートサブネットからはインターネットにアクセスしたいけど、インターネットからプライベートサブネットにアクセスされたくない場合に使用します。

![スクリーンショット 2021-11-15 21.37.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/c8c2357f-89da-9e1d-bd4c-75c789ad948d.png)
vpcから左メニューのNATゲートウェイ→NATゲートウェイの作成と進む

![スクリーンショット 2021-11-15 21.40.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/49478192-7403-43c6-b717-ed98e1d9f0c8.png)
サブネット：作成したパブリックサブネット
接続タイプ：パブリック
ElasticIPの割り当てをクリックして、NATゲートウェイを作成します。

##セキュリティーグループの設定
EC2インスタンスにどの通信を許可するのか設定していきます。今回は、SSH接続で全てのIPアドレスからの通信を受け入れるという設定にしますが、本来ここでは、IPアドレスの範囲を指定したりして、セキュリティを高めます。作成したセキュリティーグループをEC2インスタンスにアタッチしていきます。
**パブリックサブネット**
![スクリーンショット 2021-11-12 22.54.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/e83ab3c7-1d6e-c510-9bec-6c3563fa18b8.png)
・vpc→セキュリティーグループ→セキュリティーグループを作成
![スクリーンショット 2021-11-12 22.55.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/3ba4d4d9-5cd3-e696-1a21-806e28fe4c84.png)
・作成したvpcを選択
・インバウンドルール　
タイプ：SSH 今回は、0.0.0.0/0とします。
・説明オプション：区別できる名前をつけます。
![スクリーンショット 2021-11-09 22.53.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/b94c83d4-8d8c-5c4c-bbb9-61da4c7824a8.png)
上記で作成したセキュリティーグループをパブリックサブネットにアタッチしていきます。
・作成したEC2インスタンスを選択します。アクション→セキュリティ→セキュリティーグループと進みます。
![スクリーンショット 2021-11-12 23.07.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/3e616a56-e48c-6fa9-8adb-1f3e2a703778.png)
・作成したセキュリティーグループを選択して、EC2にアタッチされていたセキュリティーグループを削除します。

**プライベートサブネット**
![スクリーンショット 2021-11-15 22.02.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/13b3c996-2301-6795-9d96-9e2e9715df73.png)
プライベートサブネット用のルートテーブルを作成していきましょう
vpcは、今回作成したvpcを選択します。

![スクリーンショット 2021-11-15 22.02.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/a3e7ad89-3646-5875-350f-3931c1251efb.png)
作成したら、編集していきます。ルート→ルートを編集へ進みます。

![スクリーンショット 2021-11-15 22.03.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/f74f7a73-d7db-701e-d6d0-dcedad3bfff9.png)
ルートを追加
送信先：0.0.0.0.0/0 
ターゲット：今回作成したNATゲートウェイ

![スクリーンショット 2021-11-15 22.04.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/d2c6aa30-aa8d-0908-30f9-76091763d9ef.png)
アクション→サブネットの関連付けを編集

![スクリーンショット 2021-11-15 22.15.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/5b47de0f-fdd3-9441-8d29-75d28acefd34.png)
作成したプライベートサブネットを選択して保存

##プライベートサブネットEC2インスタンスへのログイン
最後に、EC2インスタンスへログインします。
流れとしては、パブリックサブネットEC2インスタンスにキーペアをアップロードして、パブリックEC２インスタンスにログインした状態でアップロードされたキーペアを使用して、プライベートサブネットEC2へログインとなります。

MAC OSの方は、ターミナルを起動します。

~~AWS~~　SSHサーバー・クライアントの仕様でキーペアの権限を読み取り専用にしてあげないと、ログインできないので、権限を変更します。

```
chmod 400 (キーペア名)
```
次に、SCPコマンドでパブリックサブネットにキーペアを転送します。

```
scp -i (キーペア名)　(アップロードファイルの指定＝キーペア名) ec2-user@(パブリックIPアドレスorElastic IPアドレス):(アップロード先フォルダの指定)
```

アップロードができると、ターミナル右側に下のような表示がされます
![スクリーンショット 2021-11-16 21.43.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697228/6b485306-34b4-5430-fbf6-17abacc05f8d.png)

キーペアをパブリックサブネット内EC2インスタンスへアップロード後、ローカル環境からパブリックEC2インスタンスへログインします。

```
ssh -i (キーペア名) ec2-user@(パブリックIPアドレスorElastic IPアドレス)
```

パブリックEC2インスタンスにログイン後、cdでアップロードフォルダまで移動します。
移動後、そのアップロードしたキーペアを仕様してプライベートサブネットEC2へログインします。
ログイン方法は、上記sshコマンドを使用して、＠以降をプライベートサブネット用のIPアドレスを使用するだけです。

___
この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com
___