初めに
この記事の位置付けは、次のシリーズ記事の1つです。
| 利用方法 | タイトル | Oracle DBへ | ADBへ |
|---|---|---|---|
| OCI Bastion | OCI Bastion経由でプライベート・サブネット内のAutonomous DBに接続 | - | ✅ |
| NLB | OCI NLB経由でプライベートサブネット内の Oracle DB (Base DB/ADB) に接続する方法 | ✅ | ✅ |
| OCI DB Tools | OCI データベース・ツールでオラクルDBへの接続方法 | ✅ | ✅ |
| OCI Cloud Shell | OCI Cloud Shell からプライベート・サブネット内のインスタンスに接続する | ✅ | ✅ |
| OCI Cloud Shell | OCI Cloud Shell上のSQL PlusからADBに接続する | - | ✅ |
OCI (Oracle Cloud Infrastructure) のプライベート・サブネットに配置されたOracleデータベースは、セキュリティ上、インターネットからの直接アクセスが遮断されています。オンプレミス環境から接続するには、通常、「踏み台サーバ」の設置かVPNの構築が必要です。
しかし、これらの方法には初期構築や運用管理のコストがかかります。そこで注目したいのが、OCIのネイティブサービスである「Bastion」です。Bastionサービスを使えば、追加のインフラを準備することなく、オンプレミス端末から直接プライベートなDBにセキュアな接続経路を確立できます。しかも、このサービスは無料で利用できます。
本記事では、OCI Bastionサービスを活用した、効率的なデータベース接続方法を紹介します。
メリット:
✅ 踏み台サーバを立てる必要がないため、コストを節約できる。
✅ SSHトンネルで通信するので、セキュアな接続を確保できる。
✅ 設定方法は比較的にやり易い(数分間でOK)
✅ OCI Bastion自体は無料で利用できる。
制限事項:
⏳セッション存続時間(最大3時間)
検証環境
| 項目 | 内容 | コメント |
|---|---|---|
| DBタイプ | OCI Base DB (VM) | IaaS DBにも接続可能 |
| DBバージョン | 19c Standard Edition | |
| Client OS | Windows 2019 Server | |
| DB接続ツール | SQL Developer Ver 21.4 | ダウンロードURL |
| SQL Plus (Oracle Instant Client) | ダウンロードURL | |
| SSHソフト | OpenSSH |
OCI上のWindowsサーバーにOracle DB 19cをインストールする手順
1. Bastionの作成
Identity & Security → Bastion → Create Bastion
| 項目 | 内容 |
|---|---|
| Bastion名 | 適当な名前を入力 |
| ターゲットVCNとサブネット | Oracle DBが所属するVCNとサブネットを選択 |
| CIDRブロック許可リスト | このテストではCIDRブロックの許可リストを「0.0.0.0/0」に設定しているが、運用時には範囲を絞り込むことが推奨される。例えば、 接続元(クライアント)のIPアドレスのみを許可するように。 |

注意
1. このテストでは、CIDRブロックの許可リストを「0.0.0.0/0」に設定しています。運用時には範囲を絞り込むことが推奨されます。例えば、接続元(クライアント)のIPアドレス範囲のみを許可するのが良いでしょう。
2. OCI Bastionを作成する際には、ターゲットのVCNとサブネットを指定する必要がありますが、Bastion自体に対し、配置場所を指定する必要はありません(誤解されることがよくあります)。
Bastionがアクティブの状態になると、「プライベート・エンドポイントIP」は次の画面から確認できます。このIPはターゲット・サブネット内で自動的に割り当てられます。次のステップで、このIPをセキュリティ・リストの入力ルールに追加します。「CIDRブロック許可リスト」を編集したい場合は、「編集」ボタンをクリックすれば大丈夫です。

2. セッションの作成
Bastion → Sessions → Create session
| 項目 | 内容 |
|---|---|
| セッション・タイプ | "SSH port forwarding session"を選択 |
| ターゲット・ホストに接続する方法 | "IPアドレス"を選択 (デフォルト) |
| IPアドレス | 接続先DBの「プライベートIP」 |
| ポート | 1521 |
| SSHキー | 既存のキーファイルを利用するか、新しいキーペアを作成する。(秘密キーをDBクライアント側に保存してください) |

ヒント:OCI Baase DB Serviceを接続する場合、以下の画面でプライベートIPが取得できます。
セッションはアクティブの状態になりましたら、次のように、3ドットのメニューをクリックしてSSHコマンドをコピーします。このコマンドは、STEP-4. SSHトンネルの作成で使用されます。
デフォルトでは、セッションは3時間有効ですが、Bastionを作成する際にはこの期間を変更することが可能です。
3. セキュリティ・リストに入力ルールを追加
クラウド上のDBにアクセスするため、TCPポート1521を入力ルールに追加するのは必要です。
設定方法は、以下のどちらでもよいです:
- プライベート・サブネットに紐づけられるセキュリティ・リストに、ルールを追加
- DBインスタンスに紐づけられるNSGに、ルールを追加
これから、セキュリティ・リストを例にして設定します。
"Source CIDR"は、Bastionの「プライベート・エンドポイントIP」です(STEP-1の Bastion詳細情報画面に表示されます)。
4. SSHトンネルの作成
クライアントでSSHコマンドを実行してトンネルを作成します。この例は、OpenSSHを利用します。まだインストールされていない場合、PowerShellを起動して、以下のコマンドでインストールしてください(管理者ユーザで実行)。
コマンド:Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
PS C:\Windows\system32> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Name : OpenSSH.Client~~~~0.0.1.0
State : Installed
Name : OpenSSH.Server~~~~0.0.1.0
State : Installed
PS C:\Windows\system32>SSHトンネルを作成するコマンド: (STEP-2でコピーしたSSHコマンド)
ssh -i <privateKey> -N -L <localPort>:<Private_IP_of_DB>:1521 -p 22 <bastion_ocid>@host.bastion.ap-tokyo-1.oci.oraclecloud.com<privateKey>を秘密キーのパスとファイル名に置き換えます。
Windowsの例(PowerShell):$home\.ssh\id_rsa<localPort>を1521に置き換えます。<Private_IP_of_DB>は自動に実のIPが埋められるので、変更する必要はありません。
Windows (PowerShell):
Start-Job { }でコマンドを囲むLinux OS: コマンドの最後に
&を追加※、出力メッセージを表示しませんので、ご注意ください。初回トンネル作成時、或いはトラブル・シューティングの時、フォア・グラウンド・プロセスとして実施してください。
PS C:\Windows\system32> Start-Job { ssh -i $home\.ssh\id_rsa -N -L 1521:10.0.1.171:1521 -p 22 <bastion_ocid>@host.bastion.ap-tokyo-1.oci.oraclecloud.com }
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost ssh -i $home\.ssh\id_r...
PS C:\Windows\system32>5. Oracle DBに接続
- 接続を新規作成
- Database Type: デフォルト(Oracle)を指定
- Role: デフォルトのままでよいが、必要に応じて指定できます。
- Username,Password: ユーザ名とパスワードを入力。
- Hostname: localhostと入力する(重要)。Port: 1521
- SID、Service Name: 片方を入力(PDBへ接続したい場合、PDBのサービス名を入力)。
- Save Password: チェックしたら、次回接続の時、パスワードの入力が省略できます。
- 「テスト」ボタンを押し、接続をテストします。接続成功を確認したら、「接続」ボタンを押し、接続を立てます。

- サービス名の確認方法は、以下の記事をご参考ください。
Oracle Base Database のサービス名を取得する方法
- SQL Plusで接続したい場合、トンネル作成後、以下のコマンドを実行してください。
sqlplus <User>/<Password>@localhost:1521/<Service_Name>
c:\instantclient_21_3>sqlplus system@localhost:1521/DB19cPri_pdb1.privatesubnet1.vcn1.oraclevcn.com
SQL*Plus: Release 21.0.0.0.0 - Production on Fri Apr 22 07:39:11 2022
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Enter password:
Last Successful login time: Fri Apr 22 2022 07:38:39 +00:00
Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.14.0.0.0
SQL>付録
トラブル・シューティング
DBへの接続が失敗した場合、以下のような原因は一般的です:
- 無効なユーザーまたはパスワード。
- ユーザー・ロールの指定は間違った。
- DBインスタンスはまだ起動していない。
- IaaS DBの場合、接続先サーバのファイアウォールには、リスナー・ポート(1521)が公開されていない。
- Oracle Base DBサービスの場合、リスナー・ポート(TCP 1521)は、Ingressルールに追加されていない。
対策:セキュリティ・リストまたはNSGを確認してください。 - SSHトンネルは未作成か、作成が失敗した。
- トンネル作成失敗、或いはタイムアウトの時、以下のメッセージが表示される。
Connection to host.bastion.ap-tokyo-1.oci.oraclecloud.com closed by remote host. - Bastionのセッション期限が切れた(デフォルトは3時間)。
- セッション期限が切れた後、SSHトンネルを作成しようとしたら、以下のエラーが発生する。
<OCID_of_Bastionsession>@host.bastion.ap-tokyo-1.oci.oraclecloud.com: Permission denied (publickey)
対策:セッションを再作成する。
Bastionの制限
| 項目 | 内容 |
|---|---|
| 最大Bastion数 | テナンシ毎に5つ |
| 最大セッション数 | Bastionあたり20セッション |
| セッション存続時間 | 30分~3時間 |
| データ転送制限 | データ転送の制限はありません。 ただし、SSH接続あたりの接続速度は16 Mbpsに制限されます。 |
以上