OCIテナンシを跨いでプライベート・インスタンスに接続する (Part 2 - DRGの利用)

本ブログは、[オラクル・クラウドの個人シリーズ・ブログ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。
# 初めに
ISV様(SaaS提供者)と各エンドユーザ様のOCI環境は、コンパートメント単位ではなく、テナンシで分けるケースがよくあります。この場合、ISV様の管理者から、インターネットを経由せず、エンドユーザ様のプライベート・インスタンスにアクセスしたいのは、一般的な要件です。

やり方は、いろいろありますので、４回連載で接続方法を紹介したいと思います。
- [Part 1](https://qiita.com/liu-wei/items/25d42b36689dce036210): <strong>LPG</strong>（ローカル・ピアリング・ゲートウェイ）の利用
- Part 2 (<strong>本文</strong>): <strong>DRG</strong>（動的ルーティング・ゲートウェイ）<strong>アタッチメント</strong>の利用
- [Part 3](https://qiita.com/liu-wei/items/71c0b61d23449bc810f7): 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/72f206f2-c0c1-ff8e-d9b9-869ff13e3b04.png)

__検証環境__
Computeインスタンス (Linux 8 VM)

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

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

※、テナンシ間、リージョン間で接続したい場合、DRGリモート・ピアリングの方法で実現できます。

__接続方法__
- [1. 事前準備](#1-事前準備)
  - [1-1. IAMリソースの作成](#1-1-iamリソースの作成)
  - [1-2. ポリシーの作成](#1-2-ポリシーの作成)
  - [1-3. ネットワーキング・リソースの作成](#1-3-ネットワーキングリソースの作成)
- [2. テナンシ間、リージョン内のプライベート接続](#2-テナンシ間リージョン内のプライベート接続)
  - [2-1. DRGの作成 (ISV側のみ)](#2-1-drgの作成-isv側のみ)
  - [2-2. DRGアタッチメントの作成](#2-2-drgアタッチメントの作成)
  - [2-3. ルート表とセキュリティ・リスト(or NSG)の設定](#2-3-ルート表とセキュリティリストor-nsgの設定)
  - [2-4. 相手のVMにSSH接続してみる](#2-4-相手の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)|
|User-A|ユーザー|User-A-Admin|エンドユーザ様の管理者|
|User-A|グループ|User-A-Admin-Grp|エンドユーザ様の管理者を入れる|

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

__ポリシーの詳細__
ポリシー名：Policy-DRG-ISV
設定箇所：接続元(Requestor)のテナンシ (<strong>ISV様</strong>より作成)
ステートメント：
```
define tenancy User-A as <OCID_of_Tenancy_User-A>
define group User-A-Admin-Grp as <OCID_of_User-A-Admin-Grp>
endorse group ISV-Admin-Grp to manage drg-attachment in tenancy User-A
admit group User-A-Admin-Grp of tenancy User-A to manage drg in tenancy 
```

ポリシー名：Policy-DRG-User-A
設定箇所：接続先(Acceptor)のテナンシ (<strong>エンドユーザ様</strong>より作成)
ステートメント：
```
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 drg-attachment in tenancy
endorse group User-A-Admin-Grp to manage drg in tenancy ISV
```

## 1-3. ネットワーキング・リソースの作成
|テナンシ|リージョン|リソース・タイプ|名前|コメント|
|:--|:--|:--|:--|:--|
|ISV|Tokyo|VCN|VCN-ISV|10.0.0.0/16|
|||Private Subnet|Private Subnet ISV|10.0.0.0/24|
|User-A|Tokyo<br>(同リージョン)|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側のみ)
ISV様のテナンシに、１個のDRGを作成します。エンドユーザ側には<strong>作成不要</strong>です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/f24b073f-cecb-da78-1f2b-17e385623abf.png)

作成後、DRGのOCIDをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/64f98aad-7c71-37b7-c7e5-6e74a8a78a39.png)

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

__ISV側__
ネットワーキング → 仮想クラウド・ネットワーク → 仮想クラウド・ネットワークの詳細 → 「DRGアタッチメントの作成」をクリック

デフォルトの「現在のテナンシ」を指定します。一覧から作成した`DRG-ISV`を選択し、アタッチメントを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/174d5fe8-d308-a9a9-b7ac-8a85a8d3cbc4.png)
作成後の状態：
Cross-Tenancy: <font color=blue>No</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/57d78a16-6d50-2521-85e1-d1ca033bfb5e.png)

__エンドユーザ側__
次のようにDRGアタッチメントを作成します（画面の入口は上記と同じ）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/e3c5005b-656e-c13c-a870-d6ee0d8dd67b.png)
「<strong>別のテナンシ</strong>」を指定します。コピーした`DRG-ISV`のOCIDを入力し、アタッチメントを作成します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/f53cef6d-cc87-42db-0b32-a254c88f2206.png", width="500">
作成後の状態：
Cross-Tenancy: <font color=blue>Yes</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8f51f133-eaee-ee3a-eb4b-4fdf60e1ce2d.png)

## 2-3. ルート表とセキュリティ・リスト(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-ISV</strong><br>宛先: <font color=blue>10.0.0.0/24</font>|エンドユーザ側のサブネットに紐づけ|
||SL or NSG|Ingress|`10.0.0.0/24 TCP 22`|エンドユーザ側のサブネット或いはVMに紐づけ|

## 2-4. 相手のVMにSSH接続してみる
コマンド： `ssh <VM_Private_IP>` (事前にプライベート・キーを用意しておく)
```
[opc@linux-isv ~]$ pwd
/home/opc
[opc@linux-isv ~]$ ll .ssh/id_rsa
-r--------. 1 opc opc 1819 May 18 07:25 .ssh/id_rsa
[opc@linux-isv ~]$ ssh 192.168.0.74
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Thu May 18 12:54:13 2023 from 10.0.0.230
[opc@linux-user-a ~]$
```

__サマリー__
ここまで、DRGアタッチメントで、異なるテナンシのVMに接続できましたが、<strong>同一リージョン内</strong>の接続という制限事項があります。この問題を解決するため、次回は、DRGリモート・ピアリングの方法を紹介したいと思います。

以上です。

----
__関連記事__
[オラクル・クラウドの個人シリーズ・ブログ](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)
[OCIテナンシを跨いでプライベート・インスタンスに接続する (Part 1 - LPGの利用)](https://qiita.com/liu-wei/items/25d42b36689dce036210)
[OCIテナンシを跨いでプライベート・インスタンスに接続する (Part 3 - リージョン間)](https://qiita.com/liu-wei/items/71c0b61d23449bc810f7)
[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)
[Cross-Tenancy VCN peering using DRG Attachment](https://www.ateam-oracle.com/post/cross-tenancy-vcn-peering-using-drg-attachment) (英語)
[Configure cross-region private connectivity between tenancies](https://docs.oracle.com/en/solutions/xregion-pvt-connectivity-oci/index.html) (英語)