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

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

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

やり方は、いろいろありますので、４回連載で接続方法を紹介したいと思います。
- Part 1 (<strong>本文</strong>): <strong>LPG</strong>（ローカル・ピアリング・ゲートウェイ）の利用
- [Part 2](https://qiita.com/liu-wei/items/335439492c3d54558d88): <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/7492cdcb-d3b4-cdf0-4b87-8edd4bdc0f0e.png)


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

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

__制限事項__
- 接続元と接続先のVCNの<strong>CIDRブログは、重複しない</strong>こと。
- LPGを利用する場合、接続元と接続先のVCNは、<strong>同一のリージョン内</strong>にあること。
- 一つのVCNに対し、最大<strong>10個</strong>のLPGが作れるというサービス制限がある（ソフトリミット）。

__ステップ__
- [1. 事前準備](#1-事前準備)
  - [1-1. IAMリソースの作成](#1-1-iamリソースの作成)
  - [1-2. ポリシーの作成](#1-2-ポリシーの作成)
  - [1-3. ネットワーキング・リソースの作成](#1-3-ネットワーキングリソースの作成)
- [2. テナンシ間、リージョン内のプライベート接続](#2-テナンシ間リージョン内のプライベート接続)
  - [2-1. LPGの作成](#2-1-lpgの作成)
  - [2-2. LPG間ピアリング接続の確立](#2-2-lpg間ピアリング接続の確立)
  - [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)|

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

__ステートメントの詳細__
ポリシー名：<font color=blue>Policy-LPG-ISV</font>
設定箇所：接続元(Requestor)のテナンシ (<strong>ISV様</strong>より作成)
ステートメント：
```
Define tenancy User-A as <OCID_of_Tenancy_User-A>
Allow group ISV-Admin-Grp to manage local-peering-from in compartment Compt-ISV
Endorse group ISV-Admin-Grp to manage local-peering-to in tenancy User-A
Endorse group ISV-Admin-Grp to associate local-peering-gateways in compartment Compt-ISV with local-peering-gateways in tenancy User-A
```
ポリシー名：<font color=blue>Policy-LPG-User-A</font>
設定箇所：接続元(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 local-peering-to in compartment Compt-User-A
Admit group ISV-Admin-Grp of tenancy ISV to associate local-peering-gateways in tenancy User-A with local-peering-gateways 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|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. LPGの作成
ISV側とエンドユーザ側の<strong>両方のVCN</strong>に、LPGを作成します。

__ISV側__
ネットワーキング → 仮想クラウド・ネットワーク → 仮想クラウド・ネットワークの詳細 → ローカル・ピアリング・ゲートウェイ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/0680b499-dfac-1eb0-f360-c29d7f67bf0c.png)

LPGの名前 (`LPG-ISV`)を入力して作成します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ed1bb41d-b774-75bb-45a1-3ca27a5846dd.png", width="400">

__エンドユーザ側__
画面の入口は、上記と同様です。LPGの名前(`LPG-User-A`)を入力して作成します。作成後、OCIDをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/445d91ec-a33d-b155-5cc0-5dcb12da3735.png)

## 2-2. LPG間ピアリング接続の確立
ISV側で実施します。作成した`LPG-ISV`を指定し、メニューから「ピアリング接続の確立」」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/18a0f211-0723-282d-68be-8077654a3959.png)

コピーした`LPG-User-A`のOCIDを入力し、接続を立てます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/86c3a45a-c0e0-4bff-26eb-04f8df8bddee.png", width="500">

接続を立てると、以下の状態となります。(Cross-Tenancy:<font color=blue>Yes</font>)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/d8fddb2c-5689-daa0-c034-340f0d8e4cb3.png)
※、上記「<strong>Route Table</strong>」の情報欄は空白のままでよいです。

## 2-3. ルート表とセキュリティ・リスト(or NSG)の設定
|テナンシ|タイプ|項目|値|コメント|
|:--|:--|:--|:--|:--|
|ISV|ルート表|ルール|ターゲット: <strong>LPG-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>LPG-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-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
The authenticity of host '192.168.0.74 (192.168.0.74)' 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.74' (ECDSA) to the list of known hosts.
Activate the web console with: systemctl enable --now cockpit.socket

[opc@linux-user-a ~]$
```

__サマリー__
ここまで、LPG間のピアリングで、異なるテナンシのVMに接続できました。接続方法は簡単ですが、エンドユーザの数が増えてくると、LPGのサービス制限(10個)はボトルネックになります。この課題を解決するため、次回は、引き続き別の方法を紹介したいと思います。

以上です。

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

----
__オフィシャル・リンク__
[ローカル・ピアリング・ゲートウェイを使用したローカルVCNピアリング](https://docs.public.oneportal.content.oci.oraclecloud.com/ja-jp/iaas/Content/Network/Tasks/localVCNpeering.htm)
[Inter-TENANCY VCN peering using LPGs](https://www.ateam-oracle.com/post/inter-tenancy-vcn-peering-using-lpgs) (英語)
[Configure cross-region private connectivity between tenancies](https://docs.oracle.com/en/solutions/xregion-pvt-connectivity-oci/index.html) (英語)