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 |
今回は、パブリックサブネット上の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)
- 名前:
- パブリックサブネット(k-sub-pub-1)上のVM
Private-VMにOracle Instant Clientをインストール
-
事前にPrivate-VMにOracle Instant Clientをインストールします
- 最新が21.5.0.0.0なので、これをwgetします
- 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を配置するサブネットのセキュリティリストにはセキュリティルールを何も記述しません。
- NSGを作成します
- ネットワーキング → 仮想クラウド・ネットワーク → 仮想クラウド・ネットワークの詳細 → ネットワーク・セキュリティ・グループ →
ネットワーク・セキュリティ・グループの作成
- 作成するNSGの名前を指定
- 例:k-nsg-1
- コンパートメントを指定
- NSGのルールを設定します
- 今回の例
- 方向:イングレス
- ソース・タイプ:CIDR
- ソース:
10.0.1.0/24
- IPプロトコル:TCP
- 宛先ポート範囲:
1522
- 説明:k-sub-pri-1
- 今回の例
- 補足
- NSGは
ステートレス/ステートフル
を選択できますが、どちらでも接続できるため今回はステートフル
で作成しています
- NSGは
このような形で作成されます
※NSGのセキュリティ・ルールで、パブリック・サブネットからのアクセスを許可すれば、Bastion VMから直接ADBへのアクセスも可能です。
2)ADBの設定
「ADB作成時(a)」、「ADB作成後(b)」または「ADBクローン時」にプライベート・エンドポイント・アクセスに設定できます。
a)ADB作成時に指定する場合
- ネットワーク・アクセスの選択で以下を設定
-
プライベート・エンドポイント・アクセスのみ
を選択 VCN
-
サブネット
:プライベートサブネットを選択 -
NSG(ネットワーク・セキュリティ・グループ
:先程作成したものを選択
-
b) ADB作成後に変更する場合
- Autonomous Databaseの詳細 → 他のアクション →
ネットワーク。アクセスの更新
- ネットワーク・アクセスの選択で以下を設定
-
プライベート・エンドポイント・アクセスのみ
を選択 VCN
-
サブネット
:プライベートサブネットを選択 -
NSG(ネットワーク・セキュリティ・グループ
:先程作成したものを選択
-
-
確認画面がでてくるので、対象ADB名を入力し更新します
-
ADBが更新中になります。ネットワークの箇所も変更されています。
- 数分で
使用可能
のステータスになります
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のサービス制限についてはこちら
ステートレス/ステートフルの違いについて
※出典: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")))
参考
- 共有Exadataインフラストラクチャ上のOracle Autonomous Databaseの使用
- 共有Exadataインフラストラクチャ上のプライベート・エンドポイントを持つAutonomous Database
- Autonomous Database で Private IP Address(Private Endpoints)がリリースされたので、早速接続してみる。
オンプレからの接続方法については下記
- データセンターからADBへの接続について
- マニュアル:例: データ・センターからAutonomous Databaseへの接続
- OCI活用資料集:VCNレベル200-ハイブリッドDNS構成
- GitHub:Hybrid DNS Configuration