クラウドエンジニアブログ

Azure Lighthouse とは

椎熊 裕一

椎熊 裕一

1. はじめに

みなさん、こんにちは。4 月から期も変わり、心機一転の椎熊です。

Azure Lighthouse というサービスをご存知でしょうか?
直感的にサービス内容がわかりづらいサービスですよね。
「Lighthouse」 を直訳しますと、「灯台」 という意味になります。
どういったことなのでしょうか。
今回は Lighthouse について概要と設定方法についてご紹介します。


2. Azure Lighthouse とは

Azure リソースの権限を他のテナントに委任することができます。
委任されたユーザーは、他のテナントのリソースにアクセスすることができます。
主な利用目的は、ベンダーが顧客のテナントの Azure を運用する場合です。

Azure に詳しい方であれば、Azure Lighthouse を使わなくても、ゲスト招待すればできるのでは?
と思われるかもしれません。
ゲスト招待でも同じことができます。

違いについて、文字だけだと伝わりづらいので、少し図を加えて解説していきます。
以下のような要件があるとします。

  • Azure 運用ベンダーは、テナント A に所属しています。 (アカウント : alice@vender.com)
  • 顧客のテナントは、テナント B です。 (customer.com)
  • Azure 運用ベンダーは、顧客の テナント B のリソースを管理します。

ゲスト招待で対応する場合は、以下のようなイメージです。


Azure Lighthouse とは1

  1. ベンダーは招待して欲しいユーザーのアカウント情報を顧客に伝える。
  2. 顧客テナント側で、ベンダーのアカウントをゲスト招待をして、権限を付与します。

しかし、ゲスト招待では、以下のような課題があります。

  • 必要なユーザー分、顧客側でユーザー招待をする必要がある。
  • 招待には Azure AD の管理者権限が必要、権限付与にはサブスクリプションの管理者権限が必要となる。 (この 2つの役割を兼務しているケースは少ないため、多くの場合は各所への調整が必要になる)
  • ベンダー側のメンバーが変更が必要になると、顧客テナント側の管理者で作業してもらう必要がある。
  • ベンダー側は顧客数が多くなると依頼先が増え、手間がかかる。 (間違ったアカウントを伝えれば、セキュリティインシデントとなる。)
    上記の課題を解決するのが、Azure Lighthouse です。

一方、Azure Lighthouse を使うとこうなります。


Azure Lighthouse とは2

  1. ベンダーは、テナント ID および権限付与対象の情報を顧客に伝える。
  2. 顧客テナント側で、ベンダーの情報をもとに委任をする。

権限付与対象として、ベンダー側テナントのユーザー / グループ / サービスプリンシパルを指定することができます。
グループを指定して委任することにより、ゲスト招待時の課題が解消できます。

  • 必要なユーザー分、顧客側でユーザー招待する必要がなくなる。
  • 委任はサブスクリプションの管理者で実行可能なため、Azure AD の管理者権限が不要になる。
  • ベンダー側のメンバーが変更が必要になっても、ベンダー側テナントのグループのメンバーを変更することで対応が可能。顧客側の作業がなくなる。
  • ベンダー側は顧客に作業依頼する必要がなくなる。

また、ゲスト招待してもらったパターンですと、顧客のリソースにアクセスするには、サブスクリプションを切り替える必要がありました。
Azure Lighthouse ですと、サブスクリプション切り替えることなく、顧客リソースにアクセスすることができますので、切り替える時間が短縮できます。 (サブスクリプションの切り替えは地味に時間がかかりますよね)

委任する範囲は、サブスクリプションとリソースグループを指定することができます。

割り当てるロールの制約として、以下の組み込みロールは割り当てることができません。

  • 所有者
  • DataActions 権限を持つすべての組み込みロール
  • ユーザーアクセス管理者ロール

また、カスタムロールも割り当てることができません。

詳細は以下のドキュメントを参照ください。

[Azure の委任されたリソース管理でのロールのサポート]
https://docs.microsoft.com/ja-jp/azure/lighthouse/concepts/tenants-users-roles#role-support-for-azure-delegated-resource-management

Azure Lighthouse は無料で使えます。

最新情報は以下のリンクを参照ください。
[Azure Lighthouse とは]
https://docs.microsoft.com/ja-jp/azure/lighthouse/overview


3. 使ってみた

Azure Lighthouse の設定方法をご紹介します。
以下のマイクロソフト社のドキュメントを参考に設定します。

[Azure の委任されたリソース管理に顧客をオンボードする]
https://docs.microsoft.com/ja-jp/azure/lighthouse/how-to/onboard-customer

事前に以下の準備をしておいてください。

  • 顧客用 (customer.com) とベンダー用 (vender.com) の 2 つの Azure AD の作成
  • ベンダー側テナントに Azure AD グループ (ops-group) の作成

下記、3 の操作には対象のサブスクリプションに対して、所有者ロールが必要となります。

左右にスクロールしてご覧ください。

No. 操作テナント 手順
1 ベンダー 設定に必要な情報取得する
2 顧客 ARM テンプレートを作成する
3 顧客 ARM テンプレートをデプロイする ← ここで委任される
4 顧客 付与した権限を確認する
5 ベンダー 付与された権限を確認する
6 ベンダー 顧客の VM を表示する

1. 設定に必要な情報取得する (操作テナント:ベンダー )

顧客に渡す情報として以下を取得します。

  • 委任されるアカウントが存在する Azure AD (vender.com) のテナント ID
  • 委任対象 (ユーザー / グループ / サービスプリンシパル) のオブジェクト ID

委任されるアカウントが存在する Azure AD (vender.com) のテナント ID

[すべてのサービス] - [Azure Active Directory] - [概要] と選択します。
テナント ID をコピーしておきます。

委任されるアカウントが存在する Azure AD1


委任対象 (ユーザー / グループ / サービスプリンシパル) のオブジェクト ID

[Azure Active Directory] - [グループ] を選択し、グループの一覧から対象のグループ (ops-group) を選択します。
オブジェクト ID をコピーしておきます。

委任されるアカウントが存在する Azure AD2


2. テンプレートを作成する (操作テナント:顧客)

委任は、ARM テンプレートを使って行います。

その前に、適用する RBAC のロール ID を確認します。
ロール ID は以下のドキュメントから確認します。

[Azure 組み込みロール]
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/built-in-roles

今回は、閲覧者とするため、「acdd72a7-3385-48ef-bd42-f606fba81ae7」 となります。

ARM テンプレートの作成

割り当てるスコープによって、準備する ARM テンプレートの内容が変わってきます。
今回は、サブスクリプション単位とするため、以下の ARM テンプレートを使用します。

詳細は以下のドキュメントを参照ください。
[Azure Resource Manager テンプレートの作成]
https://docs.microsoft.com/ja-jp/azure/lighthouse/how-to/onboard-customer#create-an-azure-resource-manager-template

パラメーターファイルを作成します。
パラメーターファイルはあくまでもサンプルですので、自社の環境に合わせて編集する必要があります。

必要な情報は以下のとおりです。

左右にスクロールしてご覧ください。

No. パラメーター名 説明
1 mspOfferName 任意の名前を付ける (ベンダー名など)
2 mspOfferDescription 任意の説明 (ベンダー名や委任した日など)
3 managedByTenantId 委任先の Azure AD テナントの ID (vender.com)
4 principalId 委任先のテナントのユーザー / グループ / サービスプリンシパルのオブジェクト ID (ops-group)
5 principalIdDisplayName 任意の表示名 (委任先のグループ名など)
6 roleDefinitionId 付与するロール ID

作成したパラメーターファイルは以下のとおりです。


{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "mspOfferName": {
            "value": "vender"
        },
        "mspOfferDescription": {
            "value": "vender yyyy/mm/dd"
        },
        "managedByTenantId": {
            "value": "<委任先の Azure AD テナントの ID>"
        },
        "authorizations": {
            "value": [
                {
                    "principalId": "<委任先のオブジェクト ID>",
                    "principalIdDisplayName": "ops-group",
                    "roleDefinitionId": "acdd72a7-3385-48ef-bd42-f606fba81ae7"
                },
            ]
        }
    }
}

ARM テンプレートはそのまま編集せずテキストで保存しておいてください。

3. 手順:ARM テンプレートをデプロイする (操作テナント:顧客)

実際に作成したテンプレートをもとに、委任をします。
ARM テンプレートのデプロイは、Azure CLI もしくは Powershell で実行します。
今回は、Azure CLI で実行します。

Cloud Shell を開き、Cloud Shell の画面上に ARM テンプレートおよびパラメーターファイルをドラッグ & ドロップします。
するとファイルをアップロードできます。

手順:ARM テンプレートをデプロイする1


2 つのファイルがアップロードされていれば準備は完了です。

手順:ARM テンプレートをデプロイする2


以下のコマンドを実行し、対象のサブスクリプションであることを確認をします。

az account show
手順:ARM テンプレートをデプロイする3


対象のサブスクリプション出ない場合は、以下のコマンドで対象のサブスクリプションを指定してください。

az account set --subscription <subscriptionId>

以下コマンドを実行し、委任をします。
実行に 2分ほどかかりました。


az deployment create --name test-lighthouse \
                     --location japaneast \
                     --template-file delegatedResourceManagement.json \
                     --parameters delegatedResourceManagement.parameters.json \
                     --verbose


4. 付与した権限を確認する (操作テナント:顧客)

[すべてのサービス] - [サービス プロバイダー] - [委任] を選択します。

委任したサブスクリプション、権限が表示できます。

付与した権限を確認する


5. 付与された権限を確認する (操作テナント:ベンダー)

委任された側のベンダーからは、[すべてのサービス] - [マイ カスタマー] - [委任] を選択します。

委任されたサブスクリプション、権限が表示できます。

付与された権限を確認する


6. 顧客の VM を表示する (操作テナント:ベンダー)

顧客のサブスクリプションにアクセスするには、右上の [ディレクトリ + サブスクリプション] を選択します。
[現在のディレクトリ + 委任されたディレクトリ] に委任されたディレクトリが表示され、

顧客の VM を表示する1


[サブスクリプション] に委任されたサブスクリプションが表示されます。

顧客の VM を表示する2


選択した、ディレクトリおよびサブスクリプションのリソースが一つの画面に表示されます。
右端でどこのサブスクリプションのリソースか確認できます。

顧客の VM を表示する3


VM の一覧で [サブスクリプション] を選択すると特定のサブスクリプションのリソースのみを表示することも可能です。

顧客の VM を表示する4


4. さいごに

数多くの Azure リソースの中から特定のリソースを効率的に探し出すことを可能にする。
という思いを込めて、Lighthouse という名前を付けたのではないでしょうか。

ゲスト招待するパターンと比較し、Azure Lighthouse を利用した方が、マルチテナント環境における操作性が向上します。

今回は、VM の管理についてご紹介しましたが、VM 以外にも使えるサービスがあります。
例えば、Azure Monitor ですと複数テナントを跨いだワークスペース操作が可能になります。
こちらについては次回以降ご紹介したいと思います。

ぜひ利用してみてください。



関連ページ

Azure Lighthouse 活用シナリオ

【総合】お問い合わせ

製品・サービスに関するお問い合わせはお気軽にご相談ください

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録