初めに
冒頭ですが、この記事の位置付けは、次のシリーズ記事の1つです。
シリーズ1:プライベート・サブネット内の OCI Compute に接続
シリーズ2:プライベート・サブネット内の Oracle DB/ADB に接続
2022年8月、Cloud Shellのプライベート・アクセスという機能がリリースされました。Cloud Shellから、パブリック・ネットワークを経由せずにプライベート・ネットワークのリソースにアクセスできるになりました。
OCI Compute、Oracel Base DB 及び Autonomous DBを例にして、ターゲット・インスタンスへの接続方法を紹介したいと思います。
メリット:
✅ 踏み台サーバーを立てる必要がないため、コストを節約できます。
✅ パブリックネットワークを経由せずに、プライベートアクセスで接続できます。
✅ 設定が簡単で、シリアルコンソールを使って手軽に接続できるため、管理者の一時作業に便利です。
目次
1. 事前準備
インスタンス | 接続ツール | TCP ポート | 備考 |
---|---|---|---|
Compute (VM) | SSH | 22 | 秘密キーをアップロード |
Oracle Base DB (VM) | SQL Plus | 1521 | |
Autnomous DB | SQL Plus | 1522 | Walletファイルをアップロード |
※、SQL Plusは、既にCloud Shellに実装済です。
1-1. IAM ポリシーの設定
管理者権限付きのユーザは、このステップを飛ばしてもよいです。
他ユーザに対し、次のポリシーを指定する必要があります。
allow group <group> to use subnets in compartment <compartment>
allow group <group> to use vnics in compartment <compartment>
allow group <group> to use network-security-groups in compartment <compartment>
allow group <group> to inspect vcns in compartment <compartment>
1-2. 秘密キーのアップロード
Cloud Shellを起動し、Computeインスタンスへの接続用の秘密キーをアップロードします。(以下のどちらでもOK)
- 歯車アイコン → アップロード (次の画面)
- キーファイルをCloud Shellに "Drag & Drop"
アップロード先は、ホームディレクトリとなります。アップロード後、ファイルモードを400
に修正し、秘密キーを/home/<username>/.ssh
の下に移動します。
1-3. ADB Walletのアップロード
OCIコンソールからADB Wallet (Zipファイル) をダウンロードしてください。ダウンロード方法について、こちらのドキュメントをご参照ください。
注意点
ダウンロードする時、ADBインスタンスと同じのVCNの端末から実施してください(ADB起動中の状態)。そうでない場合、次のメッセージが表示されます。
ダウンロードした後、ローカルのWalletをCloud Shellの画面に"Drag & Drop"だけでOKです。
格納用のディレクトリを作成し、Walletファイルを移動します。
$HOME/network/admin
liu_wei@cloudshell:~ (ap-tokyo-1)$ pwd
/home/liu_wei
liu_wei@cloudshell:~ (ap-tokyo-1)$ mkdir -p network/admin
liu_wei@cloudshell:~ (ap-tokyo-1)$ mv wallet.zip network/admin
liu_wei@cloudshell:~ (ap-tokyo-1)$
2. プライベート・ネットワークの設定
ネットワークのタイプは「プライベート」と選択します。(デフォルトは、パブリックとなる)
プライベート・ネットワークを設定した時、注意事項があります。VCNのピアリングを使用しない限り、ホーム・リージョン内部のみのVCN、サブネット及びNSGは選択可能です。
接続先のVCNがリストされない場合、他リージョン内になる可能性がありますので、必要によりVCN間のピアリングを作ってください。
正しくリストされた場合、接続先のVCNとサブネット内を指定し、接続ボタンをクリックします。(NSGの指定はオプションです)
3. ターゲット・インスタンスに接続する
3-1. Compute インスタンスに接続
プライベートIPでComputeインスタンスに接続します。
コマンド例:ssh -i <private_key> opc@<private_ip>
3-2. Oracle Base DB に接続
接続コマンド:sqlplus <User>/<Password>@<Hostname_or_IP>:<Port>/<Service_Name>
systemユーザでPDBに接続する例:
sqlplus system/<password>@10.0.0.164:1521/db19c_pdb1.pirvatesubnet1.vcn1.oraclevcn.com
Oracle Base DBインスタンスにもSSHログインできます。ログイン方法は、上記のComputeと同じです。事前に秘密キーのアップロードは必要です。
3-3. Autonomous DB に接続
1) 圧縮のWalletファイルを解凍
liu_wei@cloudshell:admin (ap-tokyo-1)$ pwd
/home/liu_wei/network/admin
liu_wei@cloudshell:admin (ap-tokyo-1)$ unzip wallet.zip
Archive: wallet.zip
inflating: ewallet.pem
inflating: README
inflating: cwallet.sso
inflating: tnsnames.ora
inflating: truststore.jks
inflating: ojdbc.properties
inflating: sqlnet.ora
inflating: ewallet.p12
inflating: keystore.jks
liu_wei@cloudshell:admin (ap-tokyo-1)$ ll
total 76
-rw-r--r--. 1 liu_wei oci 6701 Jan 22 12:25 cwallet.sso
-rw-r--r--. 1 liu_wei oci 6656 Jan 22 12:25 ewallet.p12
-rw-r--r--. 1 liu_wei oci 7475 Jan 22 12:25 ewallet.pem
-rw-r--r--. 1 liu_wei oci 3193 Jan 22 12:25 keystore.jks
-rw-r--r--. 1 liu_wei oci 691 Jan 22 12:25 ojdbc.properties
-rw-r--r--. 1 liu_wei oci 2973 Jan 22 12:25 README
-rw-r--r--. 1 liu_wei oci 114 Jan 22 12:25 sqlnet.ora
-rw-r--r--. 1 liu_wei oci 819 Jan 22 12:25 tnsnames.ora
-rw-r--r--. 1 liu_wei oci 3378 Jan 22 12:25 truststore.jks
-rw-r--r--. 1 liu_wei oci 26470 Jan 22 13:09 wallet.zip
liu_wei@cloudshell:admin (ap-tokyo-1)$
2) 環境変数"ORACLE_HOME"を設定
liu_wei@cloudshell:admin (ap-tokyo-1)$ export ORACLE_HOME=/home/liu_wei
liu_wei@cloudshell:admin (ap-tokyo-1)$ echo $ORACLE_HOME
/home/liu_wei
liu_wei@cloudshell:admin (ap-tokyo-1)$
ORACLE_HOMEを設定せず接続する時、以下のエラーが出ますので、ご注意ください。
ORA-12154: TNS:could not resolve the connect identifier specified
ヒント: $HOME/.bashrcに、export ORACLE_HOME=<path_name>
を追加すれば、Cloud Shellに再接続した後、環境変数を再定義しなくてよいです。
3) sqlnet.oraを編集
以下の行を編集し、Walletの保存先を置き換えます。
編集前:
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
編集後:
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="$ORACLE_HOME/network/admin")))
4) tnsnames.oraの情報を確認
tnsnames.oraから、接続用のサービス情報を確認します。通常以下のように、3つのサービスが表示されます。
<Database_Name>_high
, <Database_Name>_medium
, <Database_Name>_low
5) ADBに接続する
コマンド:sqlplus <User>/<Password>@<Service_Name>
Cloud Shell からパブリックの Autonomous DB にアクセスしたい場合、上記の手順も適用できます。詳細は以前書いた記事をご参考ください。この記事には、OCI Bastionを経由し、プライベートのADBに接続する方法も書いています。その時、まだCloud Shellのプライベート・アクセス機能がリリースされませんでした。プライベート・アクセスのおかげで、OCI Bastionの設定もう要らなくて、接続はより簡単になりました。
以上
関連記事
オラクル・クラウドの個人ブログ一覧
OCI Cloud Shellの概要
OCI Cloud Shell上のSQL PlusからAutonomous DBに接続する
プライベート・サブネット内のOCI Computeインスタンスに接続する方法のまとめ
ドキュメント
クラウド・シェルのプライベート・アクセス
OCI Cloud Shell - FAQ on Using Private Subnets (Doc ID 2883399.1) (英語)
よく聞かれる質問をカバーしています。内容を見るには、オラクル・アカウントは必要です。