はじめに
Azureの権限設計を考える上で、頻出するサービスプリンシパルとマネージドIDについて、調べた事項のメモです。 ※調べながら書いているのに、誤っている点などあればご指摘いただけると嬉しいです。
前提 :AAD空間とサブスクリプション空間
Azureには2つのリソース空間が存在します。
- AAD空間
- サブスクリプション空間 /
AAD空間
1つ目は、 Azure Active Directory (以下、AAD)により管理されるリソース空間です。このリソース空間には、Azure ADテナントおよびその配下のリソースが収容されます。
サブスクリプション空間
2つ目は、 Azure Resource Manager (ARM)により管理されるリソース空間です。このリソース空間には、管理グループ - サブスクリプション - リソースグループ - リソース
という階層構造が存在し、VMやVNetなどAzureが提供する各サービスのリソースが収容されます。
Azureのハイレベルな認証認可のモデル
Azureの認証認可ですが、概ね以下のような設計となっています。 ※理解を容易にするため、AAD空間やサブスクリプション空間内部の詳細な構造は割愛しています。
- Azure AD空間上に セキュリティプシンパル が存在します。セキュリティプリンシパル は一意の識別子(ID)とPW(証明書)を持つアカウントのような存在であり、Azureの利用に際してはセキュリティプリンシパルのID・PW(証明書)を使い、認証が行われます。(デフォルトでは2要素認証)
- Resource Managerにより管理するサブスクリプション空間上には、ロールベースのアクセス制御をするためのロールが用意されており、これを Azure RBAC と呼びます。Azure RBACで定義のロールはセキュリティプシンパルにアタッチすることができ、認証に成功したアクターが個々のAzureリソースにアクセスする際のアクセス権の判定に使われます。
サブスクリプション空間 : ロールベースのアクセス制御(RBAC)による認可
Azureのロールベースアクセス制御(RBAC) では、以下の2要素で認可の権限を割り当てます。
Azure RBAC におけるロール
- 各リソースへのアクセス権限のコレクションをロール と呼びます
Azure には以下の2種のロールが存在します
- 組み込みロール
- カスタムロール
代表的な4種の組み込みロール
Azure RBACにおけるロールの適用スコープ
AAD空間 : セキュリティプリンシパルの類型
前述の通り、AAD空間とはAzure Active Directory (以下、AAD)により管理されるリソース空間です。AAD空間にはセキュリティプリンシパルが格納されます。セキュリティプリンシパルは認証IDとPWを持ちユーザーアカウントとして機能するエンティティであり、4つのサブタイプが存在します。マネージドIDについては、更に2種のサブタイプに別れます。
それぞれのセキュリティプリンシパルが想定する利用者
セキュリティプリンシパルの4つのサブタイプが想定するユースケースを以下に整理します。
- ユーザー と グループ は、人間のアクターが利用することを想定しています
- サービスプリンパル と マネージドID は、人間以外のアクター利用することを想定しています。マネージドIDはAzure上に存在のリソースのみが使用するプリンシパルであり、Azure外のリソースは使用する事ができません。
サービスプリンシパルとアプリケーションオブジェクト
前項で「サービスプリンシパルは人間ではないシステムによる利用を想定されている」と説明しました。このケースにおいては、システムによるアクセスに際し、間に アプリケーションオブジェクト というAADリソースが入る形のアクセス経路となります。アプリケーションオブジェクト は「Azureを利用するアプリケーションを表すオブジェクト」であり、サービスプリンシパルとの関係性は以下となります。
- サービスプリンシパル:AAD認証に際し使われる、ユーザーアカウント(認証ID + 認証PW)
- アプリケーションオブジェクト:認証を実行するアクター(システム)