【OCI】Bastionを使ってプライベートサブネットに配置したADBのDatabase Actionsにアクセスしてみる

# はじめに

今回はOracle Cloud Infrastructure（OCI）のBastionサービスを使って
プライベートサブネットに配置したAutonomous Database(ADB)の
Database Actionsにアクセスする方法を紹介したいと思います。
※ちょっとした小ネタです。

通常プライベートサブネットのリソースにアクセスするには
同じVCN内のパブリックサブネットに踏み台サーバを立てる
必要があるかと思いますが、Bastionを使えばSSHセッションや
ポート転送を使って踏み台サーバなしでもクライアントPCから
SSH（22）、RDP（3389）でリモートアクセスすることが可能です。

■参考
https://oracle-japan.github.io/ocitutorials/intermediates/bastion/

ただWebアクセスはどうなのか？
という疑問があるかと思います。

ADBにはDatabase ActionsというWebコンソール機能でSQLの実行や
データ変換、データロード、Machine Learning等の便利な機能が
ブラウザで使えるため、わざわざDB接続しないでも事足りるかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/20f1a504-389e-87b8-c83a-6cf2850293d5.png)

ですが、この機能はADBを「すべての場所からのセキュア・アクセスを許可」
という公開の状態にした時にしか外部（クライアントPCのブラウザ）からの
アクセスできないため、プライベートサブネット内のADBに対して
アクセスするには同じVCNのパブリックサブネットに踏み台サーバとして
Windows Serverを立てて、そこからブラウザでアクセスする形になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/cd5b2614-b6a0-6677-2cc4-28d4f87b0445.png)

ただこのためだけにWindows Serverを立てるのもなんなので
Bastionを使ってアクセスしてみたらいいんじゃないかという話です。

■実行環境（クライアントPC）
OCI推奨のWebブラウザを使える環境ならなんでもOK
今回はWindows 11で実施

■構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/e63340e2-a11b-5758-8f22-07c8462e344f.png)

■事前準備
VCN、プライベートサブネット、セキュリティリスト等を
作成しておき、ADBを作成しておきます。
BastionではSSHキーを使用しますのでこちらも準備します。

作成方法については以下を参考にしてください。

■VCNの作成
https://oracle-japan.github.io/ocitutorials/beginners/creating-vcn/

■ADBの作成
https://oracle-japan.github.io/ocitutorials/adb/adb101-provisioning/
※インスタンスはプライベートサブネットに立てます。

■SSHキーの作成
https://docs.oracle.com/ja/learn/generate_ssh_keys

◆目次
1.Bastionの作成
2.hostsファイルの変更
3.ADB Database Actionsの表示

## 1. Bastionの作成

左上メニュー[Ξ]からアイデンティティとセキュリティを選択し、
要塞（Bastion）を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/fb6b7a6e-03ff-d063-266e-8728e1acfbaf.png)

そのまま要塞ボタンを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/b75b94b1-5405-bcc4-cb87-943b9214ee59.png)

下記の項目を入力・選択して、要塞の作成ボタンを実行します。

VCN: ADBと同じVCNを選択
サブネット: ADBが配置されているプライベートサブネットを選択
CIDR: 今回はどこからでもアクセスできるように0.0.0.0/0を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/7a7b8953-62f8-0194-7a32-7e5bbf92bee3.png)

しばらくするとBastionの作成が完了するので名前を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/11af64ba-080a-06b5-71a3-67ef2a757632.png)

続いてセッションの作成を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/4dc3adc3-129a-4420-2549-6207e0bb5c4a.png)

以下の項目を入力・選択して、セッションの作成を実行します。

セッション・タイプ: SSHポート転送セッション
セッション名: 任意
IPアドレス: ADBのプライベートエンドポイントIP(プライベートIP)
ポート: <b><font color="blue">443</font></b>
SSHキーの追加: 事前に用意していたSSHキー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/0db7258f-1e29-c27c-6e2d-1560de1186f8.png)

セッションの作成が完了したら右の詳細リンクからSSHコマンドの表示を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/3be4ed7c-dbaf-9399-5511-dc228f14a5d4.png)

以下が画面に表示されるのでコマンドをコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/03408544-b679-c2f6-c44f-205efc413c8f.png)

以上でBastionの設定は終了です。

## 2. hostsファイルの変更

プライベートエンドポイントに配置したADBのDatabase Actionsにアクセスするには
hostsファイルの変更が必要となります。

個々のPC環境にもよるかもしれませんが、
Windows 11の場合、hostsファイルは以下に保存されています。
C:\Windows\System32\drivers\etc\hosts

hostsファイルにはADBのアクセスURLのFQDNを登録します。

例としてアクセスURLが以下の場合、
https://*****.adb.ap-tokyo-1.oraclecloudapps.com/ords/sql-developer

hostsファイルは以下のようにします。
```
127.0.0.1    *****.adb.ap-tokyo-1.oraclecloudapps.com
```

以上でhostsファイルの修正は終了です。

## 3. ADB Database Actionsの表示

予め保存しておいたSSHコマンドを編集します

■変更箇所
privateKey: 保存されているSSHのフルパス
&lt;localPort&gt;: 443
※ローカル環境で443ポートを使用していないことが前提です。

■変更前サンプル
```
ssh -i <privateKey> -N -L <localPort>:10.0.21.75:443 -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaa*****.oraclecloud.com
```

■変更後サンプル
```
ssh -i C:\Users\id_rsa -N -L 443:10.0.21.75:443 -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaa*****.oraclecloud.com
```

後は修正したコマンドをコマンドプロンプトから実行します。
（パスフレーズが設定されている場合は入力）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/d3c431e4-07ce-ef37-1270-4233bad080ee.png)

コマンドを実行した（セッションを張った）状態でADB Database Actionsの
URLにアクセスすると普通にサインインのページが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/00abdb7b-cd61-39eb-3757-d8af7512a413.png)

これで簡単にプライベートサブネットに置いてあるADBの管理が可能となります。

## おわり
わざわざ踏み台サーバを立てなくてもBastionサービスがあれば
ローカル環境で簡単に作業することが可能です。