AWS 基礎 Part 5 -- 踏み台と本番用の EC2 インスタンスを作成する
Tags: aws, ec2
Published: 2023-01-29 14:10:09



## VPC 1 つとサブネット 3 つを作成

- 全てを包括する VPC
- 踏み台サーバーとロードバランサーを入れる公開サブネットA
- ロードバランサーを入れる公開サブネットC
- 本番の非公開サーバー A と C を入れる非公開サブネットA

これらを作成する。

https://youtu.be/Y-Mc2OenReA?t=998

クラインさんの動画を参考にする
インターネットゲートウェイ周りは略されているので注意。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3mgnpi67nf466w128tj2.png)

- 10.1.0.0/16 に vpc-elb-ec2 の名前で VPC 作成

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zasd5dc41lv0m8ktp9p1.png)

- 10.1.0.0/24 に klein-public-1a  の名前でサブネット作成
- 10.1.1.0/24 に klein-private-1a の名前でサブネット作成
- 10.1.2.0/24 に klein-public-1c  の名前でサブネット作成

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rzll1rqd2yyz9ef5uswf.png)

- インターネットゲートウェイ (igw-0adc) を作成
- VPC (vpc-elb-ec2) に接続
- サブネットのルートテーブルにインターネットゲートウェイ (igw-0adc) を接続

---

## EC2 インスタンス 2 つを作成。動作用。

https://youtu.be/Y-Mc2OenReA?t=1049

- 名前に elb-ec2-test-A
- マシンイメージ に Amazon Linux 2 
- インスタンスタイプに t2.micro
- VPC に　vpc-elb-ec2
- サブネットに klein-private-1a
- セキュリティグループのポート番号に 80
- セキュリティグループのソースに 10.1.0.0/24

これでローンチする。

次にキーペアを作成する

- 名前に elb-ec2-test-key
- キーペアタイプに RSA
- プライベートキーのフォーマットに .pem

これで作成して DL する。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3rp6pob4bgig6ncyig96.png)

すると、インスタンスが作成できる。

同様に

elb-ec2-test-B も作成する。

A と同じ VPC とサブネット内部に作る。

- セキュリティグループ
- キーペア

これらは A で作ったのを利用。

---

## EC2 インスタンスを更に 1 つ作成。踏み台用。
　
- 名前を elb-ec2-step
- サブネットに klein-public-1a
- 自動割り当て Public IP に 有効
- セキュリティグループに ポート22 で ソース 0.0.0.0/0

キーペアは A　で作ったものを利用。
セキュリティグループは、本当は作業用ローカルマシンの IP に絞るべきらしい。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uchfmcijv0l5iaqrukjm.png)

これで、以下の役割の EC2 インスタンス 3 つが作成できた。

- elb-ec2-test-A: 実際のサーバー
- elb-ec2-test-B: 実際のサーバー
- elb-ec2-step: 踏み台サーバー

---

## EC2 インスタンスに入る準備をする

ローカルの ~/Downloads には先ほど　DL した elb-ec2-test-key が入っている状態。

これを使って先ほど作成したインスタンスにローカルからアクセスする。

```php
cp -a elb-ec2-test-key.pem ~/.ssh
```

.ssh フォルダにコピーして

```php
chmod 600 ~/.ssh/elb-ec2-test-key.pem
~/.ssh/elb-ec2-test-key.pem
-rw-------@ 1 kaede0902  staff  
1674 Jan 28 17:01 
/Users/kaede0902/.ssh/elb-ec2-test-key.pem
```

ルートのみ読み書きの権限をつける。

これで　ssh 接続できるようになるらしい。

---

## ローカルPC から踏み台サーバーに public IP と鍵で ssh 接続する

https://youtu.be/Y-Mc2OenReA?t=1686

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zwryku7k6l6ua7fz24zy.png)

踏み台サーバー elb-ec2-step の public IP アドレスを確認

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

ssh -i + インスタンスのキー + ユーザー名(新規?)@インスタンスの public アドレス

これでログインできる

```php
ssh -i ~/.ssh/elb-ec2-test-key.pem \
ec2-user@18.***.**.**

The authenticity of host '18.***.**.**'
can't be established.                                
ED25519 key fingerprint is SHA256:****/****.

This key is not known by any other names                                                                    
Are you sure you want to continue connecting (yes/no/[fingerprint])? 

yes

Authenticated to 18.18.***.**.** 
([18.***.**.**]:22) using "publickey".

[ec2-user@ip-10-*-*-*** ~]$ 
```

実際にやってみると ec2-user として ec2 インスタンスに
接続することができた。

---

## ローカルPC から踏み台サーバーに SSH 鍵をコピーする

https://youtu.be/Y-Mc2OenReA?t=1836

SCP コマンドで、鍵を踏み台サーバーにコピーする。

https://e-words.jp/w/scp%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89.html

SCP コマンドは、別のマシンにファイルを送信するコマンド。

https://qiita.com/chihiro/items/142ebe6980a498b5d4a7

-i の指定で ssh 鍵を転送する。

この鍵は先ほどローカルPC に DL して、踏み台サーバーへの接続にも使った鍵だ。
またこの鍵はプライベートサーバーに接続するためにも使える。

なので踏み台サーバーからプライベートサーバーに繋ぐために SCP コマンドで踏み台サーバーとプライベートサーバーで共通のこの鍵をコピーする。

https://hacknote.jp/archives/49429/

scp コマンドはこの記事を参考にして

```php
scp -i keyFile keyFileFolder/keyFile /
ec2-user@{ipaddress}:path
```

このように

- 接続のために使うキー
- 今転送するものが置いてある場所
- 送るユーザー@IPアドレス:/転送するものを置くディレクトリ

を指定して送るようだ。

```php
scp -i \
~/.ssh/elb-ec2-test-key.pem \
~/.ssh/elb-ec2-test-key.pem \
ec2-user@18.***.**.**:/home/ec2-user/

elb-ec2-test-key.pem
100% 1674   115.4KB/s   00:00
```

これで転送できた。

転送先に /home/ec2-user/ と絶対パスで書くのは必要だった。
相対パスの ~ では開けなかった。

---

## 踏み台サーバーからプライベートサーバーに SSH 接続する

```php
ssh -i ~/.ssh/elb-ec2-test-key.pem ec2-user@18.***.**.**

ls
elb-ec2-test-key.pem
```

ホームディレクトリに鍵ファイルが入っているのを確認できた。

```php
mv elb-ec2-test-key.pem ./.ssh/
```

.ssh/ フォルダに移す。

```php
ssh -i .ssh/elb-ec2-test-key.pem ec2-user@10.*.*.*

[ec2-user@ip-10-*-*-* ~]$ 
```

この鍵を使ってサーバー A にプライベートアドレス指定で接続する。

これでプライベートになっている サーバー　A にアクセスすることができた。

---

## まとめ

踏み台サーバー経由でしかアクセスできない EC2 サーバーを作るためには

1. VPC 内部の同じリージョンA に同じ鍵を利用して、踏み台サーバーのサブネットと本番サーバーのサブネットを作成。鍵はローカルに DL される。
2. 各サブネットに EC2 インスタンスを作成。
3. VPC と 踏み台サーバーのサブネットにインターネットゲートウェイを接続。
4. ローカルで ssh コマンドで、鍵を使って public アドレスで踏み台サーバーに SSH 接続確認。
5. ローカルで scp コマンドで、鍵を使って踏み台サーバーに鍵をコピー。
6. 踏み台サーバーに鍵を使って入って、private アドレスで本番サーバーに鍵を使って SSH 接続。

これでインターネットからはアクセスできないが、同一 VPC 内部にある踏み台サーバーからはアクセスできる本番サーバーを作ることができる。