ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

Autonomous Database で Private IP Address(Private Endpoints)がリリースされたので、早速接続してみる。

Autonomous Database で Private IP Address(Private Endpoints)がリリースされました。その名の通り Autonomous Database に Private IP Address で接続できます。早速お試ししてみますやで。
彡(゚)(゚)

1. Private Endopoints のマニュアル記述

Autonomous Database の Private Endpoints のマニュアル記述は下記の通り彡(゚)(゚)

Configure Private Endpoints with Autonomous Database
https://docs.oracle.com/en/cloud/paas/atp-cloud/atpug/access-configure-samples.html#GUID-FD03A24D-3EF5-4F62-9B5F-11EA1E1FBDA0
:
To allow incoming and outgoing traffic to the Autonomous Database instance,
you need to define security rules in an NSG that create a virtual firewall for your Autonomous Database.
Private endpoint security rules are stateless, so you create both ingress and egress rules for the Autonomous Database instance.
:

NSG(Network Security Group) の使用が必須です。マニュアルにはサンプルとして stateless rule による接続設定が記載されているので、その条件を満たすように Network を構成してみるやで彡(゚)(゚)

2. 検証構成

下記の構成で検証しました。踏み台経由で Private Compute に接続して、そこから Autonomous Database の Private Endpoint に接続しますやで。
彡(゚)(゚)
private001.jpg

3. VCN, Subnet, Route Table, Security List, NSG(Network Security Group) の作成

下記のような記事を参照して、VCN, Subnet, Route Table, Security List, NSG(Network Security Group) を作成します。

初回VCN作成をサクッとできるOracle Cloud Infrastructure Virtual Networking Quickstart & 仮想ファイアウォール設定の理解
https://qiita.com/yamada-hakase/items/7967a7671db50b6c4d6c

ポイントになる Autonomous Database を配置する Subnet, Security List, NSG(Network Security Group) のスクショを貼っておきます。


Subnet は 1.の構成図通り 10.0.2.0/24 の CIDR を指定して作成します。 private003.jpg


上記Subnet にアタッチする Security List には、セキュリティルールを何も記述しません。OCIの場合は Security List と NSG のどちらかにセキュリティルールを書けば、そのルールは有効になるからです。OR条件です。 private004.jpg


NSG(Network Security Group) のセキュリティルールは下記の通りです。ステートレスにチェックを入れているため、Ingressルール と それに対応するEgressルール を併記します。

Ingress ... Src(10.0.1.x:Any Port) ==> Dst(10.0.2.x:1522), Stateless Rule
Egress  ... Dst(10.0.1.x:Any Port) <== Src(10.0.2.x:1522), Stateless Rule

private005.jpg

4. Private Subnet に Autonomous Database を作成

Private Subnet に Autonomous Database を作成します。下記は作成する VCN, Subnet, NSG を選択するスクショです。

private007.jpg

上記以外は別段に特別な事はありません。出来るのを待つ。彡(゚)(゚)

5. Walletの配置&解凍 と nslookup、Autonomous Database(Private IP)への接続

Autonomous Database接続用のWalletをダウンロードして、Private Compute に配置&解凍します。今回は /home/opc/work/tns に配置&解凍してます。

$ pwd
/home/opc/work/tns
$ cat sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/home/opc/work/tns")))
SSL_SERVER_DN_MATCH=yes
$ cat tnsnames.ora
aysprv1_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=xxxxxxxx.adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=xxxxxxxxxxxxxxx_aysprv1_high.atp.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

aysprv1_low = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=xxxxxxxx.adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=xxxxxxxxxxxxxxx_aysprv1_low.atp.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

aysprv1_medium = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=xxxxxxxx.adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=xxxxxxxxxxxxxxx_aysprv1_medium.atp.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

aysprv1_tp = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=xxxxxxxx.adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=xxxxxxxxxxxxxxx_aysprv1_tp.atp.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

aysprv1_tpurgent = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=xxxxxxxx.adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=xxxxxxxxxxxxxxx_aysprv1_tpurgent.atp.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

$

ホスト名を nslookup で名前解決してみると……彡(゚)(゚)

$ nslookup xxxxxxxx.adb.ap-tokyo-1.oraclecloud.com
Server:         xxx.xxx.xxx.254
Address:        xxx.xxx.xxx.254#53

Non-authoritative answer:
Name:   xxxxxxxx.adb.ap-tokyo-1.oraclecloud.com
Address: 10.0.2.4

$

ちゃんと Private IP Address に解決してるやね。さて準備はできたので、接続してみると……

$ sqlplus /nolog

SQL*Plus: Release 18.0.0.0.0 - Production on Mon Mar 2 16:47:59 2020
Version 18.5.0.0.0

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

SQL> CONNECT ADMIN/xxxxxxxxxxxx@aysprv1_tp
Connected.
SQL>

ちゃんと接続できたやで!彡(^)(^)

6. (※追記)ステートフルのNSGセキュリティルールで接続

ステートフルのNSGセキュリティルール(Ingressのみ)でも接続できました。マニュアルに載ってるのはあくまでサンプルとしてで、NSG の ステートレス/ステートフル はどちらでも良いもよう。
彡(゚)(゚)

Ingress ... Src(10.0.1.x:Any Port) ==> Dst(10.0.2.x:1522), Stateful Rule
Egress  ... Auto by Stateful Rule

private008.jpg

$ sqlplus /nolog

SQL*Plus: Release 18.0.0.0.0 - Production on Tue Mar 3 03:44:23 2020
Version 18.5.0.0.0

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

SQL> CONNECT ADMIN/xxxxxxxxxxxx@aysprv1_tp
Connected.
SQL>

7. まとめ

Autonomous Database の Private IP Address(Private Endpoints) に接続できたやで! NSG(Network Security Group)を使うのと、その NSG に 1522 の Ingressルール(とstatelessの場合は対応するEgressルール)を記載するのがポイントでしょうか。

外部(Internet)から隔離されたネットワークに Autonomous Database を配置できます。これでますます Autonomous Database の 使い途 が拡がりました。皆さん、どんどん活用して下さいね。
彡(^)(^)

補足. ホスト名の名前解決について

OCI VCN外(OnP や 他社クラウド)における ウォレットの tnsnames.ora に記載されたホスト名の名前解決については、下記マニュアルの記載のとおり hosts に記述するか Hybrid DNS構成 を組んで下さい。VCN内で Default DNS を使用している場合は、そちらで名前解決できます。

https://docs.cloud.oracle.com/en-us/iaas/Content/Database/Concepts/adbsprivateaccess.htm#ConnectingtoanAutonomousDatabasewithaPrivateEndpoint

To resolve the Autonomous Database private endpoint in your on-premise host's /etc/hosts file

Hybrid DNS Configuration
https://github.com/terraform-providers/terraform-provider-oci/blob/255817f83956f1f9a3ab903e11465e8b4dde1957/docs/examples/networking/hybrid_dns/Hybrid-DNS-configuration-using-DNS-VM-in-VCN.md