【AWS】初の環境構築② ~踏み台サーバー経由でプライベートサブネット内のインスタンスに接続してみた~

# はじめに
インフラ初心者の私がAWS Cloudtechを通して学んだことを記録&アウトプットするための備忘録です。
[こちら(初の環境構築①)](https://qiita.com/hargen888/items/f5011ee8955215351ae4)の記事の続きです。
※実際に手を動かしたあとにこちらの記事を作成しているため、キャプチャの内容に多少の違和感を感じるかもしれませんが、あまり気にしないでください笑

# 動作環境
・Windows10
・Tera Term(Ver4.105)

# 実現したいこと
自宅PC(Windows10環境)からssh接続でプライベートサブネット内のインスタンスにログインする。

# 環境構築(最終的な環境)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/baf56d13-ebba-d663-0aa2-d347b04ecf0a.png)

## 構築~ログイン手順

### 自宅PC～Public subnet内のEC2(踏み台サーバー)へのログイン
こちらについては講座内でも紹介されている以下の記事を参考にしてログインすることができました。
※手順は割愛します。

*参考*
[■windowsでEC2にログインする手順（Tera Termを使用） 【初心者向け】Amazon EC2にSSH接続する【Windows、Macintosh】](https://dev.classmethod.jp/articles/aws-beginner-ec2-ssh/)

### Elastic IPアドレスの作成
インスタンスを停止したり、再起動したりするとインタンスに割り当てられているパブリックIPアドレスが変わってしまうため、Elastic IPアドレスを作成します。

※パブリックIPアドレス(グローバルIPアドレス)が変わるとなんで駄目なの？なんで固定するの？と気になった方は以下のサイトを読んでみてください。(簡潔にまとめるとパブリックIPアドレスが頻繁に変わると外部からアクセスができなくなる。)
https://www.tramsystem.jp/voice/voice-3561/

①左ペインから、Elastic IPを選択し、[Elastic IPアドレスの割り当て]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/d26bfd68-e03f-0d5c-105d-beca66aadde3.png)

②[割り当て]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/1e654879-bcd2-df6d-f20b-ef7425dee857.png)

③アクション→Elastic IPアドレスの関連付けを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/7dc71374-03e7-68bf-051a-ea754cf6b93f.png)

④[関連付ける]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/489da221-507f-cb11-324c-ebd4a01b27cb.png)

⑤指定したインスタンスにElastic IPアドレスが割り当てられていることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/41a9632b-ab8a-ef50-994b-007333ebcec5.png)

※パブリックIPアドレスを変更されたため、Private Subnet内のインスタンスにログインする際は新しく割り当てたIPアドレスで再ログインする必要があります。

### Private Subnet内でのインスタンス作成
※手順割愛

現在の構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/2fe2253e-d2d3-e15b-2fd2-d13d65b67c09.png)

###踏み台サーバー～Private Subnet内のインスタンスへのログイン

<details>
<summary>講座内ではMac環境でこのような手順で進めていました。(超ざっくり)</summary>
①デスクトップ(ローカル)上の秘密鍵をscpコマンドでPublic subnet内のインスタンスに配置
②sshコマンドでPublic subnet内のインスタンスにログイン
③sshコマンドでPublic subnet内のインスタンスからPrivate subnet内のインスタンスにログイン
</details>

Macの場合は「ターミナル」を使って作業していました。
Windowsの場合はどうやって、ローカル上の秘密鍵をPublic Subnet内にインスタンスに配置するのかを調べてみました。
実際に私がどういった手順でログインしたかを記載していきます。

①作成したkeyをコンソール上にドラッグ&ドロップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/19546782-76dd-e122-fcba-08b97be31bdc.png)

秘密鍵が配置されていることを確認しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/f8629e49-84cc-fa6f-5933-a459ebda345c.png)

参考
[TeraTermで効率良くファイル転送](https://qiita.com/go-to/items/409e32116213bdf4b1ce)

②秘密鍵を指定してprivate subnet内のインスタンスにsshログイン
※接続先のインスタンスのプライベートipアドレスを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/7563ffb0-427d-6970-4ba9-47376984f2a9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/f693d03a-606b-aadc-3f81-c7ffad9e7b8d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/59028ed5-5db6-c1a9-a095-7f309d3c1a85.png)

怒られました。このままだとログインできないようです。
パーミッションが'644'で誰でも見れるようになっているため。'400'に変更する必要があります。

参考
[【SSH】公開鍵認証とEC2について](https://qiita.com/aiandrox/items/98ad9b7551481d890916)
[Linuxコマンド【 ssh 】リモートマシンにSSHでログイン](https://webkaru.net/linux/ssh-command)

権限変更後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/55b018e2-cdd6-aaba-3cfa-e089de4c6213.png)

再度ログインしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/67e64122-86fb-b2ae-feb2-6d97ce892efa.png)

今度は無事にログインすることができました！！

### NAT Gatewayの作成
Private Subnet内のインスタンスからインターネットへの接続をできるようにするためにインターネットゲートウェイを作成する。(プライベートサブネット内から外部への発信をできるようにします。)
※外部から内部への発信はできません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/86188edb-6f8b-7406-0e5d-c616a5cee8c7.png)

1.左ペインから[NATゲートウェイ]を選択し、[NATゲートウェイを作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/c2465190-aa44-d776-7f08-7503dfe7f37a.png)

2.画像の通り、3箇所指定し[NATゲートウェイを作成]をクリック。(サブネットはpublic subnetのものを、ELastic IPは[Ekastic IPの割り当て]を選択)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/5a24ae63-62b4-812e-c42b-e8261efc23b4.png)

3.作成したNATゲートウェイのステータスが変わる間に、ルートテーブルを作成する。
VPCはtest-vpcのものを指定し、[作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/7d9a589e-8fd5-3baf-9544-74b679309c3c.png)

4.作成したルートテーブルにルートを追加する。(送信先：0.0.0.0/0　ターゲット：NATゲートウェイ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/be95ac4a-85f9-47e0-5cbe-6af4ff88e6a7.png)

新しく設定したルートが追加されたことを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/418e73f6-0723-5010-2f21-de236fe24d4d.png)

5.private subnetに作成したルートテーブルを関連付ける。
左ペインから[サブネット]を選択。対象のsubnetを選択し、アクション→ルートテーブルの関連付けを編集を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/ab773726-d06a-ddf4-ca37-eb984ebd6f5e.png)

6.ルートテーブルIDに作成したルートテーブルを指定して[保存]をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/54cfdd81-0933-8928-4e62-697ba2fc7531.png)

private subnetに作成したルートテーブルが関連付けできていることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/f8281215-5780-6524-516d-4a7194a39959.png)

現在の構成図
やっと完成しました！！！
自分で環境構築＆作図するの楽しいです笑
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/1ba3ed61-4eb6-c859-9739-88da0486d2ff.png)

# 環境の削除
作成した環境を残しておくとお金がかかってしまうため削除します。
※手順は以下です。(詳細手順は割愛)
①EC2インスタンスの削除
②NATゲートウェイの削除
③②の削除後にElastic IPアドレスの解放
④VPCの削除
※VPCを削除するとセキュリティグループ、インターネットゲートウェイ、ルートテーブル等依存関係があるものが全て削除される。(すごくありがたい)

# 終わりに
自分用に2回に分けて環境構築の記事を作成しました。
記事の作成にはすごく時間がかかりましたが、動画の視聴＆実際に手を動かす、記事の作成(復習&output)で知識がかなり定着したと思っています！
今後は自分用だけでなく、多くの人のためになる記事の作成もしてみたいと思っています。
時間はかかると思いますが、講座の受講&記事の作成を頑張っていきます！！

以下の記事やサイトが今後役に立ちそうだから残しておこう。

[コマンドリファレンス](https://webkaru.net/linux/command-reference/)
[Markdown記法 チートシート](https://qiita.com/Qiita/items/c686397e4a0f4f11683d#details---%E6%8A%98%E3%82%8A%E3%81%9F%E3%81%9F%E3%81%BF)
[読み手をイライラさせない技術記事などを書くために最低限守ったほうがいいこと](https://qiita.com/freddi_/items/fe8e878187f315d80d87)

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