OCI Bastionサービスでプライベートサブネット内のOracle DBに接続する方法

Database

初めに

この記事の位置付けは、次のシリーズ記事の1つです。

利用方法タイトルOracle DBへADBへ
OCI BastionOCI Bastion経由でプライベート・サブネット内のAutonomous DBに接続-
NLBOCI NLB経由でプライベートサブネット内の Oracle DB (Base DB/ADB) に接続する方法
OCI DB ToolsOCI データベース・ツールでオラクルDBへの接続方法
OCI Cloud ShellOCI Cloud Shell からプライベート・サブネット内のインスタンスに接続する
OCI Cloud ShellOCI Cloud Shell上のSQL PlusからADBに接続する-

OCI (Oracle Cloud Infrastructure) のプライベート・サブネットに配置されたOracleデータベースは、セキュリティ上、インターネットからの直接アクセスが遮断されています。オンプレミス環境から接続するには、通常、「踏み台サーバ」の設置かVPNの構築が必要です。

しかし、これらの方法には初期構築や運用管理のコストがかかります。そこで注目したいのが、OCIのネイティブサービスである「Bastion」です。Bastionサービスを使えば、追加のインフラを準備することなく、オンプレミス端末から直接プライベートなDBにセキュアな接続経路を確立できます。しかも、このサービスは無料で利用できます。

本記事では、OCI Bastionサービスを活用した、効率的なデータベース接続方法を紹介します。
Connect to Oracle DB via OCI Bastion Service

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

制限事項:
⏳セッション存続時間(最大3時間)

検証環境

項目内容コメント
DBタイプOCI Base DB (VM)IaaS DBにも接続可能
DBバージョン19c Standard Edition
Client OSWindows 2019 Server
DB接続ツールSQL Developer Ver 21.4ダウンロードURL
SQL Plus (Oracle Instant Client)ダウンロードURL
SSHソフトOpenSSH
IaaS DBとは、OCI 上のマネージド型データベースサービス(例:Oracle Base Database Service)ではなく、ユーザー自身が Compute インスタンス (VM) に手動でインストール・構成したデータベース を指します。インストール手順については、以下の記事をご参照ください。
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アドレスのみを許可するように。
Create OCI Bastion

注意
1. このテストでは、CIDRブロックの許可リストを「0.0.0.0/0」に設定しています。運用時には範囲を絞り込むことが推奨されます。例えば、接続元(クライアント)のIPアドレス範囲のみを許可するのが良いでしょう。
2. OCI Bastionを作成する際には、ターゲットのVCNとサブネットを指定する必要がありますが、Bastion自体に対し、配置場所を指定する必要はありません(誤解されることがよくあります)。

Bastionがアクティブの状態になると、「プライベート・エンドポイントIP」は次の画面から確認できます。このIPはターゲット・サブネット内で自動的に割り当てられます。次のステップで、このIPをセキュリティ・リストの入力ルールに追加します。「CIDRブロック許可リスト」を編集したい場合は、「編集」ボタンをクリックすれば大丈夫です。

Check private endpoint IP address

2. セッションの作成

Bastion → Sessions → Create session

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

Create Bastion Session

ヒント:OCI Baase DB Serviceを接続する場合、以下の画面でプライベートIPが取得できます。
Check  private IP address of Oracle Base DB

セッションはアクティブの状態になりましたら、次のように、3ドットのメニューをクリックしてSSHコマンドをコピーします。このコマンドは、STEP-4. SSHトンネルの作成で使用されます。
Copy SSH command
デフォルトでは、セッションは3時間有効ですが、Bastionを作成する際にはこの期間を変更することが可能です。

3. セキュリティ・リストに入力ルールを追加

クラウド上のDBにアクセスするため、TCPポート1521を入力ルールに追加するのは必要です。
設定方法は、以下のどちらでもよいです:

  • プライベート・サブネットに紐づけられるセキュリティ・リストに、ルールを追加
  • DBインスタンスに紐づけられるNSGに、ルールを追加

これから、セキュリティ・リストを例にして設定します。
Edit Ingress rule
"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: チェックしたら、次回接続の時、パスワードの入力が省略できます。
    • テスト」ボタンを押し、接続をテストします。接続成功を確認したら、「接続」ボタンを押し、接続を立てます。Connect to Oracle DB with SQL developer
    • サービス名の確認方法は、以下の記事をご参考ください。
      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に制限されます。

以上

タイトルとURLをコピーしました