AzureサブスクリプションとかアカウントとかAzure ADのテナントとか (2)

## はじめに

[前回の記事](https://qiita.com/whata/items/628e3a80e5a5c8fe7da9) では、Azureサブスクリプション、Azure AD、アカウント周りのそれぞれの関係性についてまとめてみた。今回はそれらの要素と、[エンタープライズ契約(EA契約)] (https://azure.microsoft.com/ja-jp/pricing/purchase-options/enterprise-agreement/) 等を行った時に利用できるエンタープライズポータル(EAポータル)を使った管理の構造との関係性についての理解を整理する。

## Enterprise Azureの管理の構造

### 階層構造とリレーション
EA契約によりEAポータルへのアクセス権が付与され、EAポータル上で組織によるAzure使用量/支出管理ができるようになる。EA加入契約の中で、全体、部門別、プロジェクト別、ユーザー別等のくくりでのコスト管理ができるようになっており、そういった管理を行うことができるようにするための管理の階層構造を作ることができるようになっている。下の図がその構成のイメージである。
<img src="https://qiita-image-store.s3.amazonaws.com/0/144789/e02ad11a-b013-7aab-2b9e-a2a42e973fd3.png">

### ロール

それぞれの箇所に管理するための以下のロールが存在する。

|位置|ロール|説明|
|:---|:---|:---|
|EA加入契約|エンタープライズ管理者(EA)|AzureのEA加入契約の管理者そのもの。ほかのエンタープライズ管理者や部署管理者の追加、部署の追加、EA加入契約に対するアカウントの追加、関連付けを行う。またすべてのアカウント、サブスクリプションに関する使用状況および課金データの表示、EA加入契約に関連付けられた年額コミットメントの残高確認等を行うことができる。|
|部署|部署管理者(DA)|部署名やコストセンターの編集、部署管理者の管理、EA加入契約と部署に対するアカウントの追加、部署からのアカウント削除、おおよび部署のコストの表示(許可されている場合)。|
|アカウント|アカウント所有者(AO)|自分のアカウントへのサブスクリプションの追加、個々のサブスクリプションのサービス管理者や共同管理者の更新、自分のアカウントの利用状況データ、コストの表示(許可されている場合)。|
|サブスクリプション|サービス管理者(SA)|アカウント所有者からアサインされて、サブスクリプション内のリソースの管理を行う。|

AzureにおけるEAのロール
https://docs.microsoft.com/ja-jp/azure/billing/billing-understand-ea-roles

### Azureエンタープライズ スキャフォールディング

なんでこんな仕組みになっているのかというところだが、企業がパブリッククラウドを採用し、活用していくうえで、企業としてのガバナンスのニーズとパブリッククラウドの俊敏性や柔軟性のニーズとのバランスを取り、組織が安全な方法でAzure環境を実装及び管理する際のフレームワークとして、Azureのドキュメントに (Azure エンタープライズ スキャフォールディング - 規範的なサブスクリプション ガバナンス)[https://docs.microsoft.com/ja-jp/azure/architecture/cloud-adoption/appendix/azure-scaffold] というのが紹介されているので、こちらを読むとわかりやすい。ここを理解して、まずは企業でのパブリッククラウド利用の足場固めを行うことが重要である。単純なフラットな仕組みでは企業の組織の構造なぞらえることができないため、こういったガバナンスニーズに対応するのには限界があるかもしれない。

スキャフォールディングのコンポーネント
<img src="https://qiita-image-store.s3.amazonaws.com/0/144789/aad0b581-d20c-b75c-1598-761c1054239c.png">
From https://docs.microsoft.com/ja-jp/azure/architecture/cloud-adoption/appendix/azure-scaffold

上記URLの中で階層の定義のパターンとして挙げられているのが以下の3つである。この中で部署パターンが使われるのが多いとのこと。企業のコストモデルや統制範囲をモデル化するときの構造がフィットしやすいことが理由とのこと。
<img src="https://qiita-image-store.s3.amazonaws.com/0/144789/385af119-ac4c-754c-f242-065f4f5812ee.png">

ここからさらにさまざまなコンポーネントに関しての考え方が書かれているが、記事の本題からずれていくので、ここまでとする。

## Azure ADとの関係

前回の記事でAzureサブスクリプションは必ずどこかのアカウントに紐づいていて、アカウントはどこかのAzure ADのテナントに所属していると書いたが、これはEA契約の場合でも同じである。
<img src="https://qiita-image-store.s3.amazonaws.com/0/144789/b78353e9-390a-a399-8d74-b1b1b144465e.png" width=50%>
ちょっとややこしいけど、つまり、Azure ADはアカウント・サブスクリプションと関連があるのであって、EA加入契約やその中の部署はAzure ADは直接的な関係がない(EAポータルの認証は結局Azure ADだったりはするけど)。なので、実際に下図のような構成を組むことができる。
<img src="https://qiita-image-store.s3.amazonaws.com/0/144789/307fb809-b61c-8aa9-9a40-eb94f34b8107.png">

## 同一組織、同一のAzure ADテナントに複数のAzure EA加入契約がある場合

アカウントやサブスクリプションがAzure ADと関連を持っており、EA加入契約とは直接的な関係があるわけではないので、こういう場合も特に問題はない。下の図のように、EA加入契約AとEA加入契約Bとの2つの支払い単位ができるが、アカウント配下の構成には特に影響がない。
<img src="https://qiita-image-store.s3.amazonaws.com/0/144789/b342604b-a083-0e52-0393-eae0e5279d1a.png">
もっと言うとAzure ADテナントが単一でなくても良くて、下図のようにテナントが別々になっていても良い。
<img src="https://qiita-image-store.s3.amazonaws.com/0/144789/aa6cb374-22fb-0f3b-582e-88d466f72c33.png">

## サブスクリプションと課金

課金自体は各サブスクリプション単位で行われるが、EA加入契約はこの契約に一本化された支払いとなる。EA加入契約に紐づけられたアカウントないしはサブスクリプションで発生するコストはEA加入契約に関連付けられた年額コミットメントからの消費となる。この場合、上の図のようにAzure ADのテナントが別のものであっても、EA加入契約に紐づけることによって、支払いおよびコストの管理を一本化することができる。ここでAzure ADとAzureの支払いは無関係であるといって差し支えないはず。
また、サブスクリプションは必ずどこかのアカウントに紐づいている。EA加入契約におけるアカウント所有者(AO)がこれにあたるが、アカウント所有者(AO)が持っているサブスクリプションの利用分がEA加入契約に関連づけられている年額コミットメントから消費される仕組みになっている。ちなみにサービス管理者(SA)はこの課金とは無関係で、このロールは単にアサインされたサブスクリプションのリソースを管理するだけのものであり、サブスクリプションを所有しているわけではない。この辺ななんとなく間違いやすいところなので注意が必要。

## サブスクリプションの移動
サブスクリプションを別のユーザーに転送し、アカウント管理者を変更してサブスクリプションの課金所有権を譲渡することができる。この時にRBACのすべてのロール割り当てが解除されるので注意が必要。
https://docs.microsoft.com/ja-jp/azure/billing/billing-subscription-transfer

## まとめ
2つの記事にわたってAzureサブスクリプション、アカウント、Azure AD、エンタープライズ加入契約のそれぞれの関係性をまとめてみた。結構複雑な構造になっていると思うけど、クラウドのメリット享受と企業のガバナンスに対処したバランスの取れたAzure利用環境を構築するためのフレームワークとして必要になってくるものなんだと思う。今回のこの記事を書くにあたって [エンタープライズスキャフォールディングのガイド](https://docs.microsoft.com/ja-jp/azure/architecture/cloud-adoption/appendix/azure-scaffold) が理解のための助けになった。