「管理グループ」スコープを設定できるAzureサービス一覧

# はじめに
最近「管理グループ」の適用検討する機会がありました。管理グループについては前から知っていましたが、逆にどのAzureサービスで管理グループが使えるか、という観点では整理されているものを見たことないのでちょっと調べてみました。

# 管理グループとは
Azureには「管理グループ」というサービスがあります。社内に複数のAzure環境（サブスクリプション）が存在している場合、組織としてはそれらの環境を一元的に管理して統制がとれるようにしたいという要求があります。こういったケースで管理グループは有用です。
全体イメージは下図になります。管理グループ単位で一定のポリシーを設定し、その配下にサブスクリプションをぶら下げることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/264eb1b6-9cd3-4e72-39cd-9bcda68ce7e7.png)

最近のMS Learnではこんな図↓で説明されています。上図と同じことを言っていますが、管理グループのレイヤとサブスクリプションのレイヤを明確に分けて考えましょうということでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/d1af1566-e724-a250-d462-a0cbdf746e28.png)

## 管理グループを使う際の留意点

### 1. １つのAzureADテナントにぶら下げる必要がある
管理グループはAzureADテナント配下の環境にポリシーを適用します。頂上（ルート）はAzureADとなるため、AzureADを跨いだ管理グループの適用は現時点ではできません。Azure環境分離の考え方として、本番環境と開発環境でAzureADテナントごと分離する方式もありますが、そのような場合は本番環境と開発環境を同じ管理グループで管理することはできません。

### 2. 管理グループで利用制限を強制しすぎないこと
管理グループの目的は「組織（＝AzureAD）内の統制」です。つまり、配下のAzure環境に”一定のポリシー”を適用し、__ガードレール__ を設けることです。組織内のメンバはこのガードレールの中で自由にAzureを使うことが望ましく、管理グループのスコープでガチガチの利用制限をかけることは得策ではありません。

### 3. 管理アカウント管理を徹底すること
上記と同様の話ですが、管理グループのポリシー設定は配下の全Azure環境に適用されます。それだけ管理グループを制御できる管理者は通常のAzure環境の管理者よりさらに慎重に管理する必要があります。万が一この管理者が乗っ取られた場合、組織内全てのAzure環境を実質利用できなくすることも可能ですので、この管理アカウントの管理は徹底しましょう。

その他管理グループの利用については、MS Learnに詳細情報がありますので、管理グループ自体の理解を深めたい方はこちらをご参照ください。

https://learn.microsoft.com/ja-jp/azure/governance/management-groups/overview

CAF（Cloud Adoption Framework）の中にも管理グループの運用に関するベストプラクティスがまとめられています。こちらも参考になりますのでご参照ください。

https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-management-groups

## 管理グループが使えるAzureサービスは？
さて、管理グループの概要が分かったところですが、では、管理グループスコープで利用できるAzrueサービスはどれでしょうか。ひとまず「bing chat」で聞いてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/d3b984b8-438e-e4cc-19b6-5c5d0339c7da.png)

ふむふむ、、、キーワードとしてはやはり Policy、RBAC、Blueprintsといった統制関連のサービス名が出てきました。ただ一例としてとしか分かりませんでしたので、MS Learnの検索やリファレンス情報から自分なりに整理してみました。（網羅性は担保できていません。他にもこれがそうだよ、という情報があれば是非コメントにて教えてください！）

### 1. 統制関連

#### 1-1. Azure Policy
これはもう管理グループで使うためのサービスといっても過言ではありません。Azure Policyは”作成できるリソースは「東日本/西日本リージョン」のみ許可する”や、”作成するリソースのファイアウォール設定を必ず有効化する”といったような、環境に対する制限をかけることができます。管理グループは階層構造を取ることができますので、ルートには普遍的なポリシーを設定し、下位に進むにつれて個別のポリシーを設定していくのが推奨となります。

#### 1-2. RBAC
AzureのIAMであるRBACですが、その適用スコープとして管理グループを選択することが可能です。
注意点としては、RBA定義の中にある"AssignableScopes"（適用範囲）の定義が通常とは少し異なります。
通常(サブスクリプション単位の場合)は、__*/subscriptions/00000000-0000-0000-0000-000000000000*__ となっていることが多いですが、管理グループの場合は　__*/providers/Microsoft.Management/managementgroups/{groupId}*__ となります。

#### 1-3. Azure Blueprint
長い間プレビューが取れないので中々本番ワークロードに適用するのは難しい状況ではありますが、Blueprintは一定の設計パタンをテンプレートとして管理し、環境に迅速に適用することができるサービスです。ARMテンプレートによるAzureリソースの構築だけでなく、ポリシーの割り当てや権限ロールの割り当てまでもセットで構築してくれます。組織のポリシーに応じて一定の制限を入れた環境を標準環境として提供する際のツールとして効果的です。（早くプレビュー取れてほしい・・・）

#### 1-4. Microsoft Defender for Cloud
Defender for Cloudは正確に言えばサブスクリプション単位に適用されるサービスです。しかし、Azure Policyを用いることで、管理グループ配下のサブスクリプションに漏れなく適用するといったことができます。調べた限り、可能なのは強制適用までで、管理グループでダッシュボードを統合するようなことはできないようですが、組織として一定のセキュリティレベルを確保するためにDefender for Cloudの強制適用は有用です。

#### 1-5. Azure Lighthouse
Azure LighthouseもDefender for Cloudと同様に管理グループそのものにAzure Lighthouseの機能（権限委任）ができる訳ではありませんが、Azure Policyを用いることで、管理グループ配下のサブスクリプションを任意の管理テナントに委任することができます。外部サービスや別AzureADテナントに共通的に接続したい場合にLighthouseで権限委任だけ強制適用しましょう。


### 2. 運用管理

#### 2-1. Azure Virtual Network Manager
Azure Virtual Network Managerは、組織内のVNETをグループ化し接続構成（トポロジ）やセキュリティルールを統合的に管理してくれるサービスです。通常だと、VNET間のピアリングは個別に設定する必要があるためVNETの数が多くなってくると管理が煩雑になりますが、本サービスにより一元管理できるようになります。現在はHub/Spoke型の構成だけがGAしている状態ですが（メッシュ型はプレビューのまま）、本サービスで構成したHub/Spoke型のネットワークはspoke間の通信もできるようになるようです。これまでSpoke間通信を行うためにはHub VnetにAzureFW等の仲介リソースを置いたり、Spoke間でVnetPeeringを構成する必要がありましたので、これは地味にすごいことです。
そして何より管理グループのスコープということは、サブスクリプションを跨ぐことが容易になります。組織的に共通運用環境をHub Vnetとして作り、そこに組織内の業務システムをSpoke VnetとしてHub Vnetに接続するようにすれば管理は捗りそうですね。

#### 2-2. デプロイ（ARMテンプレート/Bicep）
Azureリソースのデプロイには欠かせないARMテンプレートやBicepについても管理グループに対応しています。しかし、対応しているのは管理グループに対応しているサービス（Azure Policy, Blueprint, etc...）になるのでご注意ください。サブスクリプション以下のスコープにリソースをデプロイする場合は、deploymentsを入れ子にして使うことができます。なお、管理グループ用のスキーマは、サブスクリプション以下のスキーマと異なる点に注意してください。

**■管理グループ用のスキーマ**
```json
{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
・・・
}
```

**■サブスクリプション以下のスキーマ**
```json
{
 "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
・・・
}
```

#### 2-3. Activity Log
管理グループレイヤの操作はもちろんActivety Logに出力され参照することができます。その際のターゲットスコープは"/providers/Microsoft.Management/managementGroups/{groupId}"となりますのでご注意ください。なお、管理グループ配下のサブスクリプションのActivety Logが統合的に参照できるということではありません。それをやりたい場合はActivity Logのエクスポート機能で同一AzrueADテナント内のリソースであれば出力設定が可能ですので、統合運用環境的な場所に出力するようにBlueprint等で設定してあげるのが良いでしょう。

### 3. コスト管理

#### 3-1. Cost Management
Cost Managementも管理グループスコープで管理することができます。組織としてのAzure利用コストを見たい場合に有用ですね。ただ、Cost Managementを管理グループで利用できる条件は、契約や権限によってわかってくるようです。詳しくは下記に説明がありますのでご確認ください。（理解するのはなかなか難しそう。。）

https://learn.microsoft.com/ja-jp/azure/cost-management-billing/costs/understand-work-scopes

#### 3-2. Reserved Instance
Reserved Instance（RI）も管理グループスコープで購入することができます。（共有グループという特別なスコープもありますがそれとはニュアンスが異なります。）サブスクリプション単位でなく、組織としてRI運用ができるというのはコスト削減に大きく寄与することができますので、積極的に活用されるのが良いかと思います。

#### 3-3. Savings Plan（節約プラン）
RIと同様に節約プランも管理グループスコープで購入することができます。節約プランが適用されるリソースは限られていますので、組織として母数が大きくなればその分節約プランの効果も向上します。RIと併せて運用に取り入れることをご検討ください。節約プランの詳細は下記の記事でも解説していますので併せてご確認ください。

https://qiita.com/hiro10149084/items/b6a67546850a31218795


# おわりに
今回は「管理グループ」のご紹介と管理グループが使える（管理グループに関連する）Azureサービスを整理してみました。組織内（AzureADシングルテナント）にある複数のAzure環境の管理負荷の低減もしくは環境全体の統制を掛けることを計画されている方の一助になれば幸いです。それでは！