0
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?

More than 3 years have passed since last update.

[Autonomous Database]プライベート・エンドポイント・アクセス

Last updated at Posted at 2022-04-04

ADBではVCN内のプライベート・エンドポイントを使用するように指定することができます。
プライベート・エンドポイント・アクセスをおこなうには、事前にNSGを作成する必要があります。

検証環境情報

リソース 名前
VCN k-vcn-osaka-1 10.0.0.0/16
サブネット パブリック k-sub-pub-1 10.0.0.0/24
サブネット プライベート k-sub-pri-1 10.0.1.0/24
サブネット パブリック k-sub-pub-2 10.0.2.0/24
サブネット プライベート k-sub-pri-2 10.0.3.0/24

画像1.png

今回は、パブリックサブネット上のBastion VMを経由しプライベートサブネットのVMにログインし、そこからプライベートサブネット上のADBにログインしました。

前提

検証用のCompute VMを作成

  • 事前に次のようなCompute VMを作成しています
    • パブリックサブネット(k-sub-pub-1)上のVM
      • 名前:Bastion-VM:140.83.55.3(パブリックIP)
    • プライベートサブネット(k-sub-pri-1)上のVM
      • 名前:Private-VM:10.0.1.169(プライベートIP)

Private-VMにOracle Instant Clientをインストール

  • 事前にPrivate-VMにOracle Instant Clientをインストールします

  • Cloud ShellからPrivate-VMにログイン

    • Cloud ShellからポートフォワードでPrivate-VMへの接続を確認
ssh -i id_rsa -o ProxyCommand="ssh -i <秘密鍵の名前> -W %h:%p -p 22 opc@<パブリックVMのパブリックIP>" -p 22 opc@<プライベートVMのプライベートIP>

ssh -i id_rsa -o ProxyCommand="ssh -i id_rsa -W %h:%p -p 22 opc@140.83.55.3" -p 22 opc@10.0.1.169
[opc@private-vm ~]$ 
  • 作業用ディレクトリを作成
mkdir -p ~/network/admin
mkdir oracle
cd oracle
[opc@private-vm oracle]$ pwd
/home/opc/oracle
  • Instant Client Basicパッケージ(ZIP)のダウンロード
wget https://download.oracle.com/otn_software/linux/instantclient/215000/instantclient-basic-linux.x64-21.5.0.0.0dbru.zip
  • Instant Client SQL*Plusパッケージ(ZIP)のダウンロード
wget https://download.oracle.com/otn_software/linux/instantclient/215000/instantclient-sqlplus-linux.x64-21.5.0.0.0dbru.zip
  • ダウンロードできたか確認
[opc@private-vm oracle]$ ll
total 77708
-rw-rw-r--. 1 opc opc 78633249 Jan 24 10:42 instantclient-basic-linux.x64-21.5.0.0.0dbru.zip
-rw-rw-r--. 1 opc opc   936445 Jan 24 10:42 instantclient-sqlplus-linux.x64-21.5.0.0.0dbru.zip
  • ダウンロードしたものを解凍
unzip instantclient-basic-linux.x64-21.5.0.0.0dbru.zip
unzip instantclient-sqlplus-linux.x64-21.5.0.0.0dbru.zip
[opc@private-vm oracle]$ ll -a
total 77712
drwxrwxr-x. 3 opc opc      146 Apr  1 09:44 .
drwx------. 5 opc opc      124 Apr  1 09:42 ..
drwxrwxr-x. 3 opc opc     4096 Apr  1 09:44 instantclient_21_5
-rw-rw-r--. 1 opc opc 78633249 Jan 24 10:42 instantclient-basic-linux.x64-21.5.0.0.0dbru.zip
-rw-rw-r--. 1 opc opc   936445 Jan 24 10:42 instantclient-sqlplus-linux.x64-21.5.0.0.0dbru.zip
  • ORACLE環境変数設定
    .bash_profileに環境変数を記載
cp -p ~/.bash_profile ~/.bash_profile.ora
ll -a ~/ | grep .bash_profile
vi ~/.bash_profile
export ORACLE_BASE=$HOME/oracle
export ORACLE_HOME=$HOME/oracle/instantclient_21_5
export PATH=$PATH:$ORACLE_HOME
export LD_LIBRARY_PATH=$ORACLE_HOME
export NLS_LANG=Japanese_Japan.AL32UTF8
export TNS_ADMIN=$HOME/network/admin

環境変数を反映

source ~/.bash_profile
[opc@private-vm oracle]$ env | egrep 'ORA|LANG|PATH|TNS_ADMIN'
LD_LIBRARY_PATH=/home/opc/oracle/instantclient_21_5
ORACLE_BASE=/home/opc/oracle
LANG=en_US.UTF-8
ORACLE_HOME=/home/opc/oracle/instantclient_21_5
NLS_LANG=Japanese_Japan.AL32UTF8
TNS_ADMIN=/home/opc/network/admin
PATH=/home/opc/.local/bin:/home/opc/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/opc/oracle/instantclient_21_5:/home/opc/oracle/instantclient_21_5
  • sqlplusの確認
sqlplus /nolog
[opc@private-vm oracle]$ sqlplus /nolog

SQL*Plus: Release 21.0.0.0.0 - Production on 金 4月 1 09:54:35 2022
Version 21.5.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

SQL> exit
[opc@private-vm oracle]$ 

手順

1)事前設定

NSG(ネットワーク・セキュリティ・グループ)を作成

  • セキュリティ・リストとNSGはOR条件(どちらかにセキュリティルールを書けば、そのルールは有効)です。
  • そのため、今回ADBを配置するサブネットのセキュリティリストにはセキュリティルールを何も記述しません。

p9.png

  • NSGを作成します
  • ネットワーキング → 仮想クラウド・ネットワーク → 仮想クラウド・ネットワークの詳細 → ネットワーク・セキュリティ・グループ → ネットワーク・セキュリティ・グループの作成

p4.png

  • 作成するNSGの名前を指定
    • 例:k-nsg-1
  • コンパートメントを指定

p5.png

  • NSGのルールを設定します
    • 今回の例
      • 方向:イングレス
      • ソース・タイプ:CIDR
      • ソース:10.0.1.0/24
      • IPプロトコル:TCP
      • 宛先ポート範囲:1522
      • 説明:k-sub-pri-1
  • 補足
    • NSGはステートレス/ステートフルを選択できますが、どちらでも接続できるため今回はステートフルで作成しています

p6.png

このような形で作成されます

p8.png

※NSGのセキュリティ・ルールで、パブリック・サブネットからのアクセスを許可すれば、Bastion VMから直接ADBへのアクセスも可能です。

2)ADBの設定

「ADB作成時(a)」、「ADB作成後(b)」または「ADBクローン時」にプライベート・エンドポイント・アクセスに設定できます。

a)ADB作成時に指定する場合

  • ネットワーク・アクセスの選択で以下を設定
    • プライベート・エンドポイント・アクセスのみを選択
    • VCN
    • サブネット:プライベートサブネットを選択
    • NSG(ネットワーク・セキュリティ・グループ:先程作成したものを選択

p1.png

b) ADB作成後に変更する場合

  • Autonomous Databaseの詳細 → 他のアクション → ネットワーク。アクセスの更新

p2.png

  • ネットワーク・アクセスの選択で以下を設定
    • プライベート・エンドポイント・アクセスのみを選択
    • VCN
    • サブネット:プライベートサブネットを選択
    • NSG(ネットワーク・セキュリティ・グループ:先程作成したものを選択

p3.png

  • 確認画面がでてくるので、対象ADB名を入力し更新します

    • 注意:新しいウォレットをダウンロードし、DBへの接続を再確立する必要があります
      p10.png
  • ADBが更新中になります。ネットワークの箇所も変更されています。

p11.png

  • 数分で使用可能のステータスになります

p12.png

3)接続確認

ADBウォレットの配置

Cloud ShellからポートフォワードでPrivate-VMへウォレット(Wallet_kadw.zip)を転送

scp -i id_rsa -o ProxyCommand="ssh -i id_rsa -W %h:%p -p 22 opc@140.83.55.3" -p 22 Wallet_kadw.zip opc@10.0.1.169:~

Cloud ShellからPrivate-VMへログインしファイルが転送されたか確認

ssh -i id_rsa -o ProxyCommand="ssh -i id_rsa -W %h:%p -p 22 opc@140.83.55.3" -p 22 opc@10.0.1.169

転送されていました

[opc@private-vm ~]$ ls -l
total 24
-rw-r--r--. 1 opc opc 21612 Apr  1 09:01 Wallet_kadw.zip

事前に作成していたウォレット用のディレクトリ($HOME/network/admin)にウォレットを配置し、解凍

mv Wallet_kadw.zip ~/network/admin
cd ~/network/admin
unzip Wallet_kadw.zip

次のようなファイルが生成されます

[opc@private-vm admin]$ ll
total 64
-rw-rw-r--. 1 opc opc  6701 Apr  1 09:01 cwallet.sso
-rw-rw-r--. 1 opc opc  6656 Apr  1 09:01 ewallet.p12
-rw-rw-r--. 1 opc opc  3192 Apr  1 09:01 keystore.jks
-rw-rw-r--. 1 opc opc   691 Apr  1 09:01 ojdbc.properties
-rw-rw-r--. 1 opc opc  3072 Apr  1 09:01 README
-rw-rw-r--. 1 opc opc   114 Apr  1 09:01 sqlnet.ora
-rw-rw-r--. 1 opc opc  1104 Apr  1 09:01 tnsnames.ora
-rw-rw-r--. 1 opc opc  3378 Apr  1 09:01 truststore.jks
-rw-r--r--. 1 opc opc 21612 Apr  1 09:01 Wallet_kadw.zip

sqlnet.ora の次の行を編集し、ウォレットの保存先を置き換えます。

cp -p sqlnet.ora sqlnet.ora.org
vi sqlnet.ora 

sqlnet.oraの編集(「DIRECTORY=」の箇所が「?/network/admin」)

WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
SSL_SERVER_DN_MATCH=yes

sqlnet.oraの編集(「DIRECTORY=」の箇所を「$TNS_ADMIN」に変更)

WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="$TNS_ADMIN")))
SSL_SERVER_DN_MATCH=yes

SQL*PLUSでADBに接続

  • Adminユーザで接続
sqlplus admin/Welcome#1Welcome#1@kadw_low
  • 接続できたか確認
sho user
SQL> sho user
ユーザーは"ADMIN"です。

補足

セキュリティ・リストとNSGの違いについて

セキュリティリスト(SL) ネットワークセキュリティグループ(NSG)
割当先 サブネット インスタンス(NIC)やサービスリソース
ルールで使用できるソース・宛先 CIDR、サービス CIDR、サービス、NSG
ステートレス/ステートフル 選択可能 選択可能
ルールの適用先 NIC NIC

※NSGのサービス制限についてはこちら

ステートレス/ステートフルの違いについて

1.png
※出典:OCI活用資料集-VCN概要 Level 100
※参考:マニュアル-ステートフル・ルールとステートレス・ルール

tnsname.ora の記述について

プライベート・アクセス可能なADBの場合、 host の記述が次のようになる(下記、プライベート・エンドポイントURLはOCIコンソールからも確認可能)

host=<xxxx>.adb.ap-osaka-1.oraclecloud.com

パブリック・アクセス可能なADBの場合の host の記述(パブリック・エンドポイント)は以下。

host=adb.ap-osaka-1.oraclecloud.com

※同一プライベートサブネット上に別のADBを作成した場合でも、上記の 「host=xxxx」 部分の記述が変わるため、プライベート・エンドポイントURLは異なる値となる。

  • パブリック・アクセス可能なADWのtnsnames.oraの例
kadw_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-osaka-1.oraclecloud.com))(connect_data=(service_name=<****>_kadw_high.adb.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-osaka-1.oraclecloud.com, OU=Oracle ADB OSAKA, O=Oracle Corporation, L=Redwood City, ST=California, C=US")))
  • プライベート・アクセス可能なADWのtnsnames.oraの例
kadw_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=<xxxx>.adb.ap-osaka-1.oraclecloud.com))(connect_data=(service_name=<****>_kadw_high.adb.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-osaka-1.oraclecloud.com, OU=Oracle ADB OSAKA, O=Oracle Corporation, L=Redwood City, ST=California, C=US")))

参考

オンプレからの接続方法については下記

0
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
0
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?