【コスト管理】 組織のカスタムポリシーを利用して、特定種類のVMマシンの作成を禁止させる
概要
目的
今回は、Google Cloudの組織ポリシーのカスタム制約を使用して、特定のインスタンスの作成をブロックしていきます。
デフォルトで提供されているポリシーでは、特定のインスタンスの作成をブロックすることができません。
また、カスタムポリシーを利用することで、VMの作成以外にもそのサービスのAPIを指定して、条件付きのポリシーを作成することができます。
メリット
特定のインスタンスの作成をブロックすることのメリットとしては、企業でGoogle Cloudを運用している場合などの一元的なコスト管理に役立ちます。
たとえば、GPU搭載のインスタンスやハイメモリのインスタンスを検証環境で立ち上げて、1ヶ月間放置してしまった場合、1000ドル近くの課金がされるマシンも存在します。
ユーザーに悪意がなくても、インスタンスの停止忘れやそもそも必要のない高スペックなVMインスタンスを立ち上げてしますといった事象も考えられますので、予め組織的に防ぐためのガードレールを敷くことはいい選択肢になると思います。
実演
組織ディレクトリに移動
今回作成するカスタムポリシーというリソースは、組織単位でのリソースになるため、フォルダやプロジェクトでは作成できません。予め組織のディレクトリに移動をしてください。
組織ポリシーに移動
検索窓から組織のポリシーと入力し、移動してください。
カスタム制約を押下
移動後、画面上部にあるカスタム制約を押下します
設定値を入力
- 制約の詳細
- 表示名: 制約の名前を設定します。ポリシーの一覧で識別しやすい名前がいいです。
- 制約 ID: 制約を一意に識別するためのIDを設定します(例: custom.denyHightVm1)。
- 説明: 制約の目的や内容を簡潔に説明します(例: テスト用の制約)。
- 適用
- リソースの種類: 制約を適用する対象リソースを指定します(例: compute.googleapis.com/Instance)。
- 適用方法: 制約が適用されるタイミングを指定します(例: 作成時に適用する)。
- 条件
- 条件: 制約の条件をCEL式で記述します(例: resource.machineType.contains('/machineTypes/c2'))。
- アクション
- アクション: 条件を満たした場合に許可または拒否を選択します(例: 拒否)
- アクション: 条件を満たした場合に許可または拒否を選択します(例: 拒否)
最後に制約を作成を保存して適用します。(制約をテストとは、設定した制約をテストして動作確認を行います)
カスタムポリシー(制約)の確認
赤枠のように作成したカスタムポリシーが保存されていることを確認しました。(右にカスタムというフィールドも確認することができます)
組織ポリシーの適応を確認する
c2-standard-4のVMインスタンスを立てようとしましたが、組織ポリシーでブロックされました。
❗️のエラー文を見るとcustom.denyHightVmが適応されたことがわかります。
Operation denied by custom org policy: [customConstraints/custom.denyHightVm] : テスト用(室井)
まとめ
デフォルトで設定されている組織ポリシーに制御したい操作がない場合に利用するのが、カスタムポリシーです。カスタムポリシーを作成しすぎても管理が大変になるので、適宜棚卸しをして、必要最低限の作成に抑えることをおすすめします。
参考ドキュメント