EC2踏み台サーバを経由してssh接続

EC2ssh接続

パブリックサブネットのEC2を経由して(踏み台サーバ)プライベートサブネットのEC2にssh接続できるようにAWS環境を構築した備忘録となります

AWS初めて触るというかたは参考にしていただければ幸いです。

このような構成図の環境構築を行います

VPCの作成

名前タグにtest-vpc

IPv4 CIDRを10.0.0.0/21に設定

サブネットの作成

VPC内を複数のサブネットに分割する

VPCの中にサブネットを作成するため、サブネット作成を以下のように実施

2つのサブネットを作成する

関連付けるVPCは先ほど作成したtest-vpc

サブネットの名前をtest-subnet-0としておく(test-subnet-0をパブリックサブネットとする)

CIDRブロックは10.0.0.0/24とする

2つ目のサブネット

VPCは同様のものを選択

サブネット名にtest-subnet-2(こちらをプライベートサブネットとする)

アベイラビリティゾーンはap-northeast-1aと1つ目のサブネットと同様のものを作成する

CIDRブロックは10.0.2.0/24

インターネットゲートウェイの作成

インターネットゲートウェイ作成から以下のように作成する

名前タグは任意のものを入力し、インターネットゲートウェイの作成をする

作成した状態だと状態が「Detached」となっているため

アクションからVPCにアタッチをする

はじめに作成したVPCを選択しインターネットゲートウェイのアタッチをする

状態が「Attached」になればVPCへアタッチされた状態になる

ここまでの状態が以下のような構成図となります

ルートテーブルの作成

ルートテーブルの作成を行い、

PublicSubnetはインターネットに向く設定を行う

左サイドバーからサブネットを選択し、ルートテーブルのタブを選択する

ルートテーブルのリンクを選択して開く

ルートタブからルートの編集を選択する

ルートの編集画面で送信先にインターネットにむける0.0.0.0/0を入力し、ターゲットに作成したインターネットゲートウェイを選択し、変更を保存する

ルートの関連付けができます

VPC、サブネット、インターネットゲートウェイ、ルートテーブルの作成が完了したので、EC2インスタンスの作成を行います

インスタンスの作成

インスタンスの作成からAmazon Linux2を選択する

無料枠のt2.microを選択し、次のステップ:インスタンスの詳細の設定を選択

ネットワークはVPC作成の部分で作成したtest-vpcを選択

サブネットはap-northeast-1a test-subnet-0を選択

自動割り当てパブリックIPは有効(パブリックサブネットを想定しているので、一旦自動割り当ては有効化とする)

ストレージはデフォルトのまま

EC2にNameタグを追加

このタグをつけることで、一覧で見たときに、あとでどのEC2だったっけ?といったことを防ぐことができます。

セキュリティグループの設定は一旦デフォルトのまま

キーペアを作成する

新しいキーペアの作成を行い、キーペア名に任意の名称をつける

キーのダウンロードを行い、インスタンスの作成を行う

ダウンロード先は任意に選択

EC2の作成ができました

作成したEC2に対してセキュリティグループを設定する

セキュリティグループ作成からセキュリティグループの設定を行う

セキュリティグループ名: test-sg-1

説明: test-sg-1

VPCは作成しているVPCを作成する

インバウンドルールにssh接続できるように設定し、

ソース: どのIPから通信を受け取れるようにするかの設定を行う

すべてのIPから受け取れるように設定する→0.0.0.0/0

作成したセキュリティグループを自身で作成したEC2(test-ec2-1)に設定する

作成したEC2を選択し、アクション→セキュリティ→セキュリティグループの変更を行う

関連付けられたセキュリティグループから「test-sg-1」のセキュリティグループを選択し、セキュリティグループを追加する

デフォルトで作成されている「launch-wizard-3」は削除してOK

EC2を選択し、セキュリティタブをクリックすると、test-sg-1で設定したセキュリティグループになっていることを確認する

EC2インスタンスへ接続

WindowsのPowerShellでssh接続する例で記載します。

PowerShellでssh接続する際のコマンドは以下の通りです

例)
ssh -i keyがあるディレクトリ ec2-user@パブリックIPアドレス

以下のように聞かれたらyesとする

ECDSA key fingerprint is SHA256:MKrnvU6gJOnusWWydy4vBMkdDA58z9fz4YNGHCaVxr0.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

以下のように表示されたらログインは成功しています。

 __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

Amazon Linux 2

Run all your cloud and enterprise applications in a security-focused and high-performance Linux environment. Amazon Linux 2 is a Linux operating system from Amazon Web Services (AWS). It provides a security-focused, stable, and high-performance execution environment to develop and run cloud applications. Amazon Linux 2 is provided at no additional charge.

2 package(s) needed for security, out of 2 available Run "sudo yum update" to apply all updates. [ec2-user@ip-10-0-0-195 ~]$

以下のようなwarningが出たときには

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0664 for 'test-keypair_2.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "test-keypair_2.pem": bad permissions
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

こちらを参考に対処すると良いでしょう。

参考 【Windows PowerShell】SSH接続する際にパーミッションエラーが発生した場合の権限変更Qiita

上記で一旦EC2への接続はできましたが、IPアドレスは現状自動割り当てとなっているため、EC2を停止し、新たに起動すると、IPアドレスは変わってしまします。

そのためElastic IP addressをEC2にアタッチして、固定のIPアドレスとします。

Elastic IP addressの割り当て

VPCの画面にてElastic IPを左サイドバーから選択し、右上Elastic IP アドレスを割り当てるを選択

割り当てを押下

割り当てするとElastic IPが割り当てられる

Elastic IP アドレスの関連付けを行い

作成していたEC2「test-ec2-1」へ関連付けを行う

関連付けされるとEC2インスタンスにElastic IPアドレスが関連付けされていることを確認する

上記のように表示されていればElastic IPアドレスの関連付けはできています

次はプライベートサブネットにEC2を作成し、接続を行います

インスタンス作成方法の途中までは同様の手順のため割愛します

ステップ3: インスタンスの詳細の設定画面にて、サブネットを「test-subnet-2」を選択する

自動割り当てパブリックIPは無効化とする(プライベートサブネットのため)

上記のように設定する

セキュリティグループはデフォルトのまま

既存のキーペアは既存のものを使用

ここまでが完了したらパブリックサブネットのEC2を踏み台にしてプライベートサブネットのEC2にssh接続します

ssh接続するためには、ローカルに置いてあるkeyをパブリックサブネットのEC2へSCPコマンドでコピーを行うことで、プライベートサブネットのEC2へssh接続することができるようになります。

scpコマンドは以下のようなコマンドです

scp -i .\test-keypair_2.pem .\test-keypair_2.pem ec2-user@xx.xx.xx.xx:/tmp/

scp -i .\test-keypair_2.pem でsshに使用する鍵を指定

.\test-keypair_2.pem ec2-user@xx.xx.xx.xx:/tmp/とすることで、コピー元パス情報 コピー先パス情報を指定

SCPコマンドとは「Secure Copy」の略で、ホストコンピュータからリモートコンピューへファイルをコピーする小窓のことです。

scp [オプション] コピー元パス コピー先パス
オプション説明
-i 鍵ファイル名ssh接続に使用する鍵ファイルを指定する
-P ポート番号sshのポートを変更してる場合など 接続に使用するポートを指定する
– pコピー元の担務スタンプやパーミッションを保存する
-rDirectoryごと再帰的にコピーする

scpコマンドでコピーしたkeyファイルがEC2の/tmpディレクトリに存在するか確認します

/tmpにlsコマンドでkeyが存在することを確認し、存在すれば問題なくkeyがEC2へコピーできています

-rw-rw-r-- 1 ec2-user ec2-user 1700 May  8 01:25 test-keypair_2.pem

ここかでプライベートサブネットのEC2へssh接続します

IPアドレスはプライベートサブネットのプライベートIPアドレスを指定する

/tmpディレクトリにcdで移動して以下コマンドを実行する

パブリックサブネットのEC2からプライベートサブネットのEC2にssh接続する際は、プライベートIPアドレスを指定する

ssh -i test-keypair_2.pem ec2-user@xx.x.x.xxx

以下のようなWarningがでた場合は、keyに対する権限が付与されていないため、keyに読み取り権限を与える

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0664 for 'test-keypair_2.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "test-keypair_2.pem": bad permissions
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

keyに読み取り権限を与えるコマンド

chmod 400 test-keypair_2.pem

改めて以下コマンドを実行

ssh -i test-keypair_2.pem ec2-user@xx.x.x.xxx

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

Amazon Linux 2

Run all your cloud and enterprise applications in a security-focused and high-performance Linux environment. Amazon Linux 2 is a Linux operating system from Amazon Web Services (AWS). It provides a security-focused, stable, and high-performance execution environment to develop and run cloud applications. Amazon Linux 2 is provided at no additional charge.

[ec2-user@ip-xx-x-x-xxx ~]$

次は無事ログインできました。

パブリックサブネットにEC2を踏み台にし、プライベートサブネットのEC2へssh接続ができたので、次はプライベートサブネットのEC2からNATゲートウェイを経由してインターネットに接続します

NATゲートウェイの作成

VPCの画面からNATゲートウェイを選択し、NATゲートウェイを作成する

名前は任意の名前を入力

サブネットにパブリックサブネットを選択

Elastic IP割り当てはElastic IPを割り当てを押下し、割り当てを行う(インターネットに出るため、Elastic IPは必須)

プライベートサブネットのルートテーブルをNATゲートウェイに向くように設定をします

ルートテーブルの作成からルートテーブル設定を行い、ルートテーブルを作成する

ルートの編集を行います

送信先は0.0.0.0/0

ターゲットはNATゲートウェイを選択し変更を保存する

プライベートサブネットにルートテーブルの関連付けを行います

VPCの画面からサブネットを選択し、test-subnet-2を選択した状態で

アクション→ルートテーブルの関連付けを行う

プライベートサブネットのroutetableがNATゲートウェイをターゲットにしていればOK

ここまでで、以下のような構成図の環境が出来上がりました。

環境の削除

環境を作ったまま放置すると課金対象となってしまいますので、以下の手順で環境を削除します

EC2削除→NATゲートウェイ削除→Elastic IPの開放→VPC削除

EC2の削除

EC2を選択して、インスタンスの状態からインスタンスを終了

インスタンスの状態が終了済みになっていればOKです

NATゲートウェイの削除

対象のNATゲートウェイを選択してアクションからNATゲートウェイを削除

フィールドに「削除」と入力し、削除

Elastic IP開放

フィールドに「削除」と入力し削除

セキュリティグループやサブネットなども一緒に削除されます

以上でEC2踏み台サーバを経由してssh接続の環境構築を終了します。

\無料コンテンツを配布しております/

毎日エンジニアとして勉強をしているのに

そんな毎日に悩みを抱えている方

もしかしたら間違った勉強方法をしているかもしれません。

エンジニアとして生きていくための正しい勉強とは
一体何でしょうか?
以下からご確認ください

コンテンツ無料ダウンロードページ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です