検証によく使う Oracle Cloud Infrastructure(OCI) の 環境構成(VCN, Seculity List, 各種Gateway, Route Table, Subnet, Compute)まとめ

ワイが検証によく使う Oracle Cloud Infrastructure(OCI) の環境構成を整理してみますやで。
彡(ﾟ)(ﾟ)

# 1. 構成図

構成図です。まずはお絵かきから、お絵かき重要彡(ﾟ)(ﾟ)
![01_NetworkingDesign.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/c087e8b5-1597-c9c6-4dbb-3620a48deaf7.jpeg)

VCN Wizard で出てくる下記図を精緻化したものですやね。
![b_VCN_Wizard.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/e4cfba91-60ff-1cf6-872e-a8afb8b0f18f.jpeg)

# 2. コンパートメント

リソース作成の初手はコンパートメントから。名前は何でもエエです。原則としてrootコンパートメントに各種リソースは作らないこと。
![c_compartment.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/1f2c970e-aae9-1ba4-65f6-b9495de26b0a.jpeg)

# 3. VCN

VCN は CIDR(IPアドレス範囲) を決めるだけ。10.0.0.0/16 で広めに作成。名前は何でもヨシ！
![d_VCN.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/e747435b-0b39-d938-238c-5d3bc7efc84d.jpeg)

# 4. Security List

Security List は OCI VCN の 仮想ファイアウォール に相当するものです。Public用とPrivate用をそれぞれ作成

## 4-1. Public Subnet用 の Security List
基本は Ingress で絞る前提で Egress は全開、Ingress は ssh(22) だけを開けます。
![e1_pub_seclst.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/de322fa3-15ba-933a-3873-c2aa1ccc0ed5.jpeg)
![e2_pub_ingress.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/acf0dce6-2d8d-ba6c-237e-2d45e0355330.jpeg)
![e3_pub_egress.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/2c918be2-2826-603a-d152-baf263a04530.jpeg)

## 4-2. Private Subnet用 の Security List
Public用とほぼ同じですが、Ingress の ssh(22) は Source CIDR を Public Subnet の CIDR(10.0.0.0/24) に限定します。
![f1_prv_seclst.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/2cf7aa12-3f11-7da8-98e6-a748d8223626.jpeg)
![f2_prv_ingress.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/2ad4b7f4-3d6d-e24e-996f-f0c7e1ee7c8d.jpeg)
![f3_prv_egress.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/3d20476f-9277-8270-6dc0-b4ea6fccc50a.jpeg)

## 4-3. NSG(Network Security Group)について
Security List の 代わりに NSG(Network Security Group) でも OK です。NSG はリソース単位に適用可能なので、Subnet単位の Security List よりも細かく制御できます。
注意点は、OCI の場合は Security List と NSG のルールは **OR条件、どちらかに記述しておけば有効** になるということ。

NSG を使う場合は、Seculity List のルールは全部削除しておきましょう。

# 5. 各種Gateway

## 5-1. Internet Gateway
外部(Internet)からの接続用に Internet Gateway を作成。これが無くちゃ始まらない。
![g1_IGW.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/2ff79bc2-9907-88a1-4104-a7e8b982457c.jpeg)

## 5-2. NAT Gateway
Private Compute から 外部(Internet) の接続用に NAT Gateway を作成。yum/wget/curl/Windows Update等の使用を想定。
![g2_NATGW.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/a370f4d9-396a-bb41-c03f-20cdfd276c20.jpeg)

## 5-3. Service Gateway
Private Compute から Object Storage や Autonomous Database、REST API(OCI CLI)等への接続用に Service Gateway を作成。
![g3_SGW.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/fca136ac-c29d-8020-e74c-1ab6d3784f7f.jpeg)

# 6. Route Table

今回の構成の場合は Route Table は 各種Gateway と Subnet をリンクさせる役割を持ちます。やはり Public用とPrivate用をそれぞれ作成

## 6-1. Public Subnet用 の Route Table
Internet Gateway を Subnet にアタッチして、外(Internet)から接続できるようにします。
![h1_pub_rttbl.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/2e7fd2ec-1dc3-9366-e523-9f5a1cf4de14.jpeg)
![h2_pub_rtrule.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/534d8b98-b8c5-9f2d-dda2-5912b3f4bd27.jpeg)

## 6-2. Private Subnet用 の Route Table
NAT Gateway と Service Gateway を Subnet にアタッチして、外(Internet) や Oracle Service(Object Storage等)にアクセスできるようにします。
![h3_prv_rttbl.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/4496bf7a-59e8-3372-9041-f05532975e13.jpeg)
![h4_prv_rtrule.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/2201f919-0f79-18a8-f785-b65640aa04d3.jpeg)

# 7. Subnet

原則として AD(Availability Domain)跨り の Regional Subnet を採用します。
AD(Availability Domain)毎 に Subnet を作成する必要が無く、とても便利彡(^)(^)

## 7-1. Public Subnet

CIDR(IPアドレス範囲) は 構成図通りの 10.0.0.0/24、前もって作った Security List と Route Table をアタッチします。
![i1_public_subnet.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/8e016aec-80ef-3cb2-a5af-de4d12099428.jpeg)

## 7-2. Private Subnet

CIDR(IPアドレス範囲) は 構成図通りの 10.0.1.0/24、やはり前もって作った Security List と Route Table をアタッチします。
![i2_private_subnet.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/9f295385-7790-8db7-a17c-e2290c47b4e9.jpeg)

# 8. Compute

前もってSSHのキーペア、公開鍵(\*.pub) と pem形式の秘密鍵(\*.pem) を2セット(Public用, Private用)作成しておきます。併せて putty形式の秘密鍵(\*.ppk) も作成しておきます。

OS Image は Oracle Linux の最新版、Shape は 1コア(1oCPU) の Intel(VM.Standard.2.1) か AMD(VM.Standard.E2.1) を選択します。AMD の方がちょっとお安い。なおつい最近AMDの新型(VM.Standard.E3)が出ました。
![j1_compute1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/83ae3008-c6c3-4685-2d34-906fa5bf16b8.jpeg)
![j2_compute2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/187eaad2-466b-09da-2b30-fc95d3af7c89.jpeg)
![j3_compute3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/1d96cb71-114c-e602-a2f8-074ca57e5751.jpeg)

# 9. ssh接続

クラックされた場合のリスクを考慮して、踏み台サーバーに鍵は置きません。下記記事のように、クライアント端末(PC)の秘密鍵を動的に転送して、Private Compute にアクセスします。

> Pageantを使用した踏み台サーバー経由のssh
> https://qiita.com/untitle_23/items/7af5e6b1d29f95c13f36

下記では Pageant + Tera Term を使用して、踏み台(Bastion)経由で Private Compute に ssh接続しています。

![k1_pageant.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/285c03bc-e81f-2796-b5f3-565b0d226ada.jpeg)
![k2_tera1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/d0066832-80ce-8b27-11a4-8eb4e0519167.jpeg)
![k3_tera2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/12713a4f-53cf-ea65-723e-4eb2246a05f2.jpeg)
![k4_tera3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/df76ebc9-2008-5325-3f2a-12da1a432557.jpeg)

踏み台(Bastion)経由で Private Compute に接続できたで！彡(^)(^)

# 10. まとめ

この記事では手でペチペチと環境を構築していますが、もちろん Terraform や OCI Resource Manager(※Terraform互換の Managed な Service) でも環境構築は可能です。そのうち紹介するかも。

この記事やその他記事も参照して、OCI をどんどん活用して下さいね。
彡(^)(^)

# 11. 追記

Object Storage を作るの忘れてた……。まあ作るのも使うのも簡単なので、下記記事あたりをご参考にしつつ使ってみて下さい。

> 【総まとめ】Oracle Cloud Infrastructure オブジェクト・ストレージ・サービスの機能概要
> https://qiita.com/ksonoda/items/dc12792c99a962f932f9

# 12. 参考マニュアル／リンク集

> コンパートメントの管理
> https://docs.oracle.com/cd/E97706_01/Content/Identity/Tasks/managingcompartments.htm
> 
> VCNとサブネット
> https://docs.oracle.com/cd/E97706_01/Content/Network/Tasks/managingVCNs.htm
> 
> セキュリティ・ルール
> https://docs.oracle.com/cd/E97706_01/Content/Network/Concepts/securityrules.htm
> 
> セキュリティ・リスト
> https://docs.oracle.com/cd/E97706_01/Content/Network/Concepts/securitylists.htm
> 
> ルート表
> https://docs.oracle.com/cd/E97706_01/Content/Network/Tasks/managingroutetables.htm
> 
> Linuxインスタンスでのキー・ペアの管理
> https://docs.oracle.com/cd/E97706_01/Content/Compute/Tasks/managingkeypairs.htm
> 
> インスタンスの作成 - Linuxインスタンスを作成するには
> https://docs.oracle.com/cd/E97706_01/Content/Compute/Tasks/launchinginstance.htm
> 
> Oracle Cloud Infrastructure 活用資料集
> https://community.oracle.com/docs/DOC-1035494