この記事はNTTドコモソリューションズ Advent Calendar 2025 11 日目の記事です。
はじめに
NTTドコモソリューションズの東構です。
普段は社内向けに Microsoft Azure (以下、Azure)の支援を実施しています。
本記事では、Azure Lighthouse を活用し、管理テナントから顧客テナントのサブスクリプションに対して DeployIfNotExists(以下、DINE)のAzur Policy(以下、ポリシー)を適用する方法を紹介します。
DINE ポリシーや modify 効果を持つポリシーは、修復タスクを実行するために顧客テナント側で マネージド ID を作成する必要があります。そのため、Azure Lighthouse で委任を設定する際には、ユーザーアクセス管理者ロールを付与することが前提となります。
しかし記事執筆時点(2025/12/11)では、このロールについてAzure Portal から委任設定はできません。さらに、委任先からの DINE ポリシーの割り当てはマネージド ID に Azure RBAC(以下、RBAC)を付与する必要があり RBAC API 経由で実施する必要があるため、手順がやや複雑です。
そこで記事にてまとめて紹介することにしました。
Azure Lighthouse の記事自体少ないので、Azure Lighthouse を使用を検討されている方の参考になれば幸いです。
この記事で紹介すること
- Azure Lighthouse の委任方法
- Azure Portal からの通常委任
- ユーザーアクセス管理者ロールの条件付き委任
- 委任されたテナントから顧客テナントへの DINE ポリシーの適用(API)
- ポリシーの割り当て
- マネージド ID へのロール割り当て
内容は、以下の公開情報を参考に作成しています。
- Azure Lighthouse ドキュメント | Microsoft Learn
- 委任されたサブスクリプションに Azure Policy を大規模にデプロイする | Microsoft Learn
- Deploy a policy that can be remediated within a delegated subscription | Microsoft Learn
- Azure Lighthouse への顧客のオンボード | Microsoft Learn
- Azure 組み込みロール| Microsoft Learn
- Policy Assignments - Create | Microsoft Learn
- Policy Assignments - Update - REST API (Azure Policy) | Microsoft Learn
前提知識
Azure Lighthouse の基礎
Azure Lighthouse は、サービスプロバイダーが複数の顧客テナント下のサブスクリプションを管理するためのクロステナント管理サービスです。
Azure Lighthouse では、顧客テナントの特定のサブスクリプションまたはリソースグループを管理テナントの指定したユーザーやグループ等に 委任 します。これにより、管理テナントから顧客テナントのリソースを直接管理できます。:
- 委任: 顧客テナントのサブスクリプションやリソースグループを、管理テナントのユーザーやグループに委任
- 認可: Azure RBAC を使用して、委任対象に対して認可をする
Azure Policy の基礎
Azure Policy は、Azure リソースに対してガバナンスルールを適用するサービスです。主に以下の効果(Effect)があります。今回は DINE を利用します。:
- Audit: ルール違反を検出して記録
- Deny: ルール違反のリソース作成を拒否
- DeployIfNotExists (DINE): 条件を満たさない場合、自動的にリソースをデプロイ
- Modify: リソースのプロパティを変更
マネージド ID の役割
DINE ポリシーは、リソースをデプロイするために マネージド ID を使用します。このマネージド ID には、デプロイ対象のリソースに対する適切な権限が必要です。
実装手順
前提
-
管理テナント: 管理用の Azure テナント(サービスプロバイダー側)
-
顧客テナント: 管理対象となる顧客の Azure テナント
-
顧客テナントから管理テナントのユーザーに委任するRBAC:
以下顧客テナントのサブスクリプションに対して付与します。- リソース ポリシーの共同作成者:ポリシーの作成およびポリシーの適用後、修復タスクを実行する際に必要
- マネージド ID 共同作成者:deployIfNotExists ポリシー割り当て時、マネージド ID を作成するため必要
- セキュリティ管理者:Microsoft Defender for Cloudの設定を行うために必要(※)Microsoft Defender for Cloudを使用しない場合不要
- ユーザーアクセス管理者:作成したマネージド ID にロールを付与するために必要
-
顧客テナント側で委任を実行するユーザーが必要な権限:
以下のアクセス許可 (所有者など) のRBACを持つ、顧客のテナント内の非ゲストアカウント:
Microsoft.Authorization/roleAssignments/write
Microsoft.Authorization/roleAssignments/delete
Microsoft.Authorization/roleAssignments/read
1 Azure Lighthouse の委任設定
委任テンプレートの準備
委任用のテンプレートのひな型をポータルで作成し、ポータルでは設定できないユーザーアクセス管理者ロールの設定を追記します。
管理テナント作業
1 Azure Lighthouse画面移動
Azure Portal からAzure Lighthouse を検索「作業の開始」⇒「顧客の管理」⇒「概要」から「ARMテンプレートの作成」を選択

※マイ カスタマー を検索
「顧客の管理」⇒「概要」から「ARMテンプレートの作成」を選択でも可能
2 ARM テンプレートオファーの作成
次の設定を行い、「+認可の追加」 押下
- 名前:ARMテンプレートの名前
- 委任されたスコープ:サブスクリプション
3 認可の追加
次の設定を行い、「追加」を押下
- プリンシパルの種類:ユーザー
- 名前:認可を追加するユーザーを選択
- プリンシパルID:名前を入力すると自動入力される
- ロール:割り当てたいロールを選択
- ここではリソース ポリシーの共同作成者 割り当て
- アクセスの種類:自由選択 ここでは 永続的 を選択
4 3の繰り返し
3の作業をユーザーアクセス管理者以外のRBAC分実施
最終的に以下の3つのロールが追加されていること
- リソース ポリシーの共同作成者
- マネージド ID 共同作成者
- セキュリティ管理者
5 テンプレートのダウンロード
設定内容を確認し 「テンプレートの表示」 を押下
「↓ダウンロード」 を押下し、ARMテンプレートをダウンロード

template.json という名前で保存されるため任意の名前に変更
6 ユーザーアクセス管理者の内容を追記
※ユーザーアクセス管理者を認可する必要がなければこの手順は不要です。
ポータルで作成したARMテンプレートを編集
"variables" の "authorizations"内に他の認可情報に追記する形で以下を追記し保存
{
"principalId": "割り当て対象のユーザーの対象のプリンシパルId",
"principalIdDisplayName": "割り当て対象のユーザーの顧客テナントでの表示名",
"roleDefinitionId": "18d7d88d-d35e-4fb5-a5c3-7773c20a72d9",
"delegatedRoleDefinitionIds": [
"fb1c8493-542b-48eb-b624-b4c8fea62acd"
]
}
delegatedRoleDefinitionIds とは
ユーザー アクセス管理者ロールで割り当てする対象を制限するための項目
項目の解説
| 項目 | 意味 |
|---|---|
principalId |
誰に権限を付与するか |
principalIdDisplayName |
表示名 |
roleDefinitionId |
何の権限を付与するか |
delegatedRoleDefinitionIds |
制限(これらだけ割り当て可能) |
ロール ID
-
18d7d88d-d35e-4fb5-a5c3-7773c20a72d9: ユーザー アクセス管理者 -
fb1c8493-542b-48eb-b624-b4c8fea62acd: セキュリティ管理者
委任の実行
顧客テナント作業
1 Azure Lighthouse画面移動
Azure Portal からAzure Lighthouse を検索
「サービスプロバイダ-オファーの表示」⇒「サービスプロバイダ-オファーの表示」を選択
2 テンプレートのアップロード
委任テンプレートの準備で作成したテンプレートを追加し、「アップロード」を押下

次の設定を行い、「確認と作成」を押下
3 デプロイ確認
先ほどデプロイした内容が確認できること

※対象の名前を押下することでよりロールの割り当てなど詳細な委任状況の確認が可能
統制テナント作業
1 Azure Lighthouse画面移動
Azure Portal からAzure Lighthouse を検索「作業の開始」⇒「顧客の管理」⇒「顧客」を選択
2 デプロイ確認
ここで「どの顧客の委任されたリソースもまだ管理していません。」と表示される場合、サブスクリプションのフィルタがかかっている可能性が高いため、次の作業を実施(3,4)

3 サブスクリプションフィルターの設定
既定のサブスクリプションフィルターを設定
※ここでは一旦すべてのディレクトリとすべてのサブスクリプションを選択しているが、委任対象のサブスクリプションが選択できていれば問題ありません。

4 再度デプロイ確認
2 デプロイ確認の内容を実施
※表示には若干のタイムラグがあるため注意
2 DINE ポリシーの割り当て
委任されたサブスクリプション内で DINE ポリシーの割り当てを作成する場合、マネージド ID にRBAC を付与する必要があることから、Azure Portal ではなく API を通じて行う必要があります。
ここではポリシーの割り当てと、そのポリシーで利用するマネージドIDをAPIで作成する手順を紹介します。
※Audit や Deny 効果を持つポリシーであればポータルからの割り当てが可能です。
ポリシーの割り当て
委任を受けたユーザーにサインインした状態で以下の作業を実施
1 変数設定
# 変数設定
$ CUSTOMER_SUB="委任先サブスクリプションID"
$ POLICY_NAME="これから作成するポリシー割り当ての名前"
$POLICY_DEF_ID="ポリシーの固有ID"
#ここでは「Microsoft Defender for Cloud を有効にする」ポリシーの固有ID /providers/Microsoft.Authorization/policyDefinitions/ac076320-ddcf-4066-b451-6154267e8ad2 を使用
2 ポリシー割り当ておよびマネージドID作成
次のコマンドを実施する
エラーなく設定値が返ってきたら成功
# ポリシー割り当ておよびマネージドID作成
$ az rest --method put \
--url "https://management.azure.com/subscriptions/$CUSTOMER_SUB/providers/Microsoft.Authorization/policyAssignments/$POLICY_NAME?api-version=2023-04-01" \
--body "{'properties':{'displayName':'ポリシーの表示名','description':'ポリシーの説明','metadata':バージョンやカテゴリの情報,'policyDefinitionId':'$POLICY_DEF_ID','parameters':{},'enforcementMode':'Default'},'identity':{'type':'SystemAssigned'},'location':'japaneast'}" \
--output json | tee policy-response.json
#後ほど設定値を利用しやすいようファイルに保存している
# 実施例
$ az rest --method put \
--url "https://management.azure.com/subscriptions/$CUSTOMER_SUB/providers/Microsoft.Authorization/policyAssignments/$POLICY_NAME?api-version=2023-04-01" \
--body "{'properties':{'displayName':'Enable Microsoft Defender for Cloud on your subscription','description':'Automatically enables Microsoft Defender for Cloud (free tier) on this subscription to protect virtual machines.','metadata':{'version':'1.0.1','category':'Security Center'},'policyDefinitionId':'$POLICY_DEF_ID','parameters':{},'enforcementMode':'Default'},'identity':{'type':'SystemAssigned'},'location':'japaneast'}" \
--output json | tee policy-response.json
項目の解説
| 項目 | 意味 |
|---|---|
displayName |
ポリシーの表示名(Azure Portal で見える名前) |
description |
ポリシーの説明 |
metadata |
バージョンやカテゴリの情報 |
policyDefinitionId |
どのポリシー定義を使うか(1 変数設定で設定した値) |
parameters |
ポリシーのパラメータ(今回は空) |
enforcementMode |
Default = 有効、DoNotEnforce = 監視のみ |
identity |
マネージドIDを作成 |
type: SystemAssigned |
システムが自動で作成・管理するID |
location |
マネージドIDを作成するリージョン |
マネージド ID へのロール割り当て
マネージド ID に必要な権限を付与します。ここではマネージド ID に セキュリティ管理者ロールを付与します。
次のコマンドを実施する
エラーなく設定値が返ってきたら成功
# マネージド ID の Principal ID取得
$ PRINCIPAL_ID=$(jq -r '.identity.principalId' policy-response.json)
# ロール割り当てリソースには一意なIDが必要なためGUIDを作成
$ RBAC_GUID=$(uuidgen | tr '[:upper:]' '[:lower:]')
# ロール割り当て
$ az rest --method put \
--url "https://management.azure.com/subscriptions/$CUSTOMER_SUB/providers/Microsoft.Authorization/roleAssignments/$RBAC_GUID?api-version=2022-04-01" \
--body "{'properties':{'roleDefinitionId':'割り当てたいロールID','principalId':'$PRINCIPAL_ID','principalType':'付与対象の種類','delegatedManagedIdentityResourceId':'/subscriptions/$CUSTOMER_SUB/providers/Microsoft.Authorization/policyAssignments/$POLICY_NAME'}}" \
--output json
# 実施例
$ az rest --method put \
--url "https://management.azure.com/subscriptions/$CUSTOMER_SUB/providers/Microsoft.Authorization/roleAssignments/$RBAC_GUID?api-version=2022-04-01" \
--body "{'properties':{'roleDefinitionId':'/subscriptions/$CUSTOMER_SUB/providers/Microsoft.Authorization/roleDefinitions/fb1c8493-542b-48eb-b624-b4c8fea62acd','principalId':'$PRINCIPAL_ID','principalType':'ServicePrincipal','delegatedManagedIdentityResourceId':'/subscriptions/$CUSTOMER_SUB/providers/Microsoft.Authorization/policyAssignments/$POLICY_NAME'}}" \
--output json
項目の解説
| 項目 | 意味 |
|---|---|
roleDefinitionId |
どの権限を付与するか |
principalId |
誰に付与するか |
principalType |
付与対象の種類 |
delegatedManagedIdentityResourceId |
Lighthouse 委任の証明 |
delegatedManagedIdentityResourceId
- Azure Lighthouse を使って、別テナントのマネージドIDにロールを割り当てる際に必須
動作確認
1 ポリシーの適用状態を確認
Azure Portal からポリシー を検索「割り当て」を選択
ポリシーが割り当てられていることを確認

2 修復タスク実施
Azure Portal からポリシー を検索「修復」⇒
「修復するポリシー」を選択
エラーなく終了すること

※今回は修復する必要のあるリソースが0だったため0からの0になっている
作業メモ
今回の作業を実施する上で確認した事項をメモとして記載します。
-
ポリシー割り当ておよびマネージドID作成と マネージド ID へのロール割り当てはそれぞれ異なる操作であるため、個別に API 実行する必要がある。
-
Azure Lighthouse の委任により割り当てられたロールを参照する場合は、Azure Portal からAzure Lighthouse を検索「作業の開始」⇒「顧客の管理」⇒「委任」から対象の委任を押下し、「ロールの割り当て」にて確認することが推奨されている。

-
登録したポリシーについて、Azure Portal からは編集作業ができない。そのため REST API を使用する必要がある。なお、REST API で更新できるプロパティは限定されているため、更新できないプロパティを変える必要があれば割り当てを再作成することになる。
Policy Assignments - Update - REST API (Azure Policy) | Microsoft Learn
感想
Azure Lighthouse を使用すると一つのテナントで顧客テナントのリソースを直接管理できるのは楽でいいなと思いました。一方 Azure Lighthouse について Azure Portal から実行できない操作は、本記事記載時点では公開情報として網羅された記載がなく、不明点が出た際、都度問合せを行う必要があるところは難点だと感じました。
以上、Azure Lighthouse で他テナントにポリシーを展開するまでの実践ガイドでした。
実際の運用では、組織のセキュリティポリシーやコンプライアンス要件に応じてカスタマイズしてください。
記載されている会社名、製品名、サービス名は、各社の商標または登録商標です。














