先月、Oracle Cloud に Bastion サービスがリリースされました。
今までは、MySQL Database Service(以降、MDS)は 基本的に Private Subnet に配置される為、オンプレから接続したい場合は、 Public Subnet にクライアントツールをインストールした Compute インスタンスを構築したり、VPN接続を作成したりする必要がありました。
Bastion サービスを利用する事により、ローカルから SSH ポート転送 を使用した接続が可能となりました。
今回は、Bastion サービスを使用して、ローカルから、MDSへ接続する手順について記載したいと思います。
なお、Bastion サービス についての詳細は、以下のリファレンスをご参照下さい。
前提
- 事前に、MDS のインスタンスは作成済みであるものとします。
- Bastion サービスを管理するのに必要なIAMポリシーが付与されているものとします。
(必要なIAMポリシーについては、以下のリファレンスをご参照下さい。)
Oracle Cloud Infrastructure Documentation / Managing Bastions
手順
Bastion の作成
コンソール画面にログインし、まずは、Bastion を作成します。
メニューが少し分かりにくい場所にあり、コンソール画面を日本語表示している場合は「要塞」と表示されている為、最初はメニューを探すのに一苦労された方もいるのではないでしょうか。
まずは、グローバルメニューの「アイデンティティとセキュリティ」-「要塞」をクリックします。
表示された画面から「要塞の作成」ボタンを押下します。
要塞の作成画面の「ネットワーキングの構成」では、MDSを配置している VCN と Subnet を選択します。
「CIDRブロック許可リスト」には、アクセスを許可するIPアドレスの範囲を設定します。
また、「拡張オプションの表示」をクリックすると、「最大セッション存続期間」が表示されます。
現時点では、Bastion の最大接続時間は 180分(3時間) となっているようです。
デフォルトでは、180分となっていますが、以降作成するセッションごとにも、ここで指定した時間以下で最大接続時間を指定する為、ここではデフォルトのままで問題ないかと思います。
要塞の作成後は、状態が「作成中」となります。
30秒程で、状態が「アクティブ」となり、作成が完了します。
セキュリティリストの更新
Bastion の詳細画面に表示される、「プライベート・エンドポイントIPアドレス」に表示されているIPアドレスからのアクセスを、MDSを配置している Subnet に設定しているセキュリティリストで許可する必要があります。
「ソースCIDR」に「プライベート・エンドポイントIPアドレス」に表示されているIPアドレス、「宛先ポート範囲」には、MDSのポート(3306)を設定してセキュリティリストに追加します。
(MDSのMySQLポートをデフォルトから変更されている場合は、適宜ご変更下さい。)
セッション の作成
作成した Bastion の詳細画面から、「セッションの作成」ボタンを押下し、セッションの作成画面を表示します。
「セッション・タイプ」には、 SSHポート転送セッション
を選択します。
「IPアドレス」を選択し、MDSのプライベートIPアドレスと、「ポート」には、MDSのポート(3306)を設定します。
あとは、SSHポート転送に使用する公開鍵を設定します。
また、Bastion 作成時と同様に、「拡張オプションの表示」をクリックすると、「最大セッション存続期間」が表示されます。
ここでは、セッションの最大接続時間を設定しますが、Bastion に設定した最大接続時間が、設定できる最大値になっています。
以上で、セッションの作成は完了となります。
SSHポート転送の設定
次にSSHポート転送の設定を行います。
まずは、Bastion の詳細画面に表示されているセッションの右端にあるメニューをクリックし、「SSHコマンドのコピー」をクリックします。
クリップボードにコピーされたコマンドは、以下のようになっています。
1 |
ssh -i <privateKey> -N -L <localPort>:10.0.0.5:3306 -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaazif6lvyain3c2mkz75jsavtcol6urv3qeqxh5bhwbdrudyhz2hhq@host.bastion.ap-tokyo-1.oci.oraclecloud.com |
<privateKey>と<localPort>を適宜変更し、私は使用しているPCが Windows10 である為、WSL の Ubuntu で以下のようにコマンドを実行しました。
1 |
$ ssh -i bastion_key -N -L 3306:10.0.0.5:3306 -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaazif6lvyain3c2mkz75jsavtcol6urv3qeqxh5bhwbdrudyhz2hhq@host.bastion.ap-tokyo-1.oci.oraclecloud.com |
MDSに接続
ここまでで、準備は整いましたので、MySQL Workbench を使用して、MDSへ接続してみます。
MySQL Workbench を起動し、起動後の以下の「+」ボタンから接続設定画面を表示します。
接続設定画面で、以下のように設定します。
ユーザ名、パスワードは、MDSに設定したユーザ情報に適宜変更して下さい。
パラメータ | 設定するパラメータ値 |
---|---|
Connection Method | Standard(TCP/IP)を選択 |
Hostname | 127.0.0.1 |
Port | SSHポート転送コマンドで<localPort>に指定したポート番号 |
Username | MDSに登録されているMySQLユーザのユーザ名 |
Password | 上記ユーザのパスワード |
Default Schema | (任意のスキーマ名、省略可) |
設定後は、同画面の「Test Connection」ボタンを押下し、接続可能か確認します。
接続できた場合は、以下のようなダイアログが出力されます。
以上で、Bastion サービスの SSHポート転送機能 を使用して、ローカルからMDSへの接続が確認できました。
最大接続時間を経過した場合
Bastion のセッションに設定した、最大セッション存続期間 が経過した場合、ローカルからMDSへの接続も切断されてしまいました。
再度、SSHポート転送の設定コマンドを実行しても、以下のように Permission denied (publickey)
が返されます。
1 2 |
$ ssh -i bastion_key -N -L 3306:10.0.0.5:3306 -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaazif6lvyain3c2mkz75jsavtcol6urv3qeqxh5bhwbdrudyhz2hhq@host.bastion.ap-tokyo-1.oci.oraclecloud.com ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaazif6lvyain3c2mkz75jsavtcol6urv3qeqxh5bhwbdrudyhz2hhq@host.bastion.ap-tokyo-1.oci.oraclecloud.com: Permission denied (publickey). |
また、コンソール画面でセッションを確認すると、「状態」が「削除済」に変更されていました。
最大セッション存続期間 が経過したセッションは、使い回すことができず、新たにセッションを作成する必要があるようです。
まとめ
VPN接続を作成したり、Public Subnet にクライアントツールをインストールした Compute インスタンスを構築したりする必要がなくなり、MDSへ接続して簡単な確認を行いたい場合には、Bastion サービスの SSHポート転送機能を使用することで、恩恵を受ける方もおられるように思います。
また、Bastion サービスには使用料金がかからない点も見逃せません。
しかしながら、Bastion サービスのセッションの接続時間は、最小30分、最大180分と制限がありますので、本番運用や、開発で頻繁にMDSへアクセスするようなケースでは、使用できないものと考えられます。
また、その他の制限等も、以下にまとまっておりますので、利用を検討する際には、リファレンスとともにご確認頂ければと思います。