RDSにはパブリックアクセスを許せば接続できるけど、せっかくなら「SSHでより安全にアクセスしよう」という記事です。
直接RDSにSSH接続できないので、EC2でSSHサーバーを稼働して(踏み台にして)、RDSにアクセスします。
なおEC2が「Windows Server 2019」なら、オプション機能でOpenSSHサーバーをインストールできるので、今回は、この機能を利用してみました。また、SSHクライアントには「RLogin」を使用しています。
ご存じかもしれませんが、SSHについて一応おさらい。
SSH(Secure Shell)
暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコル。パスワードなどの認証部分を含むすべてのネットワーク上の通信が暗号化される。
SSHは主にシステム管理者が利用するもので、一般ユーザーのブラウザからのアクセスを暗号化するSSL(Secure Sockets Layer)とは別ものです。
SSHの認証方式には「パスワード認証方式」と「公開鍵認証方式」があるけど、実際は、そんなに単純ではないです。参考まで、XserverとEC2の方式は次の通り。
● Xserverの場合
パスフレーズから秘密鍵を生成してダウンロード。ログイン時には、この時のパスフレーズを使用して秘密鍵にアクセス。秘密鍵はリセットすれば再度ダウンロード可能。
● EC2の場合
EC2作成時にキーペア(パブリックキーとプライベートキー)を生成。秘密鍵にあたるプライベートキー(pem形式)をダウンロード。プライベートキーは再度ダウンロードできないので紛失したらアウト。
Windows管理者の初期パスワードは、プライベートキーからパスワードを復号化して取得。RDP接続によるログインにはパスワードだけあればOK。
まずは、EC2側の設定からです。
おおまかな流れは次の通りです。
セキュリティグループのインバウンドルールにSSHを追加します。
ソースには「マイIP」を指定します。
EC2のサーバーにリモートデスクトップで接続して、オプション機能からSSHサーバーをインストールします。
インストール直後のサービスは、停止した状態で手動起動に設定されています。
自動起動に設定して、起動しておきます。
ポート番号22が待ち受けの状態になっていることを確認します。
> netstat -nao | findstr :22
ファイアウォールで、OpenSSHサーバーがブロックされていないことを確認します。
RDS側も設定の変更が必要です。
セキュリティグループのインバウンドルールに、EC2のセキュリティグループからの接続を追加します。
SSHクライアント「RLogin」に、AWS EC2のサーバーエントリを追加します。
RLoginを起動して「新規」をクリックします。
EC2インスタンスのRDPクライアントの情報をもとに、次の通り入力します。
● RDPクライアントの情報 (AWSより)
● サーバーの設定
プロトコル | ssh |
ホスト名(サーバーIPアドレス) | Public DNS |
TCPポート | ssh |
ログインユーザー名 | ユーザー名 |
パスワード | キーペアで復号化して取得したパスワード |
画面左の「プロトコル」をクリックして「ポートフォワード」を設定します。
RDSインスタンスの接続とセキュリティの情報をもとに、次の通り入力します。
● 接続とセキュリティの情報 (AWSより)
● ポートフォワードの設定
Listened | Local Host Name:localhost Port:3306 |
Connect | Host Name:エンドポイント Port:ポート |
この設定により、SSHクライアントの「localhost」への要求が、「RDSインスタンス」に受け渡されるようになります。
実際に動かして、動作を検証してみました。
接続するサーバーエントリを選んで「OK」をクリックします。
このあとすぐに使用するので、起動したままにしておきます。
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接続を終了する場合は「exit」を入力します。
最後までご覧いただき、ありがとうございます。
RDSインスタンスのエンドポイントを指定してアクセスすることも可能ですが、SSHを通すことによって、より安全にアクセスすることができます。
今回のアクセスではMySQLコマンドを使用しましたが、AccessやExcel、A5:SQL Mk-2などからアクセスして、データ分析に利用することもできます。
では、また。