💨

[AWS]踏み台サーバーを経由してプライベートサブネットにあるEC2インスタンスに接続する

2023/06/04に公開

Bustionを経由してPrivate SubnetにあるEC2 instanceに接続する

DevelopersIO BASECAMP参加者の加藤です。

今回はマネジメントコンソールを利用して、踏み台インスタンス経由でプライベートサブネットのインスタンスに接続する手順を確認してみたいと思います!


前提

・今回のローカル環境はMAC端末です。
(※Windows端末での作業の場合はお手数ですが必要箇所を読み変えていただくようお願いします。)

・当記事はバージニア北部で作業していますが、お好きなリージョンで問題ありません。


「VPC」コンソール

「VPC」コンソールに移動します。


VPCを作成

コンソール左サイドカラムから「お使いの VPC」をクリックし、「VPCを作成」ボタンをクリックします。


名前タグ - オプション:「test-vpc」
IPv4 CIDR:「10.0.0.0/16」

として、「VPCを作成」します。


作成されました。


Subnet×2を作成

パブリックサブネットを作成

コンソール左サイドカラムから「サブネット」をクリックし、「サブネットを作成」ボタンをクリックします。


VPC ID:(test-vpc)
サブネット名:「test-subnet-public」
アベイラビリティーゾーン:一番上の選択肢
IPv4 CIDR ブロック:「10.0.0.0/24」

として、「サブネットを作成」します。

プライベートサブネットを作成

同様に
VPC ID:(test-vpc)
サブネット名:「test-subnet-private」
アベイラビリティーゾーン:一番上の選択肢
IPv4 CIDR ブロック:「10.0.1.0/24」

として、「サブネットを作成」します。


Internetgatewayを作成しVPCへアタッチ

作成

コンソール左サイドカラムから「インターネットゲートウェイ」をクリックし、「インターネットゲートウェイを作成」ボタンをクリックします。


名前タグ:「test-igw」

として、「インターネットゲートウェイを作成」します。

VPCへアタッチ

上部に作成完了を知らせる緑帯が表示されますので、「VPCへアタッチ」をクリックします。


使用可能なVPC: (test-vpc)

として、「インターネットゲートウェイのアタッチ」をクリックします。


アタッチが完了しました。


ルートテーブル×2を作成し、ルートを編集し、サブネットへ関連付け

パブリックサブネット用

作成
コンソール左サイドカラムから「ルートテーブル」をクリックし、「ルートテーブルを作成」ボタンをクリックします。


名前 - オプション:「test-rtb-for-public」
VPC:(test-vpc)

として、「ルートテーブルを作成」します。

ルートを編集
作成されたルートテーブル詳細の「ルート」タブ(以下部分)から「ルートを編集」をクリックします。


「ルートを追加」をクリックします。


送信先:「0.0.0.0/0」
ターゲット「インターネットゲートウェイ」

をクリックします。


「test-igw」を選択します。


「変更を保存」します。


元々存在した
送信先:「10.0.0.0/16」
ターゲット:「local」

に加えて、ルート追加された事が確認出来ました。

パブリックサブネットへ関連付け
今度は「サブネットの関連付け」タブ(以下部分)から「サブネットの関連付けを編集」をクリックします。


「test-subnet-public」にチェックを入れて、「関連付けを保存」します。


プライベートサブネット用

作成
名前 - オプション:「test-rtb-for-private」
VPC:(test-vpc)

として、「ルートテーブルを作成」します。

ルートを編集
こちらのルートテーブルは今回はルートの編集はしません。

パブリックサブネットへ関連付け

「test-subnet-private」にチェックを入れて、「関連付けを保存」します。


EC2用のセキュリティグループ×2を作成

踏み台インスタンス用

コンソール左サイドカラムから「セキュリティグループ」をクリックし、「セキュリティグループを作成」ボタンをクリックします。


セキュリティグループ名:「test-sg-for-bustion-instance-on-public」
(※画像では命名ミスで「-instance-」が抜けていますが、気にしないでください。)
説明:「for bustion.」
VPC: (test-vpc)

とします。


「インバウンドルール」ブロックの「ルールを追加」をクリックします。


タイプ:「SSH」
ソース:「マイIP」

を選択します。


「セキュリティグループを作成」します。


ターゲットインスタンス用

セキュリティグループ名:「test-sg-for-target-instance-on-private」
(※画像では命名ミスで「-instance-」が抜けていますが、気にしないでください。)
説明:「for target.」
VPC: (test-vpc)

とします。


「インバウンドルール」ブロックについては、

タイプ:「SSH」
ソース「カスタム」

とし隣接した虫眼鏡のついた欄から「test-sg-for-bustion-instance-on-public」を選択します。


「セキュリティグループを作成」します。


「EC2」コンソール

「EC2」コンソールに移動します。

EC2×2を作成

踏み台インスタンスを作成

コンソール左サイドカラムから「インスタンス」をクリックし、「インスタンスを起動」ボタンをクリックします。


名前:「test-instance-bustion-on-public」とします。
(以後、記事作成時点とのコンソール画面やサービス仕様の変更のない限りは、無指定部分はそのままで問題ありません。)


「新しいキーペアを作成」リンクテキストをクリックします。


キーペア名:「test-bustion-keypair」

として、「キーペアを作成」します。


「test-bustion-keypair.pem」がローカルに保存されます。


「ネットワーク設定」ブロックから「編集」をクリックします。


VPC - 必須:(test-vpc)
サブネット:「test-subnet-pubric」
パブリック IP の自動割り当て:「有効化」
ファイアウォール (セキュリティグループ) :「既存のセキュリティクループを選択する」
共通のセキュリティグループ:「test-sg-for-bustion-instance-on-public」(画像では命名ミスで「-instance-」が抜けていますが気にしないでください。)
とします。


「インスタンスを起動」します。


ターゲットインスタンスを作成

上記と同様に、作成していきます。

名前:「test-instance-target-on-private」とします。


キーペアは「test-target-keypair」とします。


「test-target-keypair.pem」がローカルに保存されます。


VPC - 必須:(test-vpc)
サブネット:「test-subnet-private」
パブリック IP の自動割り当て:「無効化」
ファイアウォール (セキュリティグループ) :「既存のセキュリティクループを選択する」
共通のセキュリティグループ:「test-sg-for-target-instance-on-private」

とします。


「インスタンスを起動」します。

pemファイルの確認

ローカルにそれぞれのpemファイルがダウンロードされている事を確認してみます。

私の場合は「ダウンロード」フォルダで2ファイルを確認出来ました。

インスタンスの状態確認

数分待つと両インスタンスが
インスタンスの状態:「実行中」
ステータスチェック:「2/2のチェックに合格しました」

となります。


ターミナル作業

busion用のpemファイルを移動し、権限を変更

ローカル端末上で、先ほどのpemファイルがあるディレクトリへ移動して、test-bustion-keypair.pemのフルパスをコピーします。
(macであれば右クリック→optionを押しながら”〇〇”のパス名をコピー で取得出来ます。)

ターミナルを起動して、bustionのpemファイルを移動するコマンドを実行します。

mv [コピーしたtest-bustion-keypair.pemのフルパス]  ~/.ssh


チェンジディレクトリで移動先のフォルダへ行きます。

cd ~/.ssh


同pemファイルの権限を変更します。

chmod 600 test-bustion-keypair.pem

ローカル端末から一度踏み台インスタンスへ接続してみる

踏み台インスタンスにチェックを入れて、「接続」をクリック


下記部分をクリックし、コマンドをコピー。


ターミナルでコピーしたコマンドを実行し、「yes」を入力しEnter

無事接続出来ました。

ちなみに

以前までのLinux AMIでお馴染みだったログイン成功の見た目がこちらでした。


無事確認出来ましたので一旦ローカルに戻りたいと思います。

exit

踏み台サーバーへ、ターゲットインスタンス用のpemをscpする

次に実行するコマンドの為に、事前に二つの値を用意します。

①先ほどと同じ手順で「test-target-keypair.pem」ファイルのフルパスをコピーして控えます。

②ブラウザからEC2コンソールに移動し、踏み台用のインスタンスの詳細から以下部分をクリックし値をコピーします。



それぞれを以下の部分に置き換え、ターミナルからコマンドを実行します。

scp -i test-bustion-keypair.pem [①でコピーしたtest-target-keypair.pemのフルパス] ec2-user@[②でコピーしたbution-instanceのパブリック IPv4 アドレス]:~/.ssh


踏み台インスタンスの「~/.ssh」ディレクトリにpemファイルを配置出来ました。


踏み台インスタンスでpemファイルの権限を変更する

もう一度、踏み台インスタンスに接続し、以下2コマンドを実行します。

cd ~/.ssh

&

chmod 600 test-target-keypair.pem

踏み台インスタンスからターゲットインスタンスに接続する

先ほどの要領でターゲットインスタンスから接続用のコマンドをコピーします




踏み台インスタンスに接続している状況で、ターゲットインスタンスに接続するコマンドを実行します。

ターゲットインスタンスに接続出来ました!
(以下は見た目は同じですが先程と別の個体です。)

表現は上手くありませんが、無事一羽目→二羽目という接続が完了したイメージです。


終わりに

今回、主題に着手した経緯(ポエム)

私に限らないとは思いますが、CFnテンプレートに慣れて以降、マネジメントコンソールでのリソース間の画面移動や、コンソール画面の変更が多少辛みに感じる事があります。

こちら」を参照して、テンプレートから作り初めるという事が常態化している自分として感じる問題が数点あったりします。

①過去に作成したテンプレートが「秘伝のタレ」化していて、一度作成に成功したアーキテクチャの必要部分をコピーして転用する事が習慣化されてしまう為、まっさらな状態からもう一度再現してくださいと言われた時、意外となんでもない事につまづく事がある。

②CFnでスタックを実行した際は、何か問題があればエラーを吐いてロールバック(巻き戻し)し、原因をエラー文が教えてくれる為、「なぜか動かない」事がマネジメントコンソールを利用している時よりも明らかに少ない。
その為、既存のリソースが意図通りの動作をしていない際の「間違い探しの能力」や「注意力」が若干育ちにくい。(「スタック作成に失敗したら直して実行し直せば」という安心感がある事も要因)

③コンソールで再現が必要な場合「あの設定値はどこに表示してあったっけ」もままある。

今回は個人的には上記のような動機と、主題の手順に関する既存の記事で使われているスクリーンショットが旧デザインの物が多く見られる為、着手に至りました。

新しいサービスや機能を追う事と並行して、基本となる作業を積み重ねていきたいと思いました。

記載内容中に認識間違いや、「もっとこうした方がいいよ」というご指摘がありましたら是非ご教示いただければ幸いです。

お読みいただき有難うございました。

デベキャン

Discussion