OCI基本の基！コンパートメントとは？


## ■はじめに
本記事ではOracle Cloud Infrastructure（以下OCI）の独自の概念である”コンパートメント”についてご紹介していきます。
コンパートメントはOCIでは必須で作成されるため、OCI運用では避けては通れない重要なコンポーネントとなっているので、調べた内容を以下にまとめてみました。


## ■コンパートメントとは
コンパートメントとは、簡単に言うと「リソースを分ける箱」のようなものです。
１つのアカウント（テナンシ）の中に小部屋を作るような機能と考えて頂くと分かりやすいかと思います。
※テナンシ：OCIで契約をして頂くと、1つのテナンシと呼ばれるお客様の環境が発行されます。

![スクリーンショット 2024-05-30 124933.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3019238/7adea154-d2f5-727f-a47d-e071d2eac0c6.png)


## ■特徴
### ✓部署やプロジェクトごとの権限管理が容易
　特定のコンパートメントの範囲リソース操作に対して権限を付与したりなど、コンパートメントごとの制御が可能です。
 よって、下記の図のように、特定のグループ（部署、プロジェクト等）にはコンパートメントAに対する管理権限を付与し、コンパートメントBには閲覧権限を付与することによって権限管理をしたりすることが可能です。
こちらの例では、情報システム部には情報システムのコンパートメントAと開発部のコンパートメントBに管理権限を付与し、一方開発部にはコンパートメントAに対しては閲覧権限のみ、コンパートメントBに対しては管理権限を付与するように制御しています。
 
 ![スクリーンショット 2024-05-30 124853.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3019238/3ac13ab4-e93d-cf43-968d-13b05b069b82.png)


### ✓コスト管理が容易に可能
　OCIのコンパートメントを利用すれば、”利用部署やプロジェクトごとに契約を分ける必要が無くなり”、1つのテナント内でリソース・権限の管理制御が可能になります。
 そのコンパートメント毎に発生している請求額を、OCIコンソール上で簡単に管理することが可能です。（以下にコンソール画面のスクリーンショットを掲載しております。）
 
こちらがOCIのコンソール画面より、左上のメニュー＞「請求とコスト管理」＞「コスト分析」のボタンをクリックすることで遷移する画面になります。

 ![スクリーンショット 2024-05-30 120104.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3019238/6987dc5c-6a63-6b72-4165-24e1ae267015.png)

こちらにてコンパートメント単位でかかっているコストを確認することができますので、
例えば部署やプロジェクトごとでコンパートメントを分ける設定をされた場合は、それぞれでかかった金額をこちらの画面から確認できる仕様になっています。

![スクリーンショット 2024-05-30 122715.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3019238/e762d685-cdb1-c418-0ef9-303a8066bd1b.png)

企業では、請求書に対して内部請求をする場合があるかと思います。
他社クラウドの場合では、コンパートメントの概念がないため、部署ごとにアカウント（テナンシ）を作成する必要があり、請求書もそれぞれの契約ごとに発行されるのに対し、OCIは（1つのテナンシで契約した場合は）請求書発行は1枚となるため、上述したような「アカウントごとにいくら使っているかを管理できる機能」をもとに、各部署や各システムのインフラ費用を確認することができるようになっています。

 
### ✓リソース分割が可能
　リソース作成時に、リソースを指定したコンパートメントに配置することで、本番環境/開発環境などのように、用途ごとの管理が楽に実現できます。

 以下２つのコンソール画面のスクリーンショットは、同じテナントの中のコンパートメントAとコンパートメントBとで、どのように画面表示が異なるかを表しています。
 
こちらはコンパートメントAに立てているインスタンスのリストが表示されています。
![スクリーンショット 2024-05-30 130357.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3019238/0e4fc420-410b-deba-53b1-c842b5ae09d7.png)

こちらはコンパートメントBに立てているインスタンスのリストが表示されています。
![スクリーンショット 2024-05-30 130457.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3019238/bef4a86c-60a1-e847-fbee-975c09e1f0a7.png)

また、自身が閲覧権限のないコンパートメントのリソースを閲覧しようとした場合には、閲覧ができないようになっています。
![スクリーンショット 2024-05-30 133523.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3019238/d8927a97-20a2-bc80-4329-c5b14f4bb3ee.png)



他社クラウドの場合だと、ネットワーク（OCIでいうVPN、AWSでいうVPC）ごとにリソースを配置できたりするものの、OCIのようなコンソール上での一目でコンパートメントのリソースだと把握できるような簡単なリソース管理が出来ません。この点、用途ごとのリソース管理がかなり楽になるのではないでしょうか。

またコンパートメントは階層型権限管理が可能で、最大6階層までの作成が可能になっています。 
これにより、ある部署内の更に細かいチームごとに、コンパートメントを用意しリソース分割をすることができます。例としては、部署内のプロジェクトごとにコンパートメントを更に分けるシチュエーション等が想定できます。
![スクリーンショット 2024-05-30 131732.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3019238/96ce1cc6-170f-c897-8dfb-a2550e6b4430.png)





## ■おわりに
今回は、OCIを運用する上で避けては通れないコンパートメントについて改めて勉強、調べたことを備忘録として書いてみました。

OCIのセキュリティには欠かせない機能となっていることも理解をしましたし、コンパートメントはAWSやAzureといった他のクラウドにはないサービスコンポーネントなので、しっかり理解を深めるのは大事だと思いました。

適切なコンパートメント管理は適切なOCI運用に直結しますので最初のコンパートメント設計は思いのほかとても重要です。

また調べていて感じましたが、コンパートメントは権限管理と密接なサービスなので次回はOCIの権限管理関連についてももう少し調べてみようかと思います。

備忘録の記事ですがOCIを始める方の一助になれば幸いです。


## ■参考
https://solutions.system-exe.co.jp/oracle-cloud/blog/what-is-a-compartment

https://docs.oracle.com/ja-jp/iaas/Content/GSG/Concepts/settinguptenancy.htm