🍤

【OCI】PrivateのDBにPublicのサーバからsqlplusでアクセスしてみる

2021/12/30に公開

はじめに

OCIのこのチュートリアルやってプライベートセグにDBを置いたら(普通そうすると思う)どうアクセスするのかなと思って試してみました。

用意するもの

  • VCN…チュートリアルで作ったやつ、Private SubnetとPublic Subnetを一個ずつ持ちます。
  • DBCS…最低スペックで作りました。ほぼチュートリアルの通りですが、配置先をPrivateの方にしています。RACじゃないのでSCANいないです。
    • バージョン…21c
    • DB名…orcl
    • PDB名…pdb_orcl
    • LOCAL LISTENER PORT…1521
    • 作成予定のユーザ…TESTUSER/WelCome123##
  • APサーバ…DBに繋ぐためのサーバ。Public Subnetに置いてある。
    • OS…OEL7
    • シェイプ…VM.Standard.E2.1.Micro

手順

以下はDBとAPサーバ作ったあとやった事です。

1. APサーバのセットアップ

セットアップといってもsqlplus使えるようにするだけです。

wget https://download.oracle.com/otn_software/linux/instantclient/214000/oracle-instantclient-sqlplus-21.4.0.0.0-1.x86_64.rpm
wget https://download.oracle.com/otn_software/linux/instantclient/214000/oracle-instantclient-basic-21.4.0.0.0-1.x86_64.rpm
sudo yum install oracle-instantclient-basic-21.4.0.0.0-1.x86_64.rpm oracle-instantclient-sqlplus-21.4.0.0.0-1.x86_64.rpm
sqlplus64 -V

またついでにDBサーバの1521/tcpには疎通できないことも確認しておきます。

sudo traceroute -T <DBサーバのIP> -p 1521

2. Private SubnetにSecurity ListにIngress Rule作る

以下の感じで作りました。(ソースCIDR隠さなくて良かったですね、Public SubnetのIPv4 CIDRブロックです)

これでAPサーバからDBサーバの1521/tcpが通るようになったので確認しておきます。

sudo traceroute -T <DBサーバのIP> -p 1521

3. DBのセットアップ

やることは

  • (接続のために)ssh-add使ってエージェント転送していく
  • (DBサーバに入れたら)ユーザ作成

です。

まずはDBサーバに入るところから

## まずは手元のマシンで以下の感じでssh-addする
### ないこと確認
ssh-add -l

### 追加
ssh-add -k <path_to_private_key>

### あること確認
ssh-add -l

## APサーバに繋いでみる
ssh -A -l opc <APサーバのIP>

## DBサーバに繋いでみる
ssh -A <DBサーバのIP>

これで入れたので、ユーザを作っていきます

## PDBに作成します
### DBあるか確認(dbとpdbが上がってればOK)
sudo su - grid
crsctl stat res -t -w "NAME coi orcl"
exit

### DBに接続してユーザ作成
sudo su - oracle
ORACLE_PDB_SID=pdb_orcl sqlplus / as sysdba
create user TESTUSER identified by "WelCome123##";
grant CREATE SESSION, CONNECT,RESOURCE,UNLIMITED TABLESPACE to TESTUSER ;
select username from dba_users where username = 'TESTUSER';
exit

ユーザできたので、DBサーバから入っときます

## Service名確認
### 下記の結果の中のpdb_orclで始まるのがそれ
lsnrctl status

### 接続
sqlplus TESTUSER/"WelCome123##"@<DBサーバのホスト名>:1521/<Service名>

4. APサーバからのアクセス

なんて事はないですね、DBサーバと同じようにアクセスすればOKです。

## APサーバにて接続
sqlplus64 TESTUSER/"WelCome123##"@<DBサーバのホスト名>:1521/<Service名>

## 確認
sho con_name
sho user

まとめ

以上簡単にPrivate SubnetにいるDBサーバにアクセスする方法でした。
下記ができれば問題なさそうです。

  • Security ListにIngressルール追加
  • DBに接続…DBサーバに入るのは、Oracle Bastionとやらを使ったほうが良さそうですね

初Cloud & 初Single構成のOracleなのでセキュリティ的にガバガバだったり、手順的に変だったらコメントくださいmm
気が向いたら$300の枠でSaaSで提供されてるGGとかDGとか使ってみて、手組みとの差を体験してみたいです。

Discussion