【AWS】踏み台サーバを利用した多段sshを構築しVScodeで接続するまで

 多段sshでサーバーを構築することになったので作業がてらメモ。尚、プライベートサブネット内のEC2からの戻りトラフィックを有効にしたい場合、下記構成にプラスして、NATゲートウェイをパブリックサブネット内におき、プライベートサブネットへのルーティングを設定しないと行けないので追加作業が必要です。(このブログでは書いていませんが)


イメージ図

f:id:spider-man-dance:20210119224139p:plain
aws


ネットワークの設定

VPCの作成

  • IPv4 CIDR block (要はVPCで使用するIPv4アドレスの範囲)については、/16より大きな範囲を指定する事はできない。

f:id:spider-man-dance:20210119224919p:plain
aws vpc

後ほどDNSからホスト名を割り当てられる様、DNSホスト名を有効化する。

f:id:spider-man-dance:20210119232641p:plain


サブネットの作成

  • 先ほどのVPC空間に割り当てられたアドレス範囲内で、public subnetとprivate subnetの2つのサブネットを作成します。
  • 下記キャプチャはpublic subnetの例、先ほど指定したVPCのアドレス範囲(172.31.0.0 ~ 172.31.255.255)の内、172.31.10.0 ~ 172.31.10.255をpublic subnetに分割している。

f:id:spider-man-dance:20210119230404p:plain
サブネット


Internet Gatewayの作成

  • Internet GatewayVPCをインターネットに接続する仮想ルーター
  • detach状態で作成されるため、作成後に先ほどのVPCにアタッチする


Route Tableの作成

  • VPCを作成するとデフォルトでルートテーブルが作成されるので、こちらをprivate用に設定する。
  • 上記とは別にインターネットゲートウェイへのルーティングを持つルートテーブルを作成する。

private route table(デフォルトで作成されたルートテーブル)は分かりやすいように名前をつけておく。

f:id:spider-man-dance:20210119231604p:plain

public用の作成したルートテーブルには、先ほど作成したインターネットゲートウェイへのルートを追加する。 f:id:spider-man-dance:20210119232018p:plain

サブネットの関連付けで[編集]を押下し、先ほど作成したpublic subnetを追加する。

f:id:spider-man-dance:20210119232331p:plain


セキュリティグループの編集

  • デフォルトで作成されたセキュリティグループは「同一セキュリティグループ内の制限なしアクセス」が定義されているだけなので、インバウンドルールを編集する。

f:id:spider-man-dance:20210119233339p:plain

これで、sshのみで接続可能なインスタンスが作成される。

尚、これとは別にprivateサーバー用のセキュリティグループも用意する。


EC2作成

踏み台サーバー作成

(今回OSはubuntu 20.04.LTSで作成)

先ほど作成したVPC領域と、public subnetを指定し、パブリックIPアドレスの自動割り当てを有効化する。 f:id:spider-man-dance:20210119233818p:plain

このインスタンスにはプライベートIPアドレスも指定する。先ほど指定したアドレスの範囲から指定(指定しなければ自動的に割り当てもされる)

f:id:spider-man-dance:20210119234223p:plain

尚、セキュリティグループの設定は先ほど作成した既存のもの(public用)を指定する。


privateサーバーの作成

先ほどのpublicサーバーと殆ど同じだが、自動割り当てパブリックIPを無効化することを忘れずに(仮にIPアドレスが割り当てられても外部からは繋がらない)。尚、割り当てるサブネットやセキュリティグループもprivate用にする。間違えてpublic用にしないように注意


踏み台サーバーからプライベートサーバーにsshアクセス

まず、以下のコマンドで踏み台サーバーへアクセスできることを確認

ssh -i {秘密鍵} {ユーザー名}@{パブリックIPv4アドレス}

f:id:spider-man-dance:20210120214759p:plain

次に以下のコマンドでプライベートサーバーへ外部インターネットから一気にログインできることを確認

ssh -o ProxyCommand='ssh -i {秘密鍵} {ユーザー名}@{踏み台サーバーパブリックIPv4アドレス} -W {プライベートサーバーのローカルIPアドレス}:22' -i {秘密鍵} {ユーザー名}@{プライベートサーバーのローカルIPアドレス}

f:id:spider-man-dance:20210120215532p:plain

同じubuntuマシンなので分かりづらいですが、先ほどの踏み台サーバーとは異なるローカルIPアドレスである事が分かります。 次回以降のログインを楽にするために~/.ssh/configに以下のように追記します。

Host {publicのホスト名}
 HostName {踏み台サーバーパブリックIPv4アドレス}
 Port 22
 User {ユーザー名}
 IdentityFile {秘密鍵}
 ForwardAgent yes

Host {privateのホスト名}
 HostName {プライベートサーバーのローカルIPアドレス}
 Port 22
 User {ユーザー名}
 IdentityFile {秘密鍵}
 ProxyCommand ssh -W %h:%p {publicのホスト名}

そうすれば次回以降ssh {privateのホスト名}で一発ログインできます。楽だし、踏み台サーバーに秘密鍵を置いたりする必要もなく安心です。


VSCode で接続

以前の記事のVSCodeで編集参照