2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCI Bastion経由でプライベート・サブネット内のAutonomous DBに接続する

Last updated at Posted at 2022-04-20

初めに
冒頭ですが、この記事は次のシリーズ記事の1つです。
シリーズ1:OCI Bastion サービス
シリーズ2:プライベート・サブネット内の Oracle DB/ADB に接続

プライベート・サブネットにADBを作成した場合、ADBへのアクセスはプライベート・エンドポイントを介して行います。VPNを設定しない場合、OCI Bastionサービスを利用すると、踏み台サーバを構築せずにOn-Pのクライアントからプライベート・サブネット内のADBに接続できます。OCI Bastionサービスは無料で利用できます。
image.png

検証環境

項目 内容 コメント
ADBタイプ Data Warehouse ATPにも適用
クライアントOS Windows Server 2019
DB接続ツール SQL Developer Ver 21.4 SQL PlusでもOK
SSHソフト OpenSSH

ステップ

1. 事前準備

ADB Walletをダウンロード
OCIコンソールからダウンロードした後(詳細は省略)、それをクライアント側に保存します。

ADBの「プライベート・エンドポイントIP」を確認
ADBの詳細ページから、「プライベート・エンドポイントIP」を取得できます。

2. Bastionの作成

Identity & Security -> Bastion -> Create Bastion

項目 内容
要塞名 適当な名前を入力
ターゲットVCNとサブネット ADBが所属する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をNSGのイングレス・ルールに追加します。「CIDRブロック許可リスト」を編集したい場合は、「編集」ボタンをクリックすれば大丈夫です。

image.png

3. セッションの作成

Bastion -> Sessions -> Create session

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


セッションはアクティブの状態になりましたら、次のように、3ドットのメニューをクリックしてSSHコマンドをコピーします。このコマンドは、「STEP 6. SSHトンネルの作成」で使用されます。

デフォルトでは、セッションは3時間有効ですが、Bastionを作成する際にはこの期間を変更することが可能です。

4. NSGにイングレス・ルールを追加する

プライベートADBを作成する時、ネットワーク・セキュリティ・グループ(NSG)がアタッチされます。ADBにアクセスするため、TCPポート1522を入力ルールに追加するのは必要です。

まだ行っていない場合は、次のようにルールを追加してください。"Source CIDR"は、Bastionの「プライベート・エンドポイントIP」です(Bastionの情報ページに表示されます)。
image.png

5. ADBのホスト名をローカルで識別可能にするため

次の2つの方法があり、どちらもOKです。

方法1. ホストファイルを編集する

接続クライアントに、次のファイルを編集します。

ファイル名
Windows OS: C:\Windows\System32\drivers\etc\hosts
Linux OS: /etc/hosts

追加内容: 127.0.0.1 <プライベート・エンドポイントURL>
例:127.0.0.1 xxxxxxxx.adb.ap-tokyo-1.oraclecloud.com

方法2. tnsnames.oraを編集する

ファイルtnsnames.oraに記載されているホスト名は、ADBの「プライベート・エンドポイントURL」です。 BastionサービスのSSHポート転送を使用するため、ローカル(DBクライアン側)からADBへのSSHトンネルを作成します。それで、ホスト名をlocalhostに変更する必要があります。

重要 !!
ホスト名の編集は、Linux OSで実施してください(例えば、vi, sedコマンド)。Windowsでホスト名を編集して保存したら、tnsnames.oraファイル内のサービス名が識別されませんので、ご注意ください。

以下のようにホスト名を変更してください。
編集前:host=<Private Endpoint URL> 例:host=xxxxxxxx.adb.ap-tokyo-1.oraclecloud.com
編集後:host=localhost

編集後のイメージは、以下のようです。
image.png

以下は、Oracle Linuxでの実施例です(解凍+編集+圧縮)。

[opc@linux8 ~]$ pwd
/home/opc
[opc@linux8 ~]$ mkdir wallet_local
[opc@linux8 ~]$ unzip Wallet_adw02.zip -d ./wallet_local
Archive:  Wallet_adw02.zip
  inflating: ./wallet_local/README
  inflating: ./wallet_local/cwallet.sso
  inflating: ./wallet_local/tnsnames.ora
  inflating: ./wallet_local/truststore.jks
  inflating: ./wallet_local/ojdbc.properties
  inflating: ./wallet_local/sqlnet.ora
  inflating: ./wallet_local/ewallet.p12
  inflating: ./wallet_local/keystore.jks
[opc@linux8 ~]$ cd wallet_local
[opc@linux8 wallet_local]$ sed -i 's/host=[a-z0-9]*.adb.ap-tokyo-1.oraclecloud.com/host=localhost/' tnsnames.ora
[opc@linux8 wallet_local]$ zip Wallet_adw02_local.zip *
  adding: cwallet.sso (stored 0%)
  adding: ewallet.p12 (stored 0%)
  adding: keystore.jks (deflated 13%)
  adding: ojdbc.properties (deflated 49%)
  adding: README (deflated 56%)
  adding: sqlnet.ora (deflated 9%)
  adding: tnsnames.ora (deflated 73%)
  adding: truststore.jks (deflated 28%)
[opc@linux8 wallet_local]$

利用中のリージョンにより、リージョン・コード(ap-tokyo-1)を置き換えてください。

名前を区別するため、Wallet_adw02_local.zipを名付けます。当ディレクトリの全ファイルを一つのZipファイルに圧縮します。圧縮後、接続元のクライアントに転送してください。

6. 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トンネルを作成するコマンド:

ssh -i <privateKey> -N -L <localPort>:<Private_IP_of_ADB>:1522 -p 22 <bastion_ocid>@host.bastion.ap-tokyo-1.oci.oraclecloud.com
  • <privateKey>を秘密キーのパスとファイル名に置き換える。
     Windowsの例(PowerShell):$home\.ssh\id_rsa
  • <localPort>1522に置き換える。
  • <Private_IP_of_ADB>は自動に実のIPが埋められるので、変更する必要がない。

PowerShllのコマンド例:

ssh -i $home\.ssh\id_rsa -N -L 1522:10.0.1.130:1522 -p 22 <bastion_ocid>@host.bastion.ap-tokyo-1.oci.oraclecloud.com

※、接続成功の場合、コマンドプロンプトを返さない。

7. ADBに接続する

  • SQL Developerを開き、接続を新規作成
    Database Type: デフォルトのOracleを指定
    Connection Type: Cloud Walletを指定
    Configuration File:(ZIPファイルのままでよい。)
    ホストファイルを編集した場合:元のWalletファイルを指定
    ホストファイルを編集していない場合:tnsnames.oraを編集したWalletファイルを指定(次のスクリーンショットのように)。
    Service: 必要に応じて、XXXX_high, XXXX_medium, XXXX_lowの選択肢から指定
    テスト」ボタンを押し、接続をテストします。接続成功を確認したら、「接続」ボタンを押し、接続を立てます。
    image.png

SQL Plusを使いたい場合
クライアント側からSQL Plusを利用しプライベートADBへの接続も可能です。上記ステップ以外、sqlnet.oraの編集も必要です。別のトピックとなりますので、ここで割愛させていただきます。興味のある方は以下の記事をご参照ください。接続元は"OCI Cloud Shell"ですが、作業の流れは同様です。(SQL Plusの場合、tnsnames.oraの修正も必要ですが、最後にWalletファイルの圧縮は不要です。)
OCI Cloud Shell上のSQL PlusからADBに接続する

付録

トラブル・シューティング

ADBへの接続が失敗した場合、以下の原因は一般的です。ご参考ください。

  • 無効なユーザーまたはパスワード。
  • ユーザー・ロールの指定は間違った。
  • ADBインスタンスはまだ起動していない。
  • リスナー・ポート(TCP 1522)は、Ingressルールに追加されていない。
  • SSHトンネルは未作成か、作成が失敗した。
    トンネル作成失敗、或いはタイムアウトの時、以下のメッセージが表示される。
    Connection to host.bastion.ap-tokyo-1.oci.oraclecloud.com closed by remote host.
  • tnsnames.oraの編集が間違ったため、サービス名が識別できない。(Linux OSで編集)
  • Bastionのセッション期限が切れた(デフォルトは3時間)。
    セッション期限が切れた後、SSHトンネルを作成しようとしたら、以下のエラーが発生する。
    <bastion_ocid>@host.bastion.ap-tokyo-1.oci.oraclecloud.com: Permission denied (publickey)
    対策:セッションを再作成する。

Bastionの制限

項目 内容
最大Bastion数 テナンシ毎に5つ
最大セッション数 Bastionあたり20セッション
最大セッション存続時間 3時間
最小セッション存続時間 30分
データ転送制限 データ転送の制限はありません。
ただし、SSH接続あたりの接続速度は16 Mbpsに制限されます。

以上です。

関連記事
オラクル・クラウドの個人ブログ一覧
OCI Cloud Shell上のSQL PlusからAutonomous DBに接続する
SQL Developerで様々なDBに接続する方法
Oracle Base DBのサービス名を取得する
OCI データベース・ツールでオラクルDBへの接続方法
OCI Bastion経由でプライベート・サブネット内のOracle DBに接続する
OCI Bastion経由でMySQL Database Serviceに接続する

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?