[AWS] OpenSSHでEC2を踏み台にしてRDSに接続する方法

RDSにはパブリックアクセスを許せば接続できるけど、せっかくなら「SSHでより安全にアクセスしよう」という記事です。

直接RDSにSSH接続できないので、EC2でSSHサーバーを稼働して(踏み台にして)、RDSにアクセスします。

なおEC2が「Windows Server 2019」なら、オプション機能でOpenSSHサーバーをインストールできるので、今回は、この機能を利用してみました。また、SSHクライアントには「RLogin」を使用しています。

目次

SSHとは

ご存じかもしれませんが、SSHについて一応おさらい。

SSH(Secure Shell)
暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコル。パスワードなどの認証部分を含むすべてのネットワーク上の通信が暗号化される。

SSHは主にシステム管理者が利用するもので、一般ユーザーのブラウザからのアクセスを暗号化するSSL(Secure Sockets Layer)とは別ものです。

認証方式の違い

SSHの認証方式には「パスワード認証方式」と「公開鍵認証方式」があるけど、実際は、そんなに単純ではないです。参考まで、XserverとEC2の方式は次の通り。

● Xserverの場合

パスフレーズから秘密鍵を生成してダウンロード。ログイン時には、この時のパスフレーズを使用して秘密鍵にアクセス。秘密鍵はリセットすれば再度ダウンロード可能。

● EC2の場合

EC2作成時にキーペア(パブリックキーとプライベートキー)を生成。秘密鍵にあたるプライベートキー(pem形式)をダウンロード。プライベートキーは再度ダウンロードできないので紛失したらアウト。
Windows管理者の初期パスワードは、プライベートキーからパスワードを復号化して取得。RDP接続によるログインにはパスワードだけあればOK。

EC2側の設定

まずは、EC2側の設定からです。
おおまかな流れは次の通りです。

  • インバウンドにSSHを追加
  • SSHサーバーのインストール
  • サービスの設定と起動
  • 待ち受けポートの確認
  • ファイアウォールの確認

インバウンドにSSHを追加

セキュリティグループのインバウンドルールにSSHを追加します。
ソースには「マイIP」を指定します。

SSHサーバーのインストール

EC2のサーバーにリモートデスクトップで接続して、オプション機能からSSHサーバーをインストールします。

サービスの設定と起動

インストール直後のサービスは、停止した状態で手動起動に設定されています。
自動起動に設定して、起動しておきます。

待ち受けポートの確認

ポート番号22が待ち受けの状態になっていることを確認します。

> netstat -nao | findstr :22

ファイアウォールの確認

ファイアウォールで、OpenSSHサーバーがブロックされていないことを確認します。

RDS側の設定

RDS側も設定の変更が必要です。

インバウンドにEC2を追加

セキュリティグループのインバウンドルールに、EC2のセキュリティグループからの接続を追加します。

SSHクライアントの設定

SSHクライアント「RLogin」に、AWS EC2のサーバーエントリを追加します。

RLoginを起動して「新規」をクリックします。

SSHサーバー

EC2インスタンスのRDPクライアントの情報をもとに、次の通り入力します。

● RDPクライアントの情報 (AWSより)

● サーバーの設定

プロトコルssh
ホスト名(サーバーIPアドレス)Public DNS
TCPポートssh
ログインユーザー名ユーザー名
パスワードキーペアで復号化して取得したパスワード

ポートフォワード

画面左の「プロトコル」をクリックして「ポートフォワード」を設定します。

RDSインスタンスの接続とセキュリティの情報をもとに、次の通り入力します。

● 接続とセキュリティの情報 (AWSより)

● ポートフォワードの設定

ListenedLocal
Host Name:localhost
Port:3306
ConnectHost Name:エンドポイント
Port:ポート

この設定により、SSHクライアントの「localhost」への要求が、「RDSインスタンス」に受け渡されるようになります。

動作検証

実際に動かして、動作を検証してみました。

EC2とのSSH接続開始

接続するサーバーエントリを選んで「OK」をクリックします。

このあとすぐに使用するので、起動したままにしておきます。

RDSへのアクセス

EC2とSSH接続した状態で、RDSのMariaDBにアクセスを試みます。

ポートフォワードの設定通り、接続先には「localhost」を指定します。
RDSのマスターユーザーIDが「admin」の場合、次のように入力します。

> mysql -h localhost -P 3306 -u admin -p

パスワードを入力すると、次のようなメッセージが表示され、MariaDBにアクセスした状態になります。

Welcome to the MySQL monitor. Commands end with ; or ¥g.
Your MySQL connection id is 15045
Server version: 5.5.5-10.4.8-MariaDB Source distribution

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '¥h' for help. Type '¥c' to clear the current input statement.

mysql>

showコマンドで、データベースの一覧を表示してみます。
RDSインスタンスの生成時に作成したデータベース「testdatabase」が見えているので、RDSにアクセスしていることが確認できました。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| innodb             |
| mysql              |
| performance_schema |
| test               |
| testdatabase       |
| tmp                |
+--------------------+
7 rows in set (0.02 sec)

mysql>

quit を入力すると終了します。

mysql> quit
Bye

D:¥Users¥owner¥A1Style>

EC2とのSSH接続終了

EC2とのSSH接続を終了する場合は「exit」を入力します。

おわりに

最後までご覧いただき、ありがとうございます。

RDSインスタンスのエンドポイントを指定してアクセスすることも可能ですが、SSHを通すことによって、より安全にアクセスすることができます。

今回のアクセスではMySQLコマンドを使用しましたが、AccessやExcel、A5:SQL Mk-2などからアクセスして、データ分析に利用することもできます。

では、また。

コメント

コメントする

目次