OCIテナンシを跨いでプライベート・インスタンスに接続する (Part 3 - リージョン間)

本ブログは、[オラクル・クラウドの個人ブログ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。

# 初めに
ISV様(SaaS提供者)と各エンドユーザ様のOCI環境は、コンパートメント単位ではなく、<strong>テナンシ</strong>で分けるケースがよくあります。この場合、ISV様の管理者から、インターネットを経由せず、エンドユーザ様のプライベート・インスタンスにアクセスしたいのは、一般的な要件です。

やり方は、いろいろありますので、４回連載で接続方法を紹介したいと思います。
- [Part 1](https://qiita.com/liu-wei/items/25d42b36689dce036210): <strong>LPG</strong>（ローカル・ピアリング・ゲートウェイ）の利用
- [Part 2](https://qiita.com/liu-wei/items/335439492c3d54558d88): <strong>DRG</strong>（動的ルーティング・ゲートウェイ）<strong>アタッチメント</strong>の利用
- Part 3 <strong>(本文)</strong>: DRG <strong>RPC</strong>（リモート・ピアリング接続）で<strong>リージョン間</strong>の接続
- [Part 4](https://qiita.com/liu-wei/items/315e48001b4521c471e3): 各方法の差異比較

__構成図__
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/95d886bd-0474-cd70-e183-55c41d57cf66.png)

__検証環境__
Compute Instance (Linux 8 VM)

※、VMを例にして紹介しますが、この方法は、プライベート・サブネットに格納されるOracle Base DB或いはADBへの接続にも適用します。

__制限事項__
- 接続元と接続先のVCNの<strong>CIDRブログは、重複しない</strong>こと。
- リージョンごと、最大<strong>5個</strong>のDRGが作れるというサービス制限がある（ソフトリミット）。
- テナンシ間のリモート・ピアリング接続をするのに、レガシーDRGではなく、<strong>DRGv2</strong>(アップグレードされたDRG)は必要である。

__接続方法__
- [1. 事前準備](#1-事前準備)
  - [1-1. IAMリソースの作成](#1-1-iamリソースの作成)
  - [1-2. ポリシーの作成](#1-2-ポリシーの作成)
  - [1-3. ネットワーキング・リソースの作成](#1-3-ネットワーキングリソースの作成)
- [2. テナンシ間、リージョン間のプライベート接続](#2-テナンシ間リージョン間のプライベート接続)
  - [2-1. DRGの作成](#2-1-drgの作成)
  - [2-2. DRGアタッチメントの作成](#2-2-drgアタッチメントの作成)
  - [2-3. RPC（リモート・ピアリング接続）の作成](#2-3-rpcリモートピアリング接続の作成)
  - [2-4. RPC接続の確立](#2-4-rpc接続の確立)
  - [2-5. ルート表とセキュリティ・リスト(or NSG)の設定](#2-5-ルート表とセキュリティリストor-nsgの設定)
  - [2-6. 相手のVMにSSH接続してみる](#2-6-相手のvmにssh接続してみる)

# 1. 事前準備
## 1-1. IAMリソースの作成
|テナンシ|リソース・タイプ|名前|コメント|
|:--|:--|:--|:--|
|ISV|コンパートメント|Compt-ISV|接続元(Requestor)|
|ISV|ユーザー|ISV-Admin|ISV様の管理者|
|ISV|グループ|ISV-Admin-Grp|ISV様の管理者を入れる|
|User-A|コンパートメント|Compt-User-A|接続先(Acceptor)|

## 1-2. ポリシーの作成
|テナンシ|ポリシー名|コメント|
|:--|:--|:--|
|ISV|Policy-RPC-ISV|<font color=blue>root</font>コンパートメントの下に作成|
|User-A|Policy-RPC-User-A|<font color=blue>root</font>コンパートメントの下に作成|

__ポリシーの詳細__
設定箇所：接続元(Requestor)のテナンシ (<strong>ISV様</strong>より作成)
ポリシー名：Policy-RPC-ISV
ステートメント：
```
Define tenancy User-A as <OCID_of_Tenancy_User-A>
Allow group ISV-Admin-Grp to manage remote-peering-from in compartment Compt-ISV
Endorse group ISV-Admin-Grp to manage remote-peering-to in tenancy User-A
```

設定箇所：接続先(Acceptor)のテナンシ (<strong>エンドユーザ様</strong>より作成)
ポリシー名：Policy-RPC-User-A
```
Define tenancy ISV as <OCID_of_Tenancy_ISV>
Define group ISV-Admin-Grp as <OCID_of_ISV-Admin-Grp>
Admit group ISV-Admin-Grp of tenancy ISV to manage remote-peering-to in compartment Compt-User-A
```

## 1-3. ネットワーキング・リソースの作成
|テナンシ|リージョン|リソース・タイプ|名前|コメント|
|:--|:--|:--|:--|:--|
|ISV|Tokyo|VCN|VCN-ISV|10.0.0.0/16|
|||Private Subnet|Private Subnet ISV|10.0.0.0/24|
|User-A|Osaka|VCN|VCN-User-A|192.168.0.0/16|
|||Private Subnet|Private Subnet User-A|192.168.0.0/24|

# 2. テナンシ間、リージョン間のプライベート接続
## 2-1. DRGの作成
ISVとエンドユーザのテナンシに、それぞれのDRGを作成します。
ISV様用：DRG-ISV (次のように)
エンドユーザ様用：DRG-User-A (画面を省略)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/f24b073f-cecb-da78-1f2b-17e385623abf.png)

## 2-2. DRGアタッチメントの作成
ISV様とエンドユーザ様のVCNに、それぞれのDRGアタッチメントを作成します。

画面入口：ネットワーキング → 仮想クラウド・ネットワーク → 仮想クラウド・ネットワークの詳細 → 「DRGアタッチメントの作成」をクリック

DRGの場所は、デフォルトの「<strong>現在のテナンシ</strong>」を指定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/dbd518d5-72c5-7f15-a3b8-3272354a0db8.png)
エンドユーザ側も上記と同様に作成しますので、画面を省略します。

## 2-3. RPC（リモート・ピアリング接続）の作成
ISVとエンドユーザのテナンシに、それぞれのRPCを作成します。
ISV様用：RPC-ISV (次のように)
エンドユーザ様用：RPC-User-A (画面を省略)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ccd792a3-1344-36f5-c891-0cf1e6d19d94.png)
作成後の状態：
この時点のピア・ステータスは、「<strong>新規(ピアリングなし)</strong>」となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/12b9b8f4-e6c4-b180-1212-47da90baa935.png)

## 2-4. RPC接続の確立
次のように、<strong>エンドユーザのテナンシ</strong>のRPC詳細画面で、OCIDをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/09d12b8e-6d9b-98f3-a138-c1bf924131a3.png)
RPC OCIDの例：`ocid1.remotepeeringconnection.oc1.ap-osaka-1.aaaa<中略>hahq`
DRG OCID、或いは DRGアタッチメントのOCIDと間違いないようにご注意を。

<strong>ISVテナンシ</strong>のRPC詳細画面で、「接続の確立」をクリックし、<strong>相手のリージョン</strong>（ap-osaka-1）とコピーした<strong>RPC OCID</strong>を入力してから、接続の確立を開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/6d8b1f46-2fe6-1e91-7a29-051f2d4a816d.png)

ピア・ステータスは、Pending(保留中)から、<strong>Peered(ピアリング済)</strong>まで、約2~3分がかかります。
ISV側の確認結果：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/6f1fba99-f605-cdca-c687-a7cae9efd911.png)
エンドユーザ側の確認結果：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a4d80e7a-feac-eed5-b58c-e7df1d5b988e.png)



## 2-5. ルート表とセキュリティ・リスト(or NSG)の設定
|テナンシ|タイプ|項目|値|コメント|
|:--|:--|:--|:--|:--|
|ISV|ルート表|ルール|ターゲット: <strong>DRG-ISV</strong><br>宛先: <font color=blue>192.168.0.0/24</font>|ISV側のサブネットに紐づけ|
||SL or NSG|Ingress|ソース側のIP, TCP 22|ISV側のサブネット或いはVMに紐づけ|
|||Egress|オール・ゼロ、或いは`192.168.0.0/24 TCP 22`||
|User-A|ルート表|ルール|ターゲット: <strong>DRG-User-A</strong><br>宛先: <font color=blue>10.0.0.0/24</font>|エンドユーザ側のサブネットに紐づけ|
||SL or NSG|Ingress|`10.0.0.0/24 TCP 22`|エンドユーザ側のサブネット或いはVMに紐づけ|

## 2-6. 相手のVMにSSH接続してみる
コマンド： `ssh <VM_Private_IP>` (事前にプライベート・キーを用意しておく)
```
[opc@linux-isv ~]$ pwd
/home/opc
[opc@linux-isv ~]$ ll .ssh/id_rsa
-r--------. 1 opc opc 1819 Jun 16 06:59 .ssh/id_rsa
[opc@linux-isv ~]$ ssh 192.168.0.124
The authenticity of host '192.168.0.124 (192.168.0.124)' can't be established.
ECDSA key fingerprint is SHA256:<中略>.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.124' (ECDSA) to the list of known hosts.
Activate the web console with: systemctl enable --now cockpit.socket

[opc@linux-user-a ~]$
```
以上です。

----
__関連記事__
[オラクル・クラウドの個人ブログ一覧](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)
[OCIテナンシを跨いでプライベート・インスタンスに接続する (Part 1 - LPGの利用)](https://qiita.com/liu-wei/items/25d42b36689dce036210)
[OCIテナンシを跨いでプライベート・インスタンスに接続する (Part 2 - DRGの利用)](https://qiita.com/liu-wei/items/335439492c3d54558d88)
[OCIテナンシを跨いでプライベート・インスタンスに接続する (Part 4 - 差異比較)](https://qiita.com/liu-wei/items/315e48001b4521c471e3)

----
__オフィシャル・リンク__
[DRGピアリングに関連するIAMポリシー](https://docs.oracle.com/ja-jp/iaas/Content/Network/Tasks/drg-iam.htm#scenario_m__IAM_cross-tenancy)
[Configure cross-region private connectivity between tenancies](https://docs.oracle.com/en/solutions/xregion-pvt-connectivity-oci/index.html) (英語)
[How to connect in OCI between Tenancies and across Regions](https://www.ateam-oracle.com/post/how-to-connect-in-oci-between-tenancies-and-across-regions) (英語)