プライベート・サブネット内のOracle Base DB と ADBインスタンスに接続する方法のまとめ

このシリーズの他の記事は、[オラクル・クラウドの個人ブログ一覧 ](https://qiita.com/letian/items/10152a4fec813c1b7d98)からご覧いただけます。

# 初めに
プライベートサブネット内の <strong>OCI</strong>（Oracle Cloud Infrastructure）<strong>Base DB / Autonomous DB</strong>インスタンスに接続する方法はいくつかあります。どの方法を選べばよいか迷っている方々に対し、各種接続方法の比較を紹介したいと思います。

:::note
一部の接続方法は、Computeインスタンスにも適用できます。プライベートサブネット内のComputeインスタンスに接続したい方は、[こちらの取りまとめ](https://qiita.com/letian/items/e0376fd71433d243bce0)をご参考にしてください。
:::
※、下記以外のオラクルの公式製品とサービス(VPN/FastConnectなど)も存在しますが、選択肢が多いため割愛させていただきます。

__目次__
- [1. プライベート・サブネット内のOracle Base DB/ADBインスタンスに接続する](#1-プライベートサブネット内のoracle-base-dbadbインスタンスに接続する)
  - [1-1. 踏み台サーバ](#1-1-踏み台サーバ)
  - [1-2. OCI Bastionサービス](#1-2-oci-bastionサービス)
  - [1-3. ネットワーク・ロード・バランサ](#1-3-ネットワークロードバランサ)
  - [1-4. Cloud Shell](#1-4-cloud-shell)
  - [1-5. データベース・ツール](#1-5-データベースツール)
  - [1-6. データベース・アクション（ADBのみ）](#1-6-データベースアクションadbのみ)
  - [1-7. インスタンス・コンソール接続（Base DBのみ）](#1-7-インスタンスコンソール接続base-dbのみ)
- [2. 各種接続方法の比較](#2-各種接続方法の比較)

# 1. プライベート・サブネット内のOracle Base DB/ADBインスタンスに接続する
## 1-1. 踏み台サーバ
踏み台サーバーを経由するのは、最も一般的な接続方法です。接続方法としては、主に以下の2つのパターンがあります。

方法-1. 二段階のログイン
方法-2. SSHポート転送
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/46e4592d-d8f5-68c7-213b-d813044e5d54.png)
詳細については、次の記事をご参照ください。
[踏み台サーバを使ってプライベートのOracle Base DB と ADBインスタンスに接続する方法](https://qiita.com/letian/items/bde25c1a141f9e1d21d4)

## 1-2. OCI Bastionサービス
OCI Bastionサービスの本質は<strong>SSHトンネル</strong>です。つまり、上記のSSHポート転送の方法をサービスとして提供しています。これにより、踏み台サーバを立てることなく、プライベートサブネット内のインスタンスに簡単に接続できます。このサービスは<strong>無料</strong>で利用でき、Oracle Base DB/ADBインスタンスだけでなく、Computeインスタンス、或いはMySQL DBサービスにも接続できます。

セッション存続時間は最大<strong>３時間</strong>で、ご注意ください。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/68e11517-ed7e-1038-66a7-12e6ef077227.png", width="600">

※、Base DBの構成図は上記と同じです（宛先のポート番号が異なる）。

メリット：
✅ 踏み台サーバを立てる必要がないため、コストを節約できる。
✅ SSHトンネルで通信するので、セキュアな接続を確保できる。
✅ 設定方法は比較的にやり易い（数分間でOK）
✅ OCI Bastion自体は無料で利用できる。

:::note
OCI Bastionを作成する際には、<strong>ターゲット</strong>のVCNとサブネットを指定する必要がありますが、<strong>Bastion自体</strong>に対し、配置場所を指定する必要はありません（誤解されることがよくあります）。
:::

接続方法の詳細について、以下の２記事をご参照ください。
[OCI Bastion経由でプライベート・サブネット内のOracle DBに接続](https://qiita.com/liu-wei/items/36f2108992ce71d7bafc)
[OCI Bastion経由でプライベート・サブネット内のAutonomous DBに接続](https://qiita.com/liu-wei/items/36dc12c95d3bc72e16db)

## 1-3. ネットワーク・ロード・バランサ
踏み台サーバを立てずにインターネットから接続したい場合、パブリックサブネット内のネットワーク・ロード・バランサ（<strong>NLB</strong>）を経由する方法も選択肢の一つです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ed990996-2a1e-3219-03f3-98a51357305c.png", width="600">

メリット：
✅ 踏み台サーバを立てる必要がないため、コストを節約できる。
✅ 設定方法は簡単で、<strong>管理者</strong>の一時作業に適している（数分間で設定完了）。
✅ レイヤー4通信であり、可用性が高くて、レイテンシが低い。
✅ OCI Bastionと比べて、セッション存続時間（最大３時間）の心配がない。
✅ NLB自体は"[Always Free](https://www.oracle.com/jp/cloud/free/#always-free)"でカバーできるので、無料で利用できる。

:::note
- <strong>LB</strong>経由でも接続できます（設定方法少し異なるが考え方は同じです）。
- NLB自体は停止できませんが、バックエンドを<strong>オフライン</strong>にすることは可能です。使用しないときにオフラインに切り替えることで、踏み台サーバを一時停止するのと同じような効果が得られます。
:::

接続方法の詳細について、次の記事をご参照ください。
[ネットワーク・ロード・バランサ (NLB) の経由でプライベート・サブネット内の Oracle Base DB と Autonomous DB に接続する](https://qiita.com/liu-wei/items/e0288f3027271f1a14ff)

## 1-4. Cloud Shell
2022年8月に、Cloud Shellの<strong>プライベート・アクセス</strong>機能がリリースされました。これにより、Cloud Shellからパブリックネットワークを経由せずにプライベートネットワークのリソースにアクセスできるようになりました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/dd3471d1-8fb9-29db-502f-3abacb2afb38.png", width="600">

メリット：
✅ 踏み台サーバを立てる必要がないため、コストを節約できる。
✅ OCIコンソールからパブリック・ネットワークを経由せずに、プライベート・アクセスで接続できる。
✅ 設定は簡単で、シリアルコンソールを使って手軽に接続したい時に便利です。（管理者の一時作業に適している）

制限事項：
- シリアルコンソールのため、SQL DeveloperのようなGUIがない。

接続方法の詳細について、以下の記事をご参考ください（Base DB/ADB 兼用）。
[OCI Cloud Shell からプライベート・サブネット内のインスタンスに接続する](https://qiita.com/liu-wei/items/f28aa9ab2a3e5b49b42d)

## 1-5. データベース・ツール
データベース・ツールはOCIのマネージド・サービスです。これを使用して、OCI内の任意の<strong>Oracle</strong>または<strong>MySQL DBサービス</strong>への接続を作成できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a5368bf1-dd50-d7e3-b94d-38838c4e3599.png", width="500">

メリット：
✅<strong>SQLワークシート</strong>と併用することで、データベースへの直接SQLアクセスが可能です。
✅パスワードや「Autonomous DB」のウォレット・ファイルなどの機密情報は暗号化され、<strong>OCIボールト</strong>に安全に保存されます。

Oracle Base DBとADBの接続方法の詳細について、次の記事をご参照ください。
[OCI データベース・ツールでオラクルDBへの接続方法](https://qiita.com/letian/items/1d4ed7477a28b794a56c)

## 1-6. データベース・アクション（ADBのみ）
この方法は、Autonomous DBにのみ適用されます。

Autonomous Databaseの詳細 → データベース・アクション → <strong>SQL</strong>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/be80dcb9-5eb8-334a-bb9a-bc45e6b74436.png", width="500">

※、「データベース・アクション」をクリックすると、次の画面が表示される場合があります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/178f3514-0b6c-20e6-4799-840d2817aa6c.png", width="500">

__原因__
ADBのプライベート・エンドポイントURLはVCN内部で識別されますが、外部からのアクセスはできません。

アクセスURLの例：`https://xxxxxxx.adb.ap-tokyo-1.oraclecloudapps.com/ords/sql-developer`

上記URLの中に、`xxxxxxx.adb.ap-tokyo-1.oraclecloudapps.com`の部分はADBのプライベート・エンドポイントURLとなります。

__解決方法__
方法-1: ADBと同じVCN内にあるComputeインスタンスからアクセスしてください。  
方法-2: ADBと同じVCN内にLB（またはNLB）を設定し、クライアントとADB間の接続を確立します。その後、クライアントのWebブラウザでアクセスしてください。

データベース・アクションの画面に、SQL文の実行例は次の通りです。SQL Developer Webで操作できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/321b75ec-b3ea-aa5f-e68e-60436ae2b473.png)

## 1-7. インスタンス・コンソール接続（Base DBのみ）
Base DBインスタンスのOSにログインする場合、コンソール接続という選択肢があります。トラブルシューティングの時に役立ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/e7063ec5-f3ab-f66d-d3fd-49208723ad75.png)

__作成方法__
作成画面の入口：Oracle Base DB → DBシステム → DBシステムの詳細 → コンソール接続 → コンソール接続の作成

公開キーを自動作成するか、既存のキーをアップロードします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/df96e28f-6e5e-ccc8-5c52-dcbe18c44493.png", width="500">

メニューからコマンドをコピーして、PowerShellで実行してください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/db1158dc-6bf6-aef1-ebc8-e5b2fd7e296c.png", width="550">

実行結果：
```
PS C:\Users\username> ssh -o ProxyCommand='ssh -W %h:%p -p 443 ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.<中略>@instance-console.ap-tokyo-1.oci.oraclecloud.com' ocid1.instance.oc1.ap-tokyo-1.<中略>

=================================================
IMPORTANT: Use a console connection to troubleshoot a malfunctioning instance. For normal operations, you should connect to the instance using a Secure Shell (SSH) or Remote Desktop connection. For steps, see https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/accessinginstance.htm

For more information about troubleshooting your instance using a console connection, see the documentation: https://docs.cloud.oracle.com/en-us/iaas/Content/Compute/References/serialconsole.htm#four
=================================================

Oracle Linux Server 8.9
<中略>

db19c login: opc
Password:
Last login: <Time stamp> from <IP address>
[opc@db19c ~]$
```
※、ログインする際に、秘密キー認証ではなく、パスワード認証になります。

# 2. 各種接続方法の比較
各方法の公式ドキュメントを参照したい場合、表内のリンクをクリックしてください。

|接続方法|踏み台<br>の経由|利用場面|注意事項|
|:--|:--|:--|:--|
|踏み台経由|Yes|一般的利用方法であり、セキュアかつ長時間なセッションを求める場合。|踏み台サーバが必要|
|[OCI Bastion](https://docs.oracle.com/ja-jp/iaas/Content/Bastion/Concepts/bastionoverview.htm)|No|踏み台サーバを立てず、手軽に接続したい場合。|⏳セッション存続時間（最大3時間）|
|[NLB](https://docs.oracle.com/ja-jp/iaas/Content/NetworkLoadBalancer/introducton.htm#Overview)|No|踏み台サーバを立てず、手軽に接続したい場合。|使わない時、バックエンドをオフラインすることは可能|
|[Cloud Shell](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/cloudshellintro.htm#Cloud_Shell_Private_Access)|No|踏み台サーバを立てず、<strong>シリアル・コンソール</strong>で手軽に接続したい場合。|⏳セッションタイムアウト（20分）|
|[Database Tools](https://docs.oracle.com/ja-jp/iaas/database-tools/home.htm)|No|OCIコンソールから(Web GUIで)接続したい場合|認証情報はOCIボルトに格納する必要がある|
|[Database Actions](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/connect-database-actions.html)|必須ではない|手軽にOCIコンソールから(Web GUIで)接続したい場合|1. ADBのみ<br>2. 踏み台(またはLB/NLB)を経由|
|[コンソール接続](https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/serialconsole.htm)|No|トラブルシューティング|1. Base DBのみ<br>2. パスワード認証|

利用場面に応じて、適切な接続方法を選びましょう。

以上です。

----
__関連記事__
[OCI プライベートComputeインスタンスに接続する方法のまとめ](https://qiita.com/liu-wei/items/e0376fd71433d243bce0)
[SQL Developerで様々なDBに接続する方法](https://qiita.com/letian/items/08f2e2f6d90c08549cbf)