マルチAzureAD環境の検討(ガードレール・CSPM編)
はじめに
Azureでマルチアカウント管理のようなことをしようと思ったら・・・ということで実現方法を考えるシリーズの3段目くらいです。
「AzureADのマネージドな機能を利用して、マルチAAD環境を作ってみよう」という想定で、必要な機能とその実現方式をまとめてみたいと思います。
今回は「ガードレール」ということで、ガードレール機能とは何ぞや?それをマルチAADに展開するならどうする?ということを考えてみます。
ガードレールについて
管理者が環境の利用者にかけるガードレールには、2種類あると考えます。
- ①設定の禁止
- ②操作の禁止
①は「この設定だけはやめてくれ」というタイプのガードレールです。ポピュラーな制限が「S3がフルオープンになっていて個人情報が漏洩した」⇒「認証無しでのアクセス許可設定は禁止しよう」みたいなタイプです。いわゆる「CSPM」機能として世の中で認知されています。
②は「この操作だけはやめてくれ」というタイプのガードレールです。AWSにおいてはSCPで制御し、特定OU配下ではこの操作は禁止!ということが容易に設定できます。「セキュリティ」に寄与するかというと諸説あるかと思いますが、特定のリスクのあるサービスは使わせない…なんてことを実施されることがよくあります。今だと、AI系のサービスは使いたいけど社内ルールが整備されるまでは使わせない!みたいな整理をしているところも多いのではないでしょうか。
また、一口に「禁止」といっても2段階あり、「違反する操作や設定が成された場合、管理者に通知して気付けるようにする」といういわゆる発見的統制と、「違反する操作や設定自体がそもそもできない(エラーになる、勝手に修正される)」といういわゆる予防的統制とに分けることができます。
設定のガードレール(CSPM)について
だいぶ前に書いた記事ですが、Azureには「Azure Policy」という機能があります。
Azureのリソースの設定値を縛る機能で、「この設定値はXXXでなければならない」といった、具体的には「ストレージアカウントは東日本リージョン以外にデプロイできない」といった制限をすることができます。
これは発見的統制も予防的統制も実現することができます。
マルチサブスクでのCSPM
複数のサブスクリプションに同時にAzure Policyを設定する場合、検討すべきは「管理グループ」です。「管理グループ」を対象にAzurePolicyを設定すると、その配下にあるサブスクリプション全てに適用することができます。
(引用元)
すなわち、守らせたいルールセットをAzure Policyで作成さえすれば、あとは一番上位の管理グループをスコープにAzure Policyを適用しておくことで、その配下に作られるサブスクリプションに全て自動的に反映されます。
各サブスクリプションに対する管理権限を各システム担当者に渡したとしても、Azure Policy設定を解除することはできなくなるため、非常に安心なガードレールになります。
マルチAADでのCSPM
「管理グループごとLighthouseで委任する」が実現できれば、管理グループごとにAzure Policyで制御すればよいのですが…
残念ながら、現時点ではLighthouseの対象はサブスクリプションよりも小さい単位になっています。
(引用元)
管理グループ内のすべてのサブスクリプションを委任することはできる、ということでAzure PolicyによるCSPMの管理を委任することができるわけですが、管理グループが無いとまとめてPolicyー設定することができません。
つまり、AADごとに管理グループを作成し、管理グループごとにAzure Policyを設定するしかない(マルチサブスクでのCSPMをAAD数分設定する)というのが最適解となります。
設定の手間を省くために、せめてAAD間ではゲストユーザーを使い、ユーザー管理は省力化しましょう…
操作のガードレールについて
毛色が変わってくるので、別記事でまた改めて検討したいと思います。
おわりに
今回は、Azureにおけるマルチアカウント環境、すなわちマルチサブスクリプションやマルチAAD環境において効率的にCSPM機能を実装していく方法を考えました。
「マルチサブスクリプション」であれば、管理グループを使うことでとても効率的に実装できます。一方でマルチAADとなると特に有用なサービス・設定は用意されておらず、個別の環境として作っていく必要があります。
他の「マルチAAD環境で必要な機能」も順次考えていきたいと思います!
Discussion