🔦

Azure Lighthouse の設定手順

2022/05/31に公開

はじめに

Azure のサブスクリプションや各リソースは Auzre AD テナントに紐づく形になっており、自身が所属するテナントとは別のテナントのサブスクリプションやリソースを操作する場合、ゲスト招待、権限を付与してもらったうえで、Azure ポータル上でテナントの切り替えが必要になります。
上記を回避する方法として、Azure ではテナント間で権限を委任する Lighthouse というサービスがあります。こちら、公式ドキュメントだと非常にわかりづらいので、自分なりの理解の説明や手順の説明をしたいと思います。

Lighthouse のイメージ

概念の説明の前に、操作イメージをつかんでもらったほうが理解が進むかと思います。自身のテナントとは別のテナントを操作する場合のイメージです。

Lighthouse を使わない場合
ゲストユーザーとしてテナントの切り替えが必要

Lighthouse を使った場合
同一ポータルで別テナントのリソースが操作可能

Lighthouse の仕組み

Lighthouse は用語の定義から考えて、サービスプロバイダがお客様の Azure 環境を運用代行する目的で作られていると考えられます。その根拠として、リソースの権限を委任する側をカスタマー、リソースの権限を委任される側をサービスプロバイダと表現します。これが分かりにくくなる原因ではないかと思います。

Lighthouse では、宛先テナント・宛先ユーザー・対象ロール・対象リソースを指定して、委任する機能になっています。委任することにより、別テナントのリソースが同一画面上で操作可能になります。

Lighthouse のユースケース

主なユースケースは 2 つかと思います。

  1. サービスプロバイダが運用を代行
    サービスプロバイダが委任される側、運用代行を依頼するお客様が委任する側になります。この場合、テナントを切り替えず複数のお客様テナントのリソースを一括管理できる形になります。こちらは本来想定されている使い方なので、イメージしやすいかと思います。

  2. 別テナントのログを集約
    このユースケースが非常に分かりにくくする原因かと思います。この場合、サービスプロバイダやカスタマーではなく、単純にログを書き込むリソース(Log Analytics ワークスペースやストレージアカウント)を委任と考えたほうがよいです。ログを書き込んでほしいリソースを相手側に委任して書き込み設定をするイメージです。

Lighthouse の設定方法

ここからは Lighthouse の設定方法を説明します。設定は委任する側(渡す側)で実施します。
まず始めにリソースプロバイダーで Microsoft.ManagedServices を登録します。


Lighthouse の設定パラメータを準備します(取得方法は割愛します)。必要なパラメータは以下になります。

  • 委任先のテナント ID
  • 委任先のユーザーオブジェクト ID
  • 操作許可するためのロール ID
  • 委任する管理グループやサブスクリプション、リソースグループ名

操作許可するためのロール ID は組み込みロールの一覧から確認できます。Lighthouse では現時点では組み込みロールのみサポートされています。
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/built-in-roles


Lighthouse のデプロイは現時点では Auzre ポータルではできないので、 GitHub の ARM テンプレートを使用します。(Azure ポータルで ARM テンプレートの作成ができるらしいですが、おそらく GitHub 使ったほうが楽です)
https://github.com/Azure/Azure-Lighthouse-samples/


今回はサブスクリプションの ARM テンプレートを使います。
委任元のテナントであることを確認し、[Deploy to Azure] をクリックします。以下のカスタムデプロイの画面が表示されることを確認します。


各入力項目は以下の通りです。

項目 入力値
サブスクリプション 本デプロイを保存するサブスクリプション
リージョン デプロイの場所
Msp Offer Name 委任の名前(任意)
Msp Offer Description 委任の説明(任意)
Managed By Teant Id 委任左記のテナント ID
Authorizations 後述

Authorizations は委任の内容を json 形式で記述します。

[
	{
		"principalId": "<ユーザー等のオブジェクト ID>",
		"principalIdDisplayName": "<任意の名前>",
		"roleDefinitionId": "<委任する組み込みロール ID>"
	}
]

複数ユーザーや複数ロールを委任する場合は項目を増やします。

[
	{
		"principalId": "<ユーザー等のオブジェクト ID>",
		"principalIdDisplayName": "<任意の名前>",
		"roleDefinitionId": "<委任する組み込みロール ID>"
	},
	{
		"principalId": "<ユーザー等のオブジェクト ID>",
		"principalIdDisplayName": "<任意の名前>",
		"roleDefinitionId": "<委任する組み込みロール ID>"
	}
]

これを改行なしの状態にして、Authorization に入力し、デプロイします。


デプロイが成功すると、委任されたテナント側からリソースが確認できるようになります。ただし、確認できるようになるまで 15 分程度かかる場合もあります。また、グローバルサブスクリプションフィルターで追加チェックが必要になる点が要注意です。


委任の結果は Azure ポータル上からも確認できます。これもまた分かりづらいのですが、委任した側はサービスプロバイダーというメニューに委任した先が表示されます。ここから委任の削除ができ、また一度委任したテナントについては Azure ポータル上から追加の委任設定が可能になります。


委任を受けた側はマイカスタマーというメニューに表示されます。


これで設定は以上です。

Discussion