※本記事はMartin Sleemanによる”Best Practices for Compartments”を翻訳したものです。
Oracle Cloud Infrastructureのコア・プラットフォームを担当する製品マネージャーである私は、コンパートメントやタグ付けなどの機能を使用した、効率的なコスト管理やオペレーションの簡略化、継続的なガバナンスのベスト・プラクティスについて、質問を受けることがよくあります。
そこで今回のブログでは、コンパートメントを使用した、リソースの整理、アクセス制御の設定、管理およびガバナンスのターゲティングに関するベスト・プラクティスについて、お話ししようと思います。
適切に設計されたコンパートメント戦略の効果
コンパートメント階層を使用してテナンシを適切に整理すると、以下のとおり多くのメリットを獲得することができます。
コンパートメントの基本
コンパートメントを使用することでリソースが整理されるため、コストの管理責任や管理者権限を委任することも可能になります。コンパートメントは論理的なコンテナであり、リソースが配置され、どのデータセンターにも紐づけられず、すべてのデータセンターに対応させることができます。すべてのリソースは1つのコンパートメントに配置されます。
テナンシ管理者は、リソースのレイアウトを設計して、アクセス制御ポリシーにて適切なグループに適切なアクセス権が付与されるようにすることができます。またコンパートメント設計を行うことで、予算やリソースの定数を割り当てたり、リソースにタグを適用したりすることも可能になるため、リソース管理も容易になります。
コンパートメントは、Oracle Cloud Infrastructureのなかで唯一の体系的な階層リソースです。また、ポリシーをアタッチできる唯一のリソースでもあります。したがって、コンパートメントのレイアウトを考える際には、自社のアクセス管理目標を踏まえて、それらを達成できるようにレイアウトを策定されることをお勧めします。
効率的なコンパートメント階層を作成するためのベスト・プラクティス
すべてのリソースに体系的な階層を適用するには、コンパートメントをネストする必要があります。
またコンパートメントの階層を設計する際は、自社のアクセス制御の境界が反映されるように設計します。特定のグループが特定のリソース・セットにのみアクセス権を必要としているのなら、それらのリソースをそのグループのコンパートメントに配置します。
コンパートメントをネストすると、コンパートメント管理者への管理者権限の委任も簡単になります。ある部門用にコンパートメントを作成すれば、その部門のメンバーは自部門の構成に合わせてサブコンパートメントを作成できるようになります。その部門に管理者タスクを委任すれば、プロジェクトの詳細に関与することなく、部門全体を1単位として、利用を統制することができます。そしてその委任作業を統括するのが、アクセス制御ポリシーになります。
コンパートメントによってユーザーのアクセス制御およびガバナンスの境界が作られますが、リソースにはこの境界を越えてアクセスすることができます。たとえば、すべての仮想クラウド・ネットワーク(VCN)を1つのコンパートメントに置いても、それらのVCNには、すべてのコンパートメントからアクセスすることも、接続することもできます。ただし、それらのVCNへの管理者アクセス権をネットワーク管理者のみに制限することで、より容易に管理を行うことができます。
以下の図は、架空の会社BlueCat Corpのテナンシを例にした、コンパートメント階層の一般的な設計パターンです。またここでは、コンパートメントの組織的原則も少し理解することができます。
こうした整理スキームは、ガバナンスの面でも、アクセス制御の面でも、効果的です。コンパートメントの整理スキームを策定する際は、アクセス制御とガバナンスのニーズが満たされるように策定することをお勧めします。
コンパートメントは必要な数だけ作成しましょう。コンパートメントは無料です。1つのテナンシに何百ものコンパートメントを置くことができます。設計における唯一の大きな制約は、コンパートメントのネストが6レベルまでに制限されていることです。しかし私が知る限り、この制約が問題になったお客様はいません。
ポリシーとコンパートメント
コンパートメント階層の設計とレイアウトにおいて考慮しなければならないのは、テナンシにとって適切なアクセス制御を設定するポリシーを簡単に記述できるようにすることです。
ポリシーは以下のように記述します。
Allow group <group_name> to <verb> <resource> in compartment <compartment_name>
このように、コンパートメント内のすべてのリソースまたは特定のリソースタイプからなるグループを対象に、特定のアクセス・レベルを付与するポリシーを、簡単に記述できます。
委任管理
コンパートメント階層を設定することで、コンパートメント・ツリー全体に対する管理タスクは委任しつつ、委任された管理者がテナンシ全体を変更することはできません。
委任するチームごとにコンパートメントを作成しましょう。そのうえで、そのコンパートメントの管理を任せたい管理者グループ(例:SmartAlec_Admins)を作成します。次に、以下のポリシーを記述して、それをルート・コンパートメントに置きます。
Allow group SmartAlec_Admins to manage all-resources in compartment Project_SmartAlec
これで、SmartAlec_AdminsグループによるProject_SmartAlecコンパートメントのフル・コントロールが可能になりました。またこのSmartAlec_Adminsグループにて既存のグループ向けにポリシーを作成し、そのグループによるコンパートメント・ツリー内のリソースへのアクセスを許可することもできます。
たとえば、SmartAlec_Adminsグループはオペレーション・チームにProdコンパートメントのフル・コントロールを許可したいが、DevおよびTestコンパートメントの管理権限はDevTeamグループが持つべきである場合、SmartAlec_Adminsグループのメンバーは、ポリシーを以下のように記述します。
Allow group Operations to manage all-resources in compartment Prod
Allow group DevTeam to manage all-resources in compartment Dev
Allow group DevTeam to manage all-resources in compartment Test
さらにSmartAlec_Adminsグループでは、Autonomous Data Warehouse(ADW)のバックアップへのアクセスをAutonomous Data Warehouseのサーバー・リソースから切り離したいと考えているとします。この場合、オペレーション・チームにてバックアップを管理し、DB_ADWグループがサーバーを管理するようにします。これには、以下のようにポリシーを記述します。
Allow group Operations to manage all-resources in compartment DBBackup
Allow group DB_ADW to manage all-resources in compartment ADW
コンパートメントの管理
完璧なコンパートメント・レイアウトを作成しようとすると、どこから手を付けてよいのかわからなくなるかもしれません。しかし心配は無用です。コンパートメントの構成は、後で変更できます。
また当社では、コンパートメント・エクスプローラという新しいツールもリリースしています。このツールは、リージョン内の特定のコンパートメントにあるすべてのリソースを確認しやすくするためのものです。これにより、すべてのリソースを可視化し、それらがコンパートメント全体でどのように整理されているのかを簡単に把握できます。
このツールでは、リソースの詳細を表示したり、コンパートメント間でリソースを移動させたりできます。またサブコンパートメント全体でリソースを再帰的に表示させることも可能です。当社ではこのツールを継続的に改良しており、新たな管理機能も続々と追加されていきます。
コンパートメント・ツリーはテナンシ内のどこにでも移動できるため、階層の再構築も可能です。そのため組織の変化に迅速に対応することができます。さらに、コンパートメントの名前の変更、削除、リストアも可能です。
コンパートメントをガバナンスに活用
コンパートメント・ツリーでは、大半のガバナンス機能をターゲティングできます。このターゲティングにより、コンパートメントおよびガバナンス・ツールにて柔軟にテナンシを管理できるようになります。
予算とリソース定数
テナンシのコンパートメント・ツリーに対し、予算やリソース定数を設定することができます。
部門やプロジェクトの構成に合わせてコンパートメントを作成すると、それらの部門やプロジェクトに予算やリソース定数を設定することも簡単になります。
こうした予算やリソース定数はコンパートメント・ツリーにて集約されます。したがって、たとえば「データ分析」コンパートメントに入っている部門に予算を設定すれば、その部門自体がサブコンパートメントに予算を設定することができます。たとえば、2,000ドルの予算がある状態で、「データ分析」チームがデータ用と分析用の2つのサブコンパートメントを作成すれば、それぞれのコンパートメントに1,000ドルずつ予算を割り当てることができます。さらに、いずれかのコンパートメントの予想支出額が1,000ドルを超えたら、アラートも届きます。
このように予算およびリソース定数を階層的に作成することで、テナンシのメンテナンスおよびコスト管理をコンパートメントの管理者に任せることが可能になります。Oracle Cloud Infrastructureのコスト管理機能に関する詳細は、コスト管理に関するこちらのページにてご確認ください。
タグ・デフォルト
タグ・デフォルトを使用すると、タグ・デフォルトが設定されているコンパートメントにて作成されたすべてのリソースに、タグを自動的に適用することができます。たとえば管理者は、「${iam.principal.name}」という値にて「Operations.CreatedBy」というタグを適用するタグ・デフォルトを作成できます。このタグはリソースの作成者のユーザー名にまで拡張されます。これにより、テナンシは2つの自動タグ・デフォルト(CreatedByと、そのリソースが作成された時刻をキャプチャしたもの)で作成されます。
このタグ・デフォルトをテナンシのルート・コンパートメントで使用すれば、テナンシ全体で作成されたすべてのリソースにそのタグ・デフォルトを使ってタグ付けできるため、管理者は時間と労力を節約することができます。
同様に、コンパートメントの管理者がそのコンパートメント・ツリー内のすべてのリソースにタグを適用したい場合も、そのコンパートメント・ツリーの最上位のコンパートメントにタグ・デフォルトを作成すれば、これを実現できます。タグ付け機能の詳細は、こちらのタグ付け製品のページにてご確認ください。また、私のブログ記事Best Practices for Using Tags To Manage Costs, Operations, and Governance(タグを利用したコスト、オペレーション、ガバナンス管理のベスト・プラクティス)でも、タグ付けのベスト・プラクティスを紹介しています。
まとめ
適切に設計されたコンパートメント階層には、多くのメリットがあります。皆さんがそれぞれのテナンシにて、コンパートメントを引き続きご利用いただければ幸いです。なぜならコンパートメントは、テナンシ管理のために当社が提供できる最良の整理ツールだからです。当社のすべての新しいガバナンス機能でも、コンパートメントを使用して、テナンシの具体的なリソースに機能を容易にターゲティングできるようにしています。
Oracle Cloud Infrastructureを初めてご利用になる場合は、無料アカウントの作成からスタートしてください。