Azure の正しい始め方④ - サブスクリプション、管理グループ、リソースグループ

# Azure の正しい始め方 ①-④

https://qiita.com/YoshiakiOi/items/90d8162fc9fcfc3b01f1

https://qiita.com/YoshiakiOi/items/a81f0c5c8586aadd1565

https://qiita.com/YoshiakiOi/items/b79634ed50b4edeb2b0f

https://qiita.com/YoshiakiOi/items/5d9e6280b4f3ce6fa319

# 本記事について

本記事では Azure の始め方第四弾として、サブスクリプションの管理と管理グループ・リソースグループの設計について見ていきます。

# サブスクリプションの管理

[前回までの記事](https://qiita.com/YoshiakiOi/items/b79634ed50b4edeb2b0f)で、Azure にサインアップするとひとつサブスクリプションが作成されることをご紹介しました。Azure ではこのサブスクリプションにリソースを作成していきます。今回はこのサブスクリプションについて詳細を見ていきます。

## そもそも Azure サブスクリプションとは？

Azure におけるサブスクリプションとは、[**課金・管理・スケールの単位**](https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/ready/landing-zone/design-area/resource-org-subscriptions)です。

Azure のリソースはすべてそれぞれひとつのサブスクリプションに紐づいて作成され、そのサブスクリプションごとに請求がされます。

また、サブスクリプションに対してアクセス権を設定することで、そのサブスクリプション配下のリソースを管理することができます。

サブスクリプションはスケールの単位でもあり、**リソースのクォータをサブスクリプション単位で要求**したり、Azure の**既定のリソース数やパフォーマンスの制限がサブスクリプション単位で設定**されていたりします。

https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/management/azure-subscription-service-limits

https://learn.microsoft.com/ja-jp/azure/quotas/quotas-overview

## サブスクリプションをどの単位で区切るべきか？

サブスクリプションをどの単位で区切るべきか？という問いに対して、ひとつの絶対的な回答はありません。ただし、**アンチパターンとしては、ひとつのサブスクリプションに組織内のリソースをすべて詰め込む**というものがあります。逆に言うと、それなりの単位 (システム・アプリケーション単位、プロジェクト単位、開発・検証・本番単位など) で分割することが推奨になっています。

特に分割に際し、以下の考慮ポイントを見ておくと良いです。

* 適切な**権限分掌**を行う。

* サブスクリプション単位で設定されている**リソース数上限を避ける**。クォータ申請がサブスクリプション単位のため、利用したいサービスに**クォータがある場合はそのサブスクリプションで利用**するようにする。

* **Defender for Cloud** など重要なセキュリティ機能の ON/OFF がサブスクリプション単位になっているため、**セキュリティレベルが異なるものは別サブスクリプション**にする。

* **課金の明確な単位**（共有ネットワーク（ExpressRoute, Firewall など）はコアネットワーク用サブスクリプションに入れるなど）として利用する。

* **特定の仮想ネットワークに入れる仮想マシンは、仮想ネットワークと同じサブスクリプションに存在する必要**がある。

https://learn.microsoft.com/ja-jp/azure/virtual-network/network-overview#network-interfaces

> VM に接続された各 NIC は、VM と同じ場所およびサブスクリプションに存在する必要があります。 NIC と同じ Azure の場所およびサブスクリプションに存在する VNet に各 NIC を接続する必要があります。

# 管理グループによる複数のサブスクリプションの管理

多くのケースで組織内で複数のサブスクリプションを運用することになります。その際にアクセス権設定やポリシーは一元的に構成したいというニーズが出てきます。それを満たす機能が 2018年にリリースされた **管理グループ (Management Group)** という機能になります。

https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/management/manage-resource-groups-portal

## 管理グループの仕組み

管理グループはサブスクリプションをまとめる仕組みです。Microsoft Entra ID テナントの最上位のグループとして、**テナントルート管理グループ (Tenant Root Management Group)** が必ず既定で存在しています。その配下に管理グループを作成していきます。管理グループは**複数階層持たせることができる**ため、**管理グループの中に管理グループを追加する**ことができます。そして管理グループにサブスクリプションを追加して管理します。(**テナントルート管理グループ下にすべての管理グループ・サブスクリプションを配置できることも、シングルディレクトリ構成を採用するメリットの一つ**です。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/7fd5f849-ca7e-bd0a-d4d7-b067d30e01f9.png)

そして**アクセス制御やポリシーは上位の管理グループから下位の管理グループ・サブスクリプションに継承**されるため、より共通的に利用したいアクセス権設定やポリシーは上位の管理グループに適用します。

## 管理グループをどう設計するか？

管理グループをどう設計するか？についてもひとつの決定的な回答はありません。組織の体制やビジネスニーズに合わせて設計いただく必要があります。

ただし、以下の考え方が一般的によく参照されるものになります。

* 事業部門、子会社、海外拠点、などの組織の単位でグループを作ることが一般的（マイクロソフト社も自社運用環境はこのような利用をしている）

* あまり階層を深くしすぎない (2-3層程度に留める) ほうが管理は容易

* テナントルート管理グループはすべてのサブスクリプションに影響するので、全社共通ルールのみを慎重に運用

下記は参考例の一つです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/ae836cc1-8a0d-9525-7ba5-352f41694ed1.png)

# リソースグループによるサブスクリプション内のリソースの管理

Azure の **リソースグループ (Resource Group)** は、サブスクリプション内でリソースを束ねるフォルダーとして機能します。すべてのリソースは必ずひとつのリソースグループに入ります。通常、**ライフサイクルが同じリソース群を同じリソースグループ内で管理**します。

https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/management/manage-resource-groups-portal

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/51013b79-e8f9-b8bc-9397-8eb791cea793.png)

**サブスクリプションと違い、リソースグループが異なることによる制限はほとんどありません。** そのため、制約に依るというよりはアクセス権設定やポリシーの割り当て、コスト管理や削除のオペレーションなど、組織の運用に適するようにリソースグループは設計・運用されます。

# Azure におけるガバナンス - アクセス制御とポリシー

管理グループ、サブスクリプション、リソースグループの階層構造を正しく構成できると、Azure におけるガバナンスの設計が、かなり見通し良くなります。

次にそのガバナンスを担う機能である、**アクセス制御 (IAM)** と**ポリシー (Azure Policy)** を見ていきます。

## Azure のアクセス制御 (IAM)

Azure のアクセス制御 (IAM) は **ロールベースアクセス制御 (RBAC)** になっており、特定のロールをユーザーやグループに対して割り当てます。その割り当てのスコープとして、管理グループ、サブスクリプション、リソースグループ、リソースを選んで適用します。

**割り当てのスコープは上位から下位に継承**されるため、たとえば特定のサブスクリプションをスコープとして割り当てられたロールはそのサブスクリプション内の全リソースグループ・全リソースにも適用されます。

https://learn.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-portal?tabs=delegate-condition

### Azure のロール - 組み込みロールとカスタムロール

Azure では **組み込みロール** として様々なロールが定義されています。大半の業務はこの組み込みロールを割り当てることで実現できます。

https://learn.microsoft.com/ja-jp/azure/role-based-access-control/built-in-roles

もしこの組み込みロールではロールとして不十分な場合、**カスタムロール**を利用することができます。カスタムロールの作成については下記をご参照ください。ただしカスタムロールを作りすぎるとそのメンテナンスや管理が困難になるため、**カスタムロールの利用は最小限にとどめることが推奨**です。

https://learn.microsoft.com/ja-jp/azure/role-based-access-control/custom-roles

## Azure Policy

アクセス権設定と並んでガバナンスで重要になるのが **Azure Policy** です。Azure Policy はリソースの設定を強制したり、特定のリソースの作成を禁止したり、タグ付けを自動化したりすることができます。

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

すべてを Azure Policy でがちがちに固めて運用するというのは現実的ではないことも多いですが、たとえばセキュリティ機能の有効化や特定のタグの強制、一部リソースの作成禁止など、あらかじめ制御したい事項がある場合は Azure Policy を活用できます。

## (補足) 命名規則

ガバナンスを考えるに際し、統合的なリソースの管理のために事前に命名規則を定めておくことがおすすめです。Azure の公式ドキュメントでは、命名規則についてのガイダンスも出しています。

https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming

# サブスクリプションの管理の Next Step- Landing Zone と標準ガイドライン

本記事では管理グループやリソースグループといった最も基本的なサブスクリプションやリソース管理の仕組みをご紹介しました。ですが、実際に Azure をガバナンスやセキュリティを担保しながら利用するには、より多くの考慮点が存在します。

ここではより発展的な Azure の利用の道しるべとなる２つのリソースをご紹介します。

## 1. Landing Zone (ランディングゾーン)

[**Landing Zone (ランディングゾーン)**]((https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/ready/landing-zone/)) とは、組織がクラウドを利用する際にガバナンスとセキュリティを担保するために共通の設計原則に基づき整備され、共通的に利用されるターゲットアーキテクチャを指します。

Azure の [**Cloud Adoption Framework (CAF, クラウド導入フレームワーク)**](https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/overview) では、以下9カテゴリを考慮したランディングゾーンを整備することを推奨しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/94e5ddda-9565-b039-6d60-29d9b820e567.png)

また、下記に Landing Zone なしとありの場合の比較を図式化しています。この図は少し極端ではありますが、Landing Zone を用意し共通のアーキテクチャを採用することで、組織としてガバナンスをもって Azure のサブスクリプションやリソースの管理を行えることがわかるかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/8e629616-f551-c82d-50a8-71e046122a1e.png)

特定のプロジェクトの開発・検証利用を超え、Azure を組織として大規模に利用する際は、Landing Zone を組織内で整備したうえで利用拡大していくことが望ましいです。

また Landing Zone についてはマイクロソフト社のウェビナーでも学ぶことができます。

https://mktoevents.com/Microsoft+Event/408256/157-GQE-382

このウェビナーでも紹介されているランディングゾーンの設計・構築ガイドはこちらで展開されていらっしゃいます。

https://github.com/nakamacchi/AzureCAF.LandingZones.Demo

## 2. 標準化ガイドライン

Landing Zone と並んで、Azure のアーキテクチャ設計のガイドになるのが、[**Azure 標準化ガイドライン**](https://github.com/Azure/Azure-standardization-guideline)です。こちらは日本マイクロソフトのエンジニアがまとめた、ベストプラクティスベースの Azure の設計指針のテンプレートになっています。

https://github.com/Azure/Azure-standardization-guideline

章立てされた各項目について、**基礎知識**、**検討のポイント**、**ガイドラインサンプル**がまとまっています。特に組織内で Azure 利用のガイドラインを策定したい場合、こちらをご参照いただけると良いかと思います。

**リリースノート**

https://www.microsoft.com/ja-jp/events/azurebase/blog/azure-standardization-guideline/

# 最後に

Azure の正しい始め方と題して、課金アカウントやサブスクリプション、Microsoft Entra ID のアーキテクチャ構成やそれぞれの仕組みについて、記事４本を通してご紹介してきました。(**「正しい」と銘打っていますがあくまで私見にすぎない点ご了承ください。**)

Azure Open AI Service をはじめ、Microsoft Azure が話題になることが増える中で、Azure をよりガバナンスやセキュリティを担保してご活用いただく一助となれば幸いです。

＊本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。