5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure Lighthouse で他テナントにポリシーを展開するまでの実践ガイド

Last updated at Posted at 2025-12-10

この記事は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 の基礎

Azure Lighthouse は、サービスプロバイダーが複数の顧客テナント下のサブスクリプションを管理するためのクロステナント管理サービスです。
Azure Lighthouse では、顧客テナントの特定のサブスクリプションまたはリソースグループを管理テナントの指定したユーザーやグループ等に 委任 します。これにより、管理テナントから顧客テナントのリソースを直接管理できます。:

  • 委任: 顧客テナントのサブスクリプションやリソースグループを、管理テナントのユーザーやグループに委任
  • 認可: Azure RBAC を使用して、委任対象に対して認可をする

Azure Policy の基礎

Azure Policy は、Azure リソースに対してガバナンスルールを適用するサービスです。主に以下の効果(Effect)があります。今回は DINE を利用します。:

  • Audit: ルール違反を検出して記録
  • Deny: ルール違反のリソース作成を拒否
  • DeployIfNotExists (DINE): 条件を満たさない場合、自動的にリソースをデプロイ
  • Modify: リソースのプロパティを変更

マネージド ID の役割

DINE ポリシーは、リソースをデプロイするために マネージド ID を使用します。このマネージド ID には、デプロイ対象のリソースに対する適切な権限が必要です。

実装手順

前提

  • 管理テナント: 管理用の Azure テナント(サービスプロバイダー側)

  • 顧客テナント: 管理対象となる顧客の Azure テナント

  • 適用するポリシー: サブスクリプションで Microsoft Defender for Cloud を有効にする

  • 顧客テナントから管理テナントのユーザーに委任するRBAC:
    以下顧客テナントのサブスクリプションに対して付与します。

    • リソース ポリシーの共同作成者:ポリシーの作成およびポリシーの適用後、修復タスクを実行する際に必要
    • マネージド ID 共同作成者:deployIfNotExists ポリシー割り当て時、マネージド ID を作成するため必要
    • セキュリティ管理者:Microsoft Defender for Cloudの設定を行うために必要(※)Microsoft Defender for Cloudを使用しない場合不要
    • ユーザーアクセス管理者:作成したマネージド ID にロールを付与するために必要
      • 対象:セキュリティ管理者
        ここではマネージド ID に割り当てるロールも指定する必要があります。
        今回使用するポリシーでは、作成するマネージドIDにセキュリティ管理者ロールを付与する必要があるため、セキュリティ管理者を指定します。
        なおポリシーごとでマネージドIDに付与する必要があるロールは異なるため適宜確認してください。
        image.png
        出典:Microsoft Corporation, Microsoft Azure (筆者利用テナント/スクリーンショット取得日:2025年12月05日)以下スクリーンショットも同様
  • 顧客テナント側で委任を実行するユーザーが必要な権限:
    以下のアクセス許可 (所有者など) のRBACを持つ、顧客のテナント内の非ゲストアカウント:
    Microsoft.Authorization/roleAssignments/write
    Microsoft.Authorization/roleAssignments/delete
    Microsoft.Authorization/roleAssignments/read

1 Azure Lighthouse の委任設定

委任テンプレートの準備

委任用のテンプレートのひな型をポータルで作成し、ポータルでは設定できないユーザーアクセス管理者ロールの設定を追記します。

管理テナント作業

1 Azure Lighthouse画面移動

Azure Portal からAzure Lighthouse を検索「作業の開始」⇒「顧客の管理」⇒「概要」から「ARMテンプレートの作成」を選択
image.png

image.png

※マイ カスタマー を検索
「顧客の管理」⇒「概要」から「ARMテンプレートの作成」を選択でも可能

2 ARM テンプレートオファーの作成

次の設定を行い、「+認可の追加」 押下

  • 名前:ARMテンプレートの名前
  • 委任されたスコープ:サブスクリプション

image.png

3 認可の追加

次の設定を行い、「追加」を押下

  • プリンシパルの種類:ユーザー
  • 名前:認可を追加するユーザーを選択
  • プリンシパルID:名前を入力すると自動入力される
  • ロール:割り当てたいロールを選択
  • ここではリソース ポリシーの共同作成者 割り当て
  • アクセスの種類:自由選択 ここでは 永続的 を選択
    image.png
4 3の繰り返し

3の作業をユーザーアクセス管理者以外のRBAC分実施
最終的に以下の3つのロールが追加されていること

  • リソース ポリシーの共同作成者
  • マネージド ID 共同作成者
  • セキュリティ管理者

image.png

5 テンプレートのダウンロード

設定内容を確認し 「テンプレートの表示」 を押下
「↓ダウンロード」 を押下し、ARMテンプレートをダウンロード
image.png

image.png

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

委任の実行

顧客テナント作業

1 Azure Lighthouse画面移動

Azure Portal からAzure Lighthouse を検索
「サービスプロバイダ-オファーの表示」⇒「サービスプロバイダ-オファーの表示」を選択

image.png

「+オファーの追加」⇒「テンプレート経由で追加」 を選択
image.png

2 テンプレートのアップロード

委任テンプレートの準備で作成したテンプレートを追加し、「アップロード」を押下
image.png

次の設定を行い、「確認と作成」を押下

  • サブスクリプション:委任するサブスクリプションを選択
  • リージョン:デプロイするリージョンを選択
    image.png
3 デプロイ確認

先ほどデプロイした内容が確認できること
image.png
※対象の名前を押下することでよりロールの割り当てなど詳細な委任状況の確認が可能

統制テナント作業

1 Azure Lighthouse画面移動

Azure Portal からAzure Lighthouse を検索「作業の開始」⇒「顧客の管理」⇒「顧客」を選択

2 デプロイ確認

先ほどデプロイ設定した委任が確認できること
image.png

ここで「どの顧客の委任されたリソースもまだ管理していません。」と表示される場合、サブスクリプションのフィルタがかかっている可能性が高いため、次の作業を実施(3,4)
image.png

3 サブスクリプションフィルターの設定

「グローバルサブスクリプションフィルター」を選択
image.png

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

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 からポリシー を検索「割り当て」を選択
ポリシーが割り当てられていることを確認
image.png

2 修復タスク実施

Azure Portal からポリシー を検索「修復」⇒
「修復するポリシー」を選択

image.png

「修復」を押下
image.png

エラーなく終了すること
image.png
※今回は修復する必要のあるリソースが0だったため0からの0になっている

作業メモ

今回の作業を実施する上で確認した事項をメモとして記載します。

  • ポリシー割り当ておよびマネージドID作成マネージド ID へのロール割り当てはそれぞれ異なる操作であるため、個別に API 実行する必要がある。

  • Azure Lighthouse の委任により割り当てられたロールを参照する場合は、Azure Portal からAzure Lighthouse を検索「作業の開始」⇒「顧客の管理」⇒「委任」から対象の委任を押下し、「ロールの割り当て」にて確認することが推奨されている。
    image.png

    • 通常の Azure RBAC のロール割り当てからも確認可能だが、特に今回のように特殊な割り当てをしたユーザー アクセス管理者について条件を確認したところうまく表示されないことを確認している。image.png
      image.png
  • 登録したポリシーについて、Azure Portal からは編集作業ができない。そのため REST API を使用する必要がある。なお、REST API で更新できるプロパティは限定されているため、更新できないプロパティを変える必要があれば割り当てを再作成することになる。
    Policy Assignments - Update - REST API (Azure Policy) | Microsoft Learn

    • ポリシー⇒「割り当て」から 「割り当ての編集」 を行おうとしたところエラーフィルター 'tenantId={委任サブスクリプションが所属するテナントID}' はサポートされていません。サポートされているフィルターは、'atScope()' と 'principalId eq '{value}' と assignedTo('{value}')' のいずれかです。 がでてしまい編集できない。image.png

感想

Azure Lighthouse を使用すると一つのテナントで顧客テナントのリソースを直接管理できるのは楽でいいなと思いました。一方 Azure Lighthouse について Azure Portal から実行できない操作は、本記事記載時点では公開情報として網羅された記載がなく、不明点が出た際、都度問合せを行う必要があるところは難点だと感じました。


以上、Azure Lighthouse で他テナントにポリシーを展開するまでの実践ガイドでした。
実際の運用では、組織のセキュリティポリシーやコンプライアンス要件に応じてカスタマイズしてください。

記載されている会社名、製品名、サービス名は、各社の商標または登録商標です。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?