Azure Automation と Microsoft Graph を使用して Microsoft Entra ID ガバナンスのタスクを自動化する

Azure Automation は、一般的または反復的なシステム管理とプロセスを自動化できる Azure のクラウド サービスです。 Microsoft Graph は、ディレクトリ内のユーザー、グループ、アクセス パッケージ、アクセス レビューなどのリソースを管理する Microsoft Entra 機能のための Microsoft 統合 API エンドポイントです。 Microsoft Graph PowerShell SDK を使用して、PowerShell のコマンド ラインで Microsoft Entra ID を大規模に管理できます。 Azure Automation で PowerShell ベースの Runbook から Microsoft Graph PowerShell のコマンドレットを取り込み、簡単なスクリプトで Microsoft Entra のタスクを自動化することもできます。

Azure Automation と PowerShell Graph SDK では証明書ベースの認証とアプリケーションのアクセス許可がサポートされているため、ユーザー コンテキストを必要とせずに Azure Automation の Runbook を Microsoft Entra ID に対して認証できます。

この記事では、Microsoft Graph PowerShell でエンタイトルメント管理のクエリを実行する簡単な Runbook を作成することで、Microsoft Entra ID に対して Azure Automation の使用を開始する方法を示します。

Azure Automation アカウントを作成する

ヒント

この記事の手順は、開始するポータルに応じて若干異なる場合があります。

Azure Automation は、Runbook を実行するクラウドでホストされる環境を提供します。 これらの Runbook は、スケジュールに基づいて、 Webhook によってトリガーされて、または Logic Apps によって自動的に開始できます。

この Azure Automation を使用するには、Azure サブスクリプションが必要です。

前提条件ロール: Azure サブスクリプションまたはリソース グループ所有者

  1. Azure portal にサインインします。 サブスクリプション、または Azure Automation アカウントが配置されるリソース グループにアクセスができることを確認します。

  2. サブスクリプションまたはリソース グループを選択し、[作成] を選択します。 「Automation」と入力し、Microsoft から Azure サービスの [自動化] を選択し、[作成] を選択します。

  3. Azure Automation アカウントを作成後、[アクセス制御 (IAM)] を選択します。 次に、[このリソースへのアクセス][表示] を選択します。 これらのユーザーとサービス プリンシパルは、後から Azure Automation アカウント内で作成されるスクリプトを介して Microsoft サービスと対話できます。

  4. そこに表示されているユーザーとサービス プリンシパルを確認し、これらが承認されていることを確認します。 未承認のユーザーを削除します。

コンピューターで自己署名のキーの組および証明書を作成する

個人の資格情報がなくても動作が可能となるように、作成した Azure Automation アカウントの Microsoft Entra ID への認証を証明書を使って行う必要があります。

Microsoft Entra ID へのサービスを認証するキーの組と、認証局から発行を受けた証明書が既にある場合は、ここを飛ばして次のセクションにスキップしてください。

自己署名証明書を生成する

  1. 自己署名証明書を作成する方法のオプション 2 の手順に従って、そのプライベート キーを使用して証明書を作成およびエクスポートします。

  2. 証明書のサムプリントを表示します。

     $cert | ft Thumbprint
    
  3. ファイルをエクスポートした後、ローカル ユーザー証明書ストアから証明書とキーの組を削除できます。 証明書と秘密キーが Azure Automation および Microsoft Entra サービスにアップロードされたら、以降の手順で .pfx および .crt のファイルも削除します。

Azure Automation へキーの組をアップロードする

Azure Automation の Runbook は、.pfx ファイルから秘密キーを取得し、Microsoft Graph に対する認証のために使用します。

  1. Azure Automation アカウントの Azure portal で、[証明書][証明書の追加] の順に選択します。

  2. 先ほど作成した .pfx ファイルをアップロードし、ファイルの作成時に指定したパスワードを入力します。

  3. 秘密キーがアップロードされた後、証明書の有効期限を記録します。

  4. これで、ローカル コンピューターからファイル .pfx を削除できます。 ただし、後の手順でこのファイルが必要なので、まだ .crt ファイルを削除しないでください。

Microsoft Graph のモジュールを自分の Azure Automation に追加する

既定では、Azure Automation には事前に読み込まれた Microsoft Graph 用の PowerShell モジュールはありません。 まずは Microsoft.Graph.Authentication を、その後に追加のモジュールをギャラリーから Automation アカウントへ追加する必要があります。

  1. Azure Automation アカウントの Azure portal で、[モジュール][ギャラリーの参照] の順に選択します。

  2. [検索] バーで、 「Microsoft.Graph.Authentication」とタイプします。 対象のモジュールを選択して、[インポート][OK] の順に選択し、Microsoft Entra ID でモジュールのインポートを開始します。 [OK] を選択した後、モジュールのインポートに数分かかる場合があります。 Microsoft.Graph.Authentication モジュールのインポートが完了するまで、Microsoft Graph をこれ以上追加しないようにしてください。これらの他のモジュールには Microsoft.Graph.Authentication が前提条件としての含まれています。

  3. [モジュール] の一覧に戻り、[更新] を選択します。 Microsoft.Graph.Authentication の状態が [使用可能] に変更されると、次のモジュールをインポートできます。

  4. エンタイトルメント管理などの Microsoft Entra ID ガバナンス機能にコマンドレットを使用している場合は、さらにモジュール Microsoft.Graph.Identity.Governance に対するインポート プロセスを繰り返します。

  5. スクリプトで必要となる可能性がある他のモジュール (Microsoft.Graph.Users など) をインポートします。 たとえば、ID 保護を使用しているため、Microsoft.Graph.Identity.SignIns モジュールをインポートしたい場合があります。

アプリの登録を作成してアクセス許可を割り当てる

次に、Microsoft Entra ID が認証用の Azure Automation Runbook の証明書を認識できるように、Microsoft Entra ID にアプリ登録を作成します。

前提条件ロール: アプリケーションのアクセス許可にアプリケーションを同意できるグローバル管理者または他の管理者

  1. Microsoft Entra 管理センター に 少なくともグローバル管理者 としてサインインします。

  2. >[ID]>[アプリケーション]>[アプリの登録] を参照します。

  3. [新規登録] を選択します。

  4. アプリケーションの名前を入力し、[登録] を選択します。

  5. アプリケーション登録が作成されたら、アプリケーション (クライアント) IDディレクトリ (テナント) ID をメモします。後でこれらの項目が必要になります。

  6. [証明書とシークレット][証明書のアップロード] の順に選択します。

  7. 作成したファイル .crt をアップロードします。

  8. [API のアクセス許可][アクセス許可の追加] の順に選択します。

  9. [Microsoft Graph][アプリケーションのアクセス許可] を選択します。

  10. Azure Automation アカウントに必要なアクセス許可をそれぞれ選択してから、[アクセス許可の追加] を選択します。

    • Runbook がクエリまたは更新を 1 つのカタログ内でだけ実行している場合は、テナント全体のアプリケーション アクセス許可を割り当てる必要はありません。代わりに、サービス プリンシパルをカタログのカタログ所有者またはカタログ閲覧者ロールに割り当てることができます。
    • Runbook がエンタイトルメント管理のクエリのみを実行している場合は、 EntitlementManagement.Read.All のアクセス許可を使用できます。
    • Runbook が (たとえば、複数のカタログにまたがる割り当てを作成するために) エンタイトルメント管理を変更している場合は、EntitlementManagement.ReadWrite.All のアクセス許可を使用します。
    • その他の API については、必要なアクセス許可が追加されていることを確認します。 たとえば、ID 保護の場合は、 IdentityRiskyUser.Read.All のアクセス許可を追加する必要があります。
  11. [管理者アクセス許可を付与する] を選択して、アプリにそれらのアクセス許可を付与します。

Azure Automation 変数を作成する

この手順では、Runbook が Microsoft Entra ID への認証方法を決定するために使用する 3 つの変数を Azure Automation アカウントに作成します。

  1. Azure portal で、Azure Automation アカウントに戻ります。

  2. [変数][変数の追加] の順に選択します。

  3. Thumbprint という名前の変数を作成します。 変数の値として、前に生成された証明書のサムプリントを入力します。

  4. ClientId という名前の変数を作成します。 変数の値として、 Microsoft Entra ID に登録されているアプリケーションのクライアント ID を入力します。

  5. TenantId という名前の変数を作成します。 変数の値として、アプリケーションが登録されたディレクトリのテナント ID を入力します。

Graph を使用できる Azure Automation PowerShell Runbook を作成する

この手順では、初期状態の Runbook を作成します。 この Runbook をトリガーして、以前に作成した証明書を使用して認証が成功した場合に確認できます。

  1. [Runbook][Runbook の作成] を選択します。

  2. Runbook の名前を入力し、作成する Runbook の種類として [PowerShell] を選択し、[作成] を選択します。

  3. Runbook が作成されると、Runbook の PowerShell ソース コードを入力するためのテキスト編集ペインが表示されます。

  4. テキスト エディターに次の PowerShell を入力します。

Import-Module Microsoft.Graph.Authentication
$ClientId = Get-AutomationVariable -Name 'ClientId'
$TenantId = Get-AutomationVariable -Name 'TenantId'
$Thumbprint = Get-AutomationVariable -Name 'Thumbprint'
Connect-MgGraph -clientId $ClientId -tenantId $TenantId -certificatethumbprint $Thumbprint
  1. [テスト] ウィンドウ[開始] の順に選択します。 Runbook スクリプトの処理を Azure Automation が完了するまで数秒間待ちます。

  2. Runbook の実行が成功した場合は、メッセージ 「Welcome to Microsoft Graph!」 が表示されます。

これで、Runbook が Microsoft Graph に対して認証可能なことを確認できました。次に、Microsoft Entra の機能を操作するためのコマンドレットを追加して、Runbook を拡張します。

エンタイトルメント管理を使用するために Runbook を拡張する

Runbook のアプリ登録に EntitlementManagement.Read.All または EntitlementManagement.ReadWrite.All のアクセス許可がある場合は、エンタイトルメント管理 API を使用できます。

  1. たとえば、Microsoft Entra エンタイトルメント管理のアクセス パッケージの一覧を取得するには、上記で作成した Runbook を更新して、テキストを次の PowerShell に置き換えます。
Import-Module Microsoft.Graph.Authentication
$ClientId = Get-AutomationVariable -Name 'ClientId'
$TenantId = Get-AutomationVariable -Name 'TenantId'
$Thumbprint = Get-AutomationVariable -Name 'Thumbprint'
$auth = Connect-MgGraph -clientId $ClientId -tenantid $TenantId -certificatethumbprint $Thumbprint
Import-Module Microsoft.Graph.Identity.Governance
$ap = @(Get-MgEntitlementManagementAccessPackage -All -ErrorAction Stop)
if ($null -eq $ap -or $ap.Count -eq 0) {
   ConvertTo-Json @()
} else {
   $ap | Select-Object -Property Id,DisplayName | ConvertTo-Json -AsArray
}
  1. [テスト] ウィンドウ[開始] の順に選択します。 Runbook スクリプトの処理を Azure Automation が完了するまで数秒間待ちます。

  2. 実行が成功した場合、ウェルカム メッセージではなく出力が JSON 配列になります。 JSON 配列には、クエリから返される各アクセス パッケージの ID と表示名が含まれます。

Runbook にパラメーターを指定する (省略可能)

PowerShell スクリプトの上部に Param セクションを追加することで、Runbook に入力パラメーターを追加することもできます。 たとえば、

Param
(
    [String] $AccessPackageAssignmentId
)

許可されるパラメーターの形式は、呼び出し元のサービスによって異なります。 Runbook が呼び出し元からパラメーターを受け取る場合は、Runbook に検証ロジックを追加して、指定されたパラメーター値が Runbook の開始方法に適していることを確認する必要があります。 たとえば、Runbook が Webhook によって開始される場合、Webhook 要求が正しい URL に対して行われている限り、Azure Automation は Webhook 要求の認証を何も実行しないため、要求を検証するための代替手段が必要となります。

Runbook 入力パラメーターを構成すると、Runbook をテストするときに、[テスト] ページで値を指定できます。 後で Runbook が発行されると、PowerShell、REST API、またはロジック アプリから Runbook を開始するときにパラメーターを指定できます。

Logic Apps の Azure Automation アカウント内の出力を解析する (オプション)

Runbook が発行されると、Azure Automation でスケジュールを作成し、Runbook をそのスケジュールにリンクして自動的に実行できます。 Azure Automation からの Runbook のスケジュール設定は、PowerShell インターフェイスを持たない他の Azure サービスや Office 365 サービスとやり取りする必要がない Runbook に適しています。

Runbook の出力を別のサービスに送信する場合は、Logic Apps でも結果を解析できるため、Azure Logic Apps を使用して Azure Automation Runbook を開始することができます。

  1. [Azure Logic Apps] で、[繰り返し] から始まる Logic Apps Designer で Logic App を作成します。

  2. [Azure Automation] から [ジョブの作成] 操作を追加します。 Microsoft Entra ID への認証を行って、前に作成したサブスクリプション、リソース グループ、Automation アカウントを選択します。 [ジョブの待機] を選択します。

  3. パラメーター Runbook 名を追加し、開始する Runbook の名前を入力します。 Runbook に入力パラメーターがある場合は、その値を指定できます。

  4. [新しいステップ] を選択し、[ジョブ出力の取得] 操作を追加します。 前の手順と同様に、サブスクリプション、リソース グループ、Automation アカウントを選択し、前の手順の [ジョブ ID] の [動的] 値を選択します。

  5. Runbook の完了時に返されるコンテンツを使用する JSON の解析アクションなどのロジック アプリに、さらに操作を追加できます。 (サンプル ペイロードから JSON の解析スキーマを自動生成する場合は、null 値を返す可能性がある PowerShell スクリプトを必ず考慮してください。スキーマ内で、"type": ​"string" の一部に "type": [​"string",​ "null"​] への変更が必要となることがあります。)

Azure Automation では、一度に大量のデータを出力ストリームに書き込もうとすると、PowerShell Runbook の完了に失敗する可能性があります。 この問題を回避するには、通常、 不要なプロパティを除外する Select-Object -Property コマンドレットの使用など、ロジック アプリで必要な情報のみを Runbook に出力します。

証明書を最新の状態に保つためのプラン

認証のために上記の手順に従って自己署名証明書を作成した場合、証明書には期限が切れるまでの限られた有効期間しかないことに注意してください。 有効期限日より前に証明書を再生成し、その新しい証明書をアップロードする必要があります。

Azure portal で有効期限は、2 つの場所で確認できます。

  • [Azure Automation] で、[証明書] の画面に証明書の有効期限が表示されます。
  • Microsoft Entra ID のアプリの登録で、[証明書とシークレット] 画面に、Azure Automation アカウントに使用された証明書の有効期限が表示されます。

次のステップ