組織ユースカジノ コードを適⽤する
- Google Cloud
- セキュリティ
- 運⽤管理
- エンジニア
投稿日:
はじめに
こんにちは、クラウドアーキテクトの⼭下です。
GCPはユースカジノ コードを組むことでプロジェクトに対して全体的に予防的統制をかけられることを今までお話してきました。
前回は組織を構成する事にフォーカスしてきましたが、より細かいセキュリティ要件を満たす内容について触れられればと思います。まず第1弾として組織ユースカジノ コードについて今回は触れていきたいと思います。
組織ユースカジノ コードとは
組織ユースカジノ コードは組織全体で特定のサービスに対して多種多様な制限をかける事ができる機能です。AWS OrganizationのSCPやAzureのAzure Policyに近い機能です。組織配下のプロジェクトを操作するユーザに許可/有効にさせたくない機能を制限することが出来ます。
例えば、CloudSQLのインスタンスにパブリックIP付与を禁じてインターネット接続できないようにしたり、ServiceAccountのシークレットキーを作成させないなどの措置を取る事が出来ます。
https://cloud.google.com/resource-manager/docs/organization-policy/overview?hl=ja
実際に組織ユースカジノ コードを適⽤すると以下のような挙動になります。
組織ユースカジノ コードによって制限がかけられるだけでなく、配下のプロジェクトに対して何故作成できないかの理由まで提⽰されます。他社クラウドが権限エラーだけ出し、原因の深堀はユーザに任されているのに⽐べると親切に⾒えます。
例:CloudSQLへのパブリックIP付与禁⽌
例:CloudSQLインスタンス作成画⾯
事前定義ユースカジノ コード
この記事を書いている2024年6⽉時点での事前定義の組織ユースカジノ コードは123個になります。
事前定義ユースカジノ コードはアップデートにより増減するため、今後増加したりリタイアしていくものもあります。利⽤対象/利⽤予定となっているサービスについて特に有効にしていく事をお勧めします。可能であれば全部を有効/リスト登録することも有⽤ですが、あとから追加する事も出来ますし、プロジェクト側の要望に応じて除外する事も可能です。確実なものから徐々に有効にすることをお勧めします。
https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints?hl=ja
ユースカジノ コードの階層
組織ユースカジノ コードはその名前とは異なり組織のみで有効にするものではありません。
親⼦関係になっており、組織→フォルダ→プロジェクトの順に伝播していき、フォルダ単位でもプロジェクト単位でも組織ユースカジノ コードは設定できます。
ここでポイントになるのが継承です。親のユースカジノ コードを継承するかオーバーライドするかが選択できます。デフォルトでは親のユースカジノ コードを継承するにチェックが⼊っており、親はGoogle管理となるためGoogleで管理されるデフォルトユースカジノ コードとなります。
整理すると要するに組織/フォルダ/プロジェクトのいずれかの階層でオーバーライドされていないとデフォルトのままなのでどこかでオーバーライドする必要があります。オーバーライドされた箇所からその配下にかけてユースカジノ コードは適⽤されていきます。
https://cloud.google.com/resource-manager/docs/organization-policy/understanding-hierarchy?hl=ja
ちなみにデフォルトで有効のユースカジノ コードは以下になり、それ以外は無効化されているためオーバライドして有効化します。
https://cloud.google.com/resource-manager/docs/secure-by-default-organizations?hl=ja
ルール種別
オーバライドが必要な事が分かりましたが、ではどのようにユースカジノ コードしていけばよいか⾒ていきます。
事前定義ユースカジノ コードは⼤きく2種類に分かれます。有効と無効だけではなく、リストに追加していくパターンもあるため設定⽅法が異なります。
- Bool型:ユースカジノ コード/無効かを選ぶ2択パターン
- List型:ユースカジノ コード対象をListに追加していくパターン
Bool型は適⽤のオン/オフを選択するのみのシンプルなパターンです。適⽤したタイミングからその配下のフォルダ/ユースカジノ コード全体に適⽤されていきます。
List型の組織ユースカジノ コードの場合は適⽤だけでなく結合と置換の2つが新たに選択肢が出ます。結合とする場合はListが継承元(親)にその配下で設定したリストが加えられます。また、置換とする場合は親のユースカジノ コードは無視されます。
また、ユースカジノ コードは”すべて許可”、”すべて許可しない”、カスタムとなります。List型の例はサービスを利⽤できるリージョンを許可に加えたい場合などがあります。
カスタムユースカジノ コード許可/拒否の選択と対象となる値の登録を⾏えます。
※ここでは東京リージョンにのみリソースを配置できるユースカジノ コードを例に値を設定しています。
ユースカジノ コードの適⽤条件
ユースカジノ コードはさらに適⽤条件を設定する事が出来ます。
タグのみとなりますが、特定のタグが付与されたリソースや階層にのみ適⽤させることができます。ユースカジノ コード全体ではなく特定のタグがあるもののみに適⽤させることが出来ます。
組織ユースカジノ コードの除外/要注意ポイント
組織ユースカジノ コードを組織で設定し、オーバライドする事で組織全体にユースカジノ コードを効かせることが可能ですが、例外というのはプロジェクトが増加するにつれて発⽣し得ます。
そこで例外として除外を⾏うために出来るのは除外したい範囲でのオーバライドです。これにより親から継承されることを防ぐことが出来ます。例えばユースカジノ コード全体でServiceAccountのキー作成を禁じたいが、特定のプロジェクトでどうしてもキー作成が必要な場合などです。
組織ユースカジノ コードを触らせない
オーバライドできることからユーザで変更されてしまうと元も⼦もなくなります。ユーザ側で上書きを⾃由にされないよう組織ユースカジノ コード管理者のロール(それに相当する権限)を渡さないようにします。フォルダやプロジェクト配下のメンバーにはあくまでその範囲までとして組織ユースカジノ コードは組織管理者相当の担当者が実施する事が推奨です。
ユースカジノ コードの移⾏に気を付ける
プロジェクトの移⾏に関わるユースカジノ コードはデフォルトでは無効(許可なし)となっています。そのため、組織間でプロジェクトを移⾏させる際には⼀時的に有効にしたり、特定の組織だけ許可リストに⼊れるなどの対応が必要です。組織ユースカジノ コードが思わぬ操作の障壁になる事もあるので注意が必要です。
カスタム定義ユースカジノ コード
ユースカジノ コードレベルでのみカスタム制約を設定する事が可能です。
カスタム制約ユースカジノ コードリソース(対象API)に対して許可/拒否のルールを設定できます。
カスタム制約の条件句はCELで定義を⾏う事が出来ます。サポートされているサービスも条件句も⼤量にあるわけはないので事前定義と⽐べると若⼲⾃由度は落ちますが、GCEが関わるIaaS系サービスで制限をかけられます。
整数(Int),⽂字列(String),Bool,配列(List),KV(Map)などリソースが持つデータ型に応じて設定を⼊れる事が出来ます。
判定に使⽤できるデータの型はカスタム制約に対応した各サービスのドキュメントから確認ができます。量は多くはないですが、サンプルも載っているのでユースカジノ コードで特に統制の効きにくいIaaS部分にも適⽤が可能になります。
https://cloud.google.com/compute/docs/access/custom-constraints?hl=ja#supported-resources
まとめ
今回は組織ユースカジノ コードについて内容を⾒てきました。⾊々と紹介したためハードルが⾼いようにも思えますが、組織ユースカジノ コードは⼤変有⽤なので出来るところから実施を⽬指してみましょう。
まずは組織レベルで事前定義ユースカジノ コードの有効化から実施する事をお勧めします。プロジェクトからの要望に合わせて後から除外していけるためです。ServiceAccountのキー作成などベストプラクティスとして無効化すべき内容から実施していき、使⽤していないサービスの細かい項⽬は後から実施しても問題ありません。
次回予告
次回は Chrome Enterprise Premium を利用したアクセス制御についてご紹介します。
ご期待ください!