Oracle Cloud：契約が異なるテナンシのVCNをCross-Tenancy Peeringしてみてみた

異なるテナンシ(異なる契約)どうしをLocal VCN Peeringすることができ、これを Cross-tenancy Peeringと言います。

今回は、ABC社とXYZ社のVCNを Cross-tenancy Peeringし、On-PremisesからABC社へVPN接続を行い、Transit RoutingでOn-PremisesからXYZ社へ直接疎通できるように構成設定します。

#■ 構成図
お互いのテナンシへ権限を付与してPeeringを確立できるように、必要なIAMポリシーを実装するには、それぞれの2箇所のテナンシのVCN管理者の内、片側の管理者をRequestor、もう一方をAcceptorとして指定します。
Requestorは、お互い2つのLPG(Local Peering Gateway)の接続リクエスト許可を行います。
Acceptorは Acceptorのコンパートメント内のLPGに接続するリクエスタ権限を付与する特定のIAMポリシーを作成します。 
このポリシーがないと、Requestorの接続リクエストは失敗します。 
![構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/19a04bca-aed5-fc77-60a3-85554922a71b.png)



#■ 手順概要

	1. LPG作成:
		各VCN管理者は、それぞれのVCNのLPGを作成します。
	2. 情報共有: 
		各テナンシーの管理者はお互いの必要情報を共有します。 
	3. 接続必須IAMポリシー設定:
		各管理者は、IAMポリシーを設定して、接続を確立できるようにします。 
	4. 接続確立:
		リクエスタの管理者が、2つのLPGを接続します。
	5. ルート表設定:
		各管理者は、VCNルート表を設定して、VCN間接続トラフィックを必要に応じて有効にします。
	6. セキュリティ・リスト設定:
		各管理者は、VCNセキュリティ・リストを設定して、VCN間接続トラフィックを必要に応じて有効にします。

##● 注意点
	・IAMポリシーは、rootコンパートメントへ作成
	・LPGのPeeringは、リクエスタ側テナントのIAMポリシーGroup権限があるユーザーで実施
・
#■ 環境作成(事前準備)
概要図にある以下内容で各テナンシーを設定
今回Oracle Identity Cloud Service（IDCS）のOCIログイン・ユーザーでCross-Tenancy接続許可をするので、接続許可のポリシーを付与したIAMのGroupをIDCSのユーザーへマッピングを行います。

##● RequestorテナンシーUser/Group設定

	・テナンシー名：ABC
	・Tenancy OCID：ocid1.tenancy.oc1..aaaaaaarequestorComp
	・Compartment名:RequestorComp
	・VCN名:VCN-1
	・LPG名:LPG-1
	・OCIのGourp名:RequestorGrp 
	・OCIのGourp OCID : ocid1.group.oc1..aaaarequestorgrp
	・IDCSのGroup:OCI-RequestorGrp
	・IDCSのLPG接続許可管理者User: oci@mail.com


##● Acceptorテナンシー

	・テナンシー名：XYZ
	・Tenancy OCID：ocid1.tenancy.oc1..aaaaaacceptorcomp
	・Compartment名:AcceptorComp
	・VCN名:VCN-2
	・LPG名:LPG-2 
	・LPG OCID:ocid1.localpeeringgateway.oc1.iad.aaaaaaaalpg2

#■ Requestorテナンシー:LPG接続許可管理者User設定
LPG接続許可するためのRequestorGrpを作成し、VCN管理ユーザーへ権限付与します
今回IDCSユーザーで設定するので、IDCSユーザーで実行できるように権限設定します

##● 管理ユーザーでログイン
管理権限あるIDCSユーザーでログイン


##● RequestorGrpグループ作成
1) OCI Webコンソール画面
Identitiy > Groups をクリック
![01_Group01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/2e95110c-8578-7c57-2fd2-afec85ce6f0b.png)


2) Group画面
[Create Group]をクリック
![01_Group02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/59bcbce1-8b37-367e-1721-c5d8061d47cc.png)


3) Create Group画面
NAMEを設定して[Submit]をクリック

	NAME: RequestorGrp

![01_Group03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/3bda51f9-0865-ed34-f946-6c8d2d9ed2ed.png)


４）Group作成確認
Groupが作成されたことを確認
![01_Group04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/61ab4fe1-8e2f-3c61-035f-b679c95ed5d5.png)
![01_Group05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/25d8c9d0-7202-a7fb-c92b-3f0e367f0fc4.png)


##● IDCSユーザー用 OCI-RequestorGrpグループ作成
Oracle Identity Cloud Service(IDCS)フェデレーションからユーザー設定


1) OCI Webコンソール画面
Identitiy > Federation をクリック
![00_Idp-Group05Idp-Groupadd01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/6a590286-f44c-7a1c-9cf2-2fb4efead694.png)


2) Federation画面
Oracle Identity Cloud Serviceアイデンティティ・フェデレーションを表示
Nameにある「OracleIdentityCloudService」をクリック
![00_Idp-Group05Idp-Groupadd02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/37ff1d36-9ef2-e1af-69b7-5d48fcab7c0b.png)



3) OracleIdentityCloudService画面
左ペインにある[Groups]をクリックし、[Create IDCS Group]をクリック
![00_Idp-Group05Idp-Groupadd03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/294aa328-9775-10e7-c13d-41512c5e4921.png)



4) Create IDCS Group画面
NAMEを設定して[Create]をクリック

	NAME: OCI-RequestorGrp

![00_Idp-Group05Idp-Groupadd04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/fab9e05d-b6a5-51b2-0cb2-aaa12b5d8b00.png)


5) OCI-RequestorGrpグループ作成確認
![00_Idp-Group05Idp-Groupadd05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/b3eb8ccb-8d99-b636-d5a5-dec8bdbc3a6d.png)


##● IDCSユーザーへOCI-RequestorGrpグループ権限付与
1) OracleIdentityCloudService画面
左ペインにある[Groups]をクリックし、権限付与するユーザーをクリック
![00_Idp-Group20_IdpUseraddGroup00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/8c73e504-16b5-b4a8-9503-f4ee2f1a2563.png)


2) IDCSユーザー画面
[Add to IDCS Group]をクリック
![00_Idp-Group20_IdpUseraddGroup01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/ca9ecc3e-8858-56e9-6da8-c5c823f200b6.png)



3) Add User to IDCS Group画面
GROUPSから作成した「OCI-RequestorGrp」を選択し、[Add]をクリック
![00_Idp-Group20_IdpUseraddGroup02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/f3394a49-0602-f35e-e542-4bd48c2a7ecd.png)


４）Group付与確認
![00_Idp-Group20_IdpUseraddGroup03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/02752014-1e80-abc0-dba5-a5dbb920f4a1.png)




##● Group Mapping
作成したOCIグループ(RequestorGrp)とIDCSグループ(OCI-RequestorGrp)をマッピング

1) OracleIdentityCloudService画面
Identitiy > Federation から「OracleIdentityCloudService」をクリック
左ペインから、[Group Mappings]をクリックし、[Add Mappings]をクリック
![00_Idp-Group10_IdpGoupMapping01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/965b2d85-338d-a572-2226-42b7a095af83.png)


2) Add Mappings画面
作成したIDCSグループとOCIグループをマッピング

	・IDENTITY PROVIDER GROUP: OCI-RequestorGrp
	・OCI GROUP: RequestorGrp

![00_Idp-Group10_IdpGoupMapping02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/6a080423-d910-f580-ae41-611360b607aa.png)


3) Mappings確認
![00_Idp-Group10_IdpGoupMapping03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/e9c54ba3-f848-a520-5d94-7be2ab2a1c4b.png)














#■ 1. LPG作成:
各VCN管理者は、それぞれのVCNにLPGを作成




#■ 2. 情報共有: 
各テナンシーの管理者はお互いの以下必要情報を共有します。 

##● Requestorテナンシ

	・テナンシのOCID
	・RequestorGrpのOCID
	・VCN CIDR とSubnet

##● Acceptorテナンシ

	・テナンシのOCID
	・VCN CIDR と Subnet


#■ 3. 接続必須IAMポリシー設定:
各管理者は、以下IAMポリシーを設定して、接続を確立できるようにします。

##● リクエスタ側: IAMポリシー設定
1) OCIコンソール
Identity > Policiesをクリック
![02_Policy01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/7ed3692d-491f-49b2-6e9c-f77a3c5a58cd.png)


2) Policies画面
「root」COMPARTMENTを選択し、[Create Policy]ボタンをクリック
![02_Policy02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/3106c910-650f-584f-530c-fecc0aebe2eb.png)


3) Create Policy画面
以下情報を設定し[Create]ボタンをクリック

	・NAME：ポリシー名を設定、ここではPolicy-R
	・DISCRIPTION: 任意の説明を記入
	・COMPARTMENT: rootコンパートメントを選択
	・Poilicy Builder: 以下４行入力
		Define tenancy Acceptor as ocid1.tenancy.oc1..aaaaaacceptorcomp
		Allow group RequestorGrp to manage local-peering-from in compartment RequestorComp
		Endorse group RequestorGrp to manage local-peering-to in tenancy Acceptor
		Endorse group RequestorGrp to associate local-peering-gateways in compartment RequestorComp with local-peering-gateways in tenancy Acceptor

![02_Policy03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/00f7e92c-6da1-5e19-48b2-9818b26202ce.png)



3) 作成したポリシー画面
ポリシーが作成されたことを確認
![02_Policy04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/7d644b39-0c6a-2633-2f2d-ab2dd001dfd7.png)



##● アクセプタ側: IAMポリシー設定
1) Policies画面
「root」COMPARTMENTを選択し、[Create Policy]ボタンをクリック
![02_Policy01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/a5884e98-42c2-d247-3b2e-9c62f2a3103c.png)



2) ポリシー作成
Identityにある「Policies」画面にて、「root」COMPARTMENTを選択し、
[Create Policy]ボタンをクリックして以下情報を設定し[Create]ボタンをクリック

	・NAME：ポリシー名を設定、ここではPolicy-A
	・DISCRIPTION: 任意の説明を記入
	・COMPARTMENT: rootコンパートメントを選択
	・Poilicy Builder: 以下４行入力
		Define tenancy Requestor as ocid1.tenancy.oc1..aaaaaaarequestorComp
		Define group RequestorGrp as ocid1.group.oc1..aaaarequestorgrp
		Admit group RequestorGrp of tenancy Requestor to manage local-peering-to in compartment AcceptorComp
		Admit group RequestorGrp of tenancy Requestor to associate local-peering-gateways in tenancy Requestor with local-peering-gateways in compartment AcceptorComp

![02_Policy02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/fe02e815-cf0e-4bf0-84e0-536f910b0444.png)


2) ポリシー作成確認
ポリシーが作成されたことを確認
![02_Policy03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/db0cbcf1-fb2e-e3f3-e480-403a4b99155d.png)


#■ 4. LPG接続確立
リクエスタは、リクエスタのLPG(LPG-1)画面でアクセプタLPG(LPG-2)のOCIDを使用してPeering

##● アクセプタ側: LPG(LPG-2)
作成したLPGのOCIDをリクエスタ側へ通知します


1) LPG(LPG-2)画面
LPGの右端にあるドットをクリックし、[Copy OCID]をクリック
このIDをリクエスタ側へ通知します


##● リクエスタ側: LPG(LPG-1)

1) LPG(LPG-1)画面
LPGの右端にあるドットをクリックし、[Establish Connection]ボタンをクリック


2) Establish Peering Connection画面
以下項目を設定し、[Establish Peering Connection]をクリック

	・Specify THE LOCAL PEERING GATEWAY: [ENTER LOCAL PEERING GATWAY OCID]を選択
	・PEERING GATEWAY OCID: アクセプタ側: LPG(LPG-2)のOCIDを設定

3) 接続確認
以下ステータスを確認

	・Peering Status: 「Peerd」, 
	・Peer Advertised CIDR: アクセプタ側: LPG(LPG-2)のVCN CIDR(172.16.0.0/16)
	・Cross-Tenancy: Yes




#■ 5. ルート表設定
ここでは、VCN-1をHubとして、On-PremisesからVCN-2へアクセスできるように以下図面のように、①〜④個別に作成したRoute Tableを設定してVCN Transit Routingを行います。
![構成Transit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/bde4ad34-132d-fd4b-7af9-1ba7e392237b.png)

VCN Transit Routingの設定は、次を参考に設定できます。
　　- [Oracle Cloud：VCN Transit Routing で Hub and Spoke構成をしてみてみた](https://qiita.com/shirok/items/fe5cfb09af219703be0e)
　　- [Transit Routing + IPSec VPN / FastConnectで Object Storage, Autonomous Databaseへ接続してみてみた](https://qiita.com/shirok/items/ec0e5a09346422346fd4)




#■ 6. セキュリティ・リスト設定
各管理者は、VCNセキュリティ・リストを更新して、VCN間接続トラフィックを必要に応じて有効にします。
今回は、3箇所のSIDRすべてのプロトコル(All Protocols)を許可していますが、セキュリティ要件に合わせて設定してください。

##● VCN-1

###・Ingress Rule 1

	- SOURCE CIDR:10.0.0.0/16
	- IP PROTOCOL:All Protocols

###・Ingress Rule 2

	- SOURCE CIDR:172.16.0.0/16
	- IP PROTOCOL:All Protocols

###・Ingress Rule 3

	- SOURCE CIDR:192.168.0.0/16
	- IP PROTOCOL:All Protocols

##● VCN-2

###・Ingress Rule 1

	- SOURCE CIDR:10.0.0.0/16
	- IP PROTOCOL:All Protocols

###・Ingress Rule 2

	- SOURCE CIDR:172.16.0.0/16
	- IP PROTOCOL:All Protocols
	
###・Ingress Rule 3

	- SOURCE CIDR:192.168.0.0/16
	- IP PROTOCOL:All Protocols04
	
![SL01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/e52f6cc4-8d88-5396-c6c6-d64769ef8200.png)



#■ 疎通テスト

##● On-premises -> VCN-2へ疎通確認
・On-premises -> spoke-inst01 へping確認

```shell-session
[opc@OnP-Inst01 ~]$ ping 172.16.0.2 -c 3
	PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
	64 bytes from 172.16.0.2: icmp_seq=1 ttl=63 time=53.0 ms
	64 bytes from 172.16.0.2: icmp_seq=2 ttl=63 time=53.0 ms
	64 bytes from 172.16.0.2: icmp_seq=3 ttl=63 time=53.0 ms

	--- 172.16.0.2 ping statistics ---
	3 packets transmitted, 3 received, 0% packet loss, time 2002ms
	rtt min/avg/max/mdev = 53.009/53.024/53.035/0.011 ms
```

・On-premises -> spoke-inst01 へssh確認

```shell-session
[opc@OnP-Inst01 ~]$ ssh -i id_rsa opc@172.16.0.2 hostname
	spoke-inst01
```

##● VCN-2 -> On-premisesへ疎通確認
・spoke-inst01 -> On-premises へping確認

```shell-session
[opc@spoke-inst01 ~]$ ping 192.168.0.2 -c 3
	PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
	64 bytes from 192.168.0.2: icmp_seq=1 ttl=63 time=46.6 ms
	64 bytes from 192.168.0.2: icmp_seq=2 ttl=63 time=46.6 ms
	64 bytes from 192.168.0.2: icmp_seq=3 ttl=63 time=46.5 ms

	--- 192.168.0.2 ping statistics ---
	3 packets transmitted, 3 received, 0% packet loss, time 2003ms
	rtt min/avg/max/mdev = 46.575/46.616/46.669/0.039 ms
```

・spoke-inst01 -> On-premises へssh確認

```shell-session
[opc@spoke-inst01 ~]$ ssh -i id_rsa opc@192.168.0.2 hostname
	OnP-Inst01
```

#■ 参考
　　　・[ローカルVCNピアリング(リージョン内)](https://docs.oracle.com/cd/E97706_01/Content/Network/Tasks/localVCNpeering.htm)
　　　・[Transit Routing: Private Access to Oracle Services](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/transitroutingoracleservices.htm#options)
 　　　・[Supported Cloud Services in Oracle Services Network](https://cloud.oracle.com/networking/service-gateway/supported-services)
 　　　・[Public IP Address Ranges](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/addressranges.htm#osn-ranges)
 　　　・[To manage the access control list of an Autonomous Database](https://docs.cloud.oracle.com/iaas/Content/Database/Tasks/adbmanaging.htm)
 　　　・[Oracle Services Network(OSN)](https://cloud.oracle.com/networking/service-gateway/supported-services)
　　　・[伝送ルーティング : Oracle Servicesへのプライベート・アクセス](https://docs.oracle.com/cd/E97706_01/Content/Network/Tasks/transitroutingoracleservices.htm)
　　　・[伝送ルーティング : 同じリージョン内の複数のVCNへのアクセス](https://docs.oracle.com/cd/E97706_01/Content/Network/Tasks/transitrouting.htm)