[OCI] OCIのネットワークを構成する際に手戻りの少ない手順を考えてみた

# はじめに
OCIのネットワークを構成するコンポーネントは様々なものがありますが、作成する順番を留意することで手戻りなくネットワークを構築することができます。

まずはVCNから作成を始めますが、その後どの順番で各コンポーネントを作成すれば効率が良いか、各コンポーネントの作成時に必要なものから考えてみます

# 1.サブネットを作成する際に必要なもの
* ルート表
* セキュリティリスト
* DHCPオプション

→**サブネットより先にルート表、セキュリティリスト、DHCPオプションを作成する必要がある。**

# 2. ルート表を作成する際に必要なもの
* ターゲットとなるゲートウェイ（インターネット・ゲートウェイ、サービス・ゲートウェイなど）

→**ルート表より先にゲートウェイを作成する必要がある**

# 3. セキュリティ・リストを作成する際に必要なもの
* 特になし

# 4.各種ゲートウェイを作成する際に必要なもの
* 特になし

# 5.DHCPオプションを作成する際に必要なもの
* 特になし

# 6. ということで
個人的にオススメな順番は以下の通りです。


1. VCN
2. 各種ゲートウェイ（インターネット・ゲートウェイ、サービス・ゲートウェイなど）
3. ルート表
4. セキュリティ・リスト
5. DHCPオプション（カスタム・リゾルバを使用する場合、それ以外はVCN作成時に作成されるものを利用）
6. サブネット
7. ネットワーク・セキュリティ・グループ（必要に応じて）

# 7. ネットワーク（VCN）構成手順例
![スクリーンショット 2020-10-28 13.13.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a3495dff-1d3a-cd53-5df0-288a770c5c75.png)
上記のような環境を例にとって、構築手順を考えてみます。
文章にすると以下のような感じです。

* VCN（仮想クラウド・ネットワーク）は1つ（VCN1:10.0.0.0/16)
* VCN内にパブリック・サブネット（Subnet1:10.0.1.0/24）、プライベート・サブネット（Subnet2:10.0.2.0/24）が1つづつある
* パブリック・サブネット（Subnet1）は、インターネット・ゲートウェイを経由してインターネットとの相互接続が可能
* プライベート・サブネット（Subnet2)、NATゲートウェイを経由してインターネットへのアクセスが可能
* パブリック・サブネット（Subnet1）、プライベート・サブネット（Subnet2）ともに、サービス・ゲートウェイを経由してリージョン内のオブジェクト・ストレージにアクセス可能
* パブリック・サブネット（Subnet1）は、すべての場所からSSHアクセス（TCP 22）が可能
* パブリック・サブネット（Subnet1）は、すべての場所にすべてのプロトコルでアクセスが可能
* プライベート・サブネット（Subnet2）は、パブリック・サブネット（Subnet1）からのみSSHアクセス（TCP 22）が可能
* プライベート・サブネット（Subnet2）は、すべての場所にすべてのプロトコルでアクセスが可能

前提として、すべてのコンポーネントを「Compartment1」に作成するとします。

**1. VCNの作成**

*「コンソールメニュー」　→　「ネットワーキング」　→ 「仮想クラウド・ネットワーク」*

・スコープのコンパートメント：「Compartment1」を選択
・**「VCNの作成」ボタンをクリック**
　・名前：**VCN1**
　・コンパートメントに作成：「Compartment1」を選択
　・CIDRブロック：**10.0.0.0/16**
　・DNS解決：チェックをオン（デフォルト）
　・DNSラベル：デフォルトのまま
　・**「VCNの作成」をクリック**

**2.インターネット・ゲートウェイの作成**

*「コンソールメニュー」　→　「ネットワーキング」　→ 「仮想クラウド・ネットワーク」　→　「仮想クラウドネットワークの詳細」　→　「インターネット・ゲートウェイ」*

・**「インターネット・ゲートウェイの作成」ボタンをクリック**
　・名前：**InternetGateway1**
　・コンパートメントに作成：「Compartment1」を選択
　・**「インターネット・ゲートウェイの作成」をクリック**

**3.サービス・ゲートウェイの作成**

*「コンソールメニュー」　→　「ネットワーキング」　→ 「仮想クラウド・ネットワーク」　→　「仮想クラウドネットワークの詳細」　→　「サービス・ゲートウェイ」*

・**「サービス・ゲートウェイの作成」ボタンをクリック**
　・名前：**ServiceGateway1**
　・コンパートメントに作成：「Compartment1」を選択
　・サービス：**「OCI XXX Object Storage」を選択**
　・**「サービス・ゲートウェイの作成」をクリック**

**4.NATゲートウェイの作成**

*「コンソールメニュー」　→　「ネットワーキング」　→ 「仮想クラウド・ネットワーク」　→　「仮想クラウドネットワークの詳細」　→　「NATゲートウェイ」*

・**「NATゲートウェイの作成」ボタンをクリック**
　・名前：**NATGateway1**
　・コンパートメントに作成：「Compartment1」を選択
　・**「エフェメラル・パブリックIPアドレス」を選択**
　・**「NATゲートウェイの作成」をクリック**

**5.パブリック・サブネット（Subnet 1）用のルート表の作成**

*「コンソールメニュー」　→　「ネットワーキング」　→ 「仮想クラウド・ネットワーク」　→　「仮想クラウドネットワークの詳細」　→　「ルート表」*

・**「ルート表の作成」ボタンをクリック**
　・名前：**Route Table for Subnet1**
　・コンパートメントに作成：「Compartment1」を選択
　**「＋追加のルート・ルール」をクリック**
　　・ターゲット・タイプ：**「インターネット・ゲートウェイ」を選択**
　　・宛先CIDRブロック：**0.0.0.0/0**
　　・コンパートメント：Compartment1
　　・ターゲット・インターネット・ゲートウェイ：**「InternetGateway1」を選択**
　**「＋追加のルート・ルール」をクリック**
　　・ターゲット・タイプ：**「サービス・ゲートウェイ」を選択**
　　・宛先サービス：**「OCI xxx Object Storage」を選択**
　　・コンパートメント：Compartment1
　　・ターゲット・サービス・ゲートウェイ：**「ServiceGateway1」を選択**
　・**「ルート表の作成」ボタンをクリック**

**6.プライベート・サブネット（Subnet 2）用のルート表の作成**

*「コンソールメニュー」　→　「ネットワーキング」　→ 「仮想クラウド・ネットワーク」　→　「仮想クラウドネットワークの詳細」　→　「ルート表」*

・**「ルート表の作成」ボタンをクリック**
　・名前：**Route Table for Subnet2**
　・コンパートメントに作成：「Compartment1」を選択
　**「＋追加のルート・ルール」をクリック**
　　・ターゲット・タイプ：**「NATゲートウェイ」を選択**
　　・宛先CIDRブロック：**0.0.0.0/0**
　　・コンパートメント：Compartment1
　　・ターゲット・インターネット・ゲートウェイ：**「NATGateway1」を選択**
　**「＋追加のルート・ルール」をクリック**
　　・ターゲット・タイプ：**「サービス・ゲートウェイ」を選択**
　　・宛先サービス：**「OCI xxx Object Storage」を選択**
　　・コンパートメント：Compartment1
　　・ターゲット・サービス・ゲートウェイ：**「ServiceGateway1」を選択**
　・**「ルート表の作成」ボタンをクリック**

**7.パブリック・サブネット（Subnet1）用のセキュリティ・リストの作成**

*「コンソールメニュー」　→　「ネットワーキング」　→ 「仮想クラウド・ネットワーク」　→　「仮想クラウドネットワークの詳細」　→　「セキュリティ・リスト」*

・**「セキュリティ・リストの作成」をクリック**
　・ 名前：**Security List for Subnet1**
　・コンパートメントに作成：「Compartment1」を選択
　　・**「+追加のイングレス・ルール」をクリック**
　　　・ステートレス：チェックをオフ（デフォルト）
　　　・ソース・タイプ：**「CIDR」を選択**
　　　・ソースCIDR：**0.0.0.0/0**
　　　・IPプロトコル：**「TCP」を選択**
　　　・ソース・ポート範囲：入力しない
　　　・宛先ポート範囲：**22**
　　・**「+追加のエグレス・ルール」をクリック**
　　　・ステートレス：チェックをオフ（デフォルト）
　　　・宛先タイプ：**「CIDR」を選択**
　　　・宛先CIDR：**0.0.0.0/0**
　　　・IPプロトコル：**「全てのプロトコル」を選択**
　・**「セキュリティ・リストの作成」をクリック**

**8.プライベート・サブネット（Subnet2）用のセキュリティ・リストの作成**

*「コンソールメニュー」　→　「ネットワーキング」　→ 「仮想クラウド・ネットワーク」　→　「仮想クラウドネットワークの詳細」　→　「セキュリティ・リスト」*

・**「セキュリティ・リストの作成」をクリック**
　・ 名前：**Security List for Subnet2**
　・コンパートメントに作成：「Compartment1」を選択
　　・**「+追加のイングレス・ルール」をクリック**
　　　・ステートレス：チェックをオフ（デフォルト）
　　　・ソース・タイプ：**「CIDR」を選択**
　　　・ソースCIDR：**10.0.1.0/24**
　　　・IPプロトコル：**「TCP」を選択**
　　　・ソース・ポート範囲：入力しない
　　　・宛先ポート範囲：**22**
　　・**「+追加のエグレス・ルール」**
　　　・ステートレス：チェックをオフ（デフォルト）
　　　・宛先タイプ：**「CIDR」を選択**
　　　・宛先CIDR：**0.0.0.0/0**
　　　・IPプロトコル：**「全てのプロトコル」を選択**
　・**「セキュリティ・リストの作成」をクリック**

**9.パブリック・サブネット（Subnet1）の作成**

*「コンソールメニュー」　→　「ネットワーキング」　→ 「仮想クラウド・ネットワーク」　→　「仮想クラウドネットワークの詳細」　→　「サブネット」*

・**「サブネットの作成」をクリック**
　・名前：**Subnet1**
　・コンパートメントに作成：「Compartment1」を選択
　・サブネット・タイプ：「リージョナル（推奨）」を選択（デフォルト）
　・CIDRブロック：**10.0.1.0/24**
　・ルート表：**「Route Table for Subnet1」を選択**
　・サブネット・アクセス：**「パブリック・サブネット」を選択**
　・DNS解決 このSUBNETでDNSホスト名を使用：チェックをオン（デフォルト）
　・DNSラベル：デフォルトのまま（入力しない）
　・DHCPオプション：**「Default DHCP Option for VCN1」を選択**
　・セキュリティ・リスト：**「Security List for Subnet1」を選択**
　・**「サブネットの作成」をクリック**

**10.プライベート・サブネット（Subnet2）の作成**

*「コンソールメニュー」　→　「ネットワーキング」　→ 「仮想クラウド・ネットワーク」　→　「仮想クラウドネットワークの詳細」　→　「サブネット」*

・**「サブネットの作成」をクリック**
　・名前：**Subnet2**
　・コンパートメントに作成：「Compartment1」を選択
　・サブネット・タイプ：「リージョナル（推奨）」を選択（デフォルト）
　・CIDRブロック：**10.0.2.0/24**
　・ルート表：**「Route Table for Subnet2」を選択**
　・サブネット・アクセス：**「プライベート・サブネット」を選択**
　・DNS解決 このSUBNETでDNSホスト名を使用：チェックをオン（デフォルト）
　・DNSラベル：デフォルトのまま（入力しない）
　・DHCPオプション：**「Default DHCP Option for VCN1」を選択**
　・セキュリティ・リスト：**「Security List for Subnet2」を選択**
　・**「サブネットの作成」をクリック**

以上で、上記の図のようなネットワーク構成が完成しました。


**おまけ.ネットワークセキュリティグループの作成**
Webサーバに適用することを想定した、すべての場所からTCP 80、TCP443へのアクセスを許可するネットワーク・アクセス・グループを作成します。

*「コンソールメニュー」　→　「ネットワーキング」　→ 「仮想クラウド・ネットワーク」　→　「仮想クラウドネットワークの詳細」　→　「ネットワーク・セキュリティ・グループ」*

・**「ネットワーク・セキュリティ・グループの作成」をクリック**
　・名前：**Network Security Group for APr**
　・コンパートメントに作成：「Compartment1」を選択
　・**「次」をクリック**
　・セキュリティ・ルールの追加
　　ルール
　　　ステートレス：チェックをオフ（デフォルト）
　　　方向：「イングレス」を選択（デフォルト）
　　　ソースタイプ：**「CIDR」を選択**
　　　ソース：**0.0.0.0/0**
　　　IPプロトコル：**「TCP」を選択**
　　　ソース・ポート範囲：デフォルトのまま（入力しない）
　　　宛先ポート範囲：**80**
　　　説明：**Security Rule for HTTP(TCP 80)**
　　**「+別のルール」をクリック**
　　ルール
　　　ステートレス：チェックをオフ（デフォルト）
　　　方向：「イングレス」を選択（デフォルト）
　　　ソースタイプ：**「CIDR」を選択**
　　　ソース：**0.0.0.0/0**
　　　IPプロトコル：**「TCP」を選択**
　　　ソース・ポート範囲：デフォルトのまま（入力しない）
　　　宛先ポート範囲：**443**
　　　説明：**Security Rule for HTTPS(TCP 443)**
　・**「作成」をクリック**