デバイスコードフローから マネージドID へ!Azure Automation で Graph API を動かすための環境構築
前回の記事では Azure Cloud Shell を利用し、Microsoft Graph API を利用し、SharePoint サイトの利用状況レポートを取得する方法を解説しました。
認証にはデバイスコードフローを利用することで、アプリ登録や証明書を用意することなく、ブラウザーだけで手軽に実行できる構成としています。この方法は 「すぐに試したい」「一度だけ実行したい」 といった用途には適していますが、対話型の認証を前提としているため、スクリプトの定期実行には適していません。
自動化における課題
スクリプトを定期実行する場合、一般的には以下の認証方式が用いられます。
- クライアントシークレット
- 証明書認証
しかし、これらの方式には次のような運用課題があります。
- シークレットや証明書の定期更新
- 認証情報の安全な保管
- 管理に伴う運用コストの増加
解決策:マネージド ID
これらの課題は、Managed Identity を利用することで解決できます。
マネージド ID を使用すると、Azure リソース自体に ID が付与され、認証情報をスクリプト内で管理することなく安全に API を実行できます。
そこで今回は、前回の記事で行った手動操作を、マネージド ID 認証を用いた Azure Automation で定期実行するための 「環境準備」 について記載します。
なお、Azure Automation をはじめて利用する場合、色々な設定や注意ポイントが環境構築の作業に集中しているため、本記事の設定編と次回の実行編の 2 回に分けて解説いたします。
今回利用する Azure サービスの基礎知識
1. Azure Automation とは
Azure Automation とはMicrosoft Azure が提供する、クラウドやオンプレミス環境の運用管理タスクを自動化するサービスです。PowerShell や Python スクリプト (Runbook と呼びます) を定期実行でき、セキュアかつ効率的な運用自動化を実現します。
利用するには Azure サブスクリプションが必要であり、料金は従量課金制です (一定時間は無料で利用可能)。詳細は Microsoft Learn の概要ページをご覧ください。
https://learn.microsoft.com/ja-jp/azure/automation/overview
料金の詳細については以下のページをご覧ください。
https://azure.microsoft.com/ja-jp/pricing/details/automation/
2. マネージド ID とは
Azure が裏側で自動的にパスワードを作成・管理してくれる、Azure リソース専用の 「身分証」 のような仕組みです。証明書などを用意しなくても、「Azure 上の安全なリソースであること」 を ID だけで証明でき、他の Azure サービスや Microsoft Graph などの API へ安全に接続できます。
Automation アカウントにこのマネージド ID を割り当てるだけで、認証情報の管理や更新作業をすべて Azure に任せられます。資格情報の漏洩リスクや運用負担を軽減することができます。
Azure Automation 実行環境の準備
1. Automation アカウントの作成
- Azure ポータルで 「Automation」 を検索し、[Automation アカウント] をクリックします。

- [作成] をクリックします。

- [基本] タブでは、リソース グループを作成し Automation アカウント名、地域を設定します。[次へ] をクリックします。

- [詳細設定] タブでは、マネージド ID の設定にて 「システム割り当て」 が選択されていることを確認し、[確認と作成] をクリックします。「システム割り当て」 を選択することで、この Automation 専用のマネージド ID が自動生成されます。

- [作成] をクリックします。

2. マネージド ID へのアクセス許可の付与
作成されたマネージド ID が Microsoft 365 に接続して操作を行うには、Microsoft Graph API への 「アクセス許可」 を付与する必要があります 。
システム割り当てのマネージド ID に対する Graph API へのアクセス許可の付与は、Azure ポータルの管理画面では行えません。ここではお手軽な PowerShell (Cloud Shell) を利用して、SharePoint サイトの利用状況レポートの取得に必要な権限を付与します。
- Automation アカウント画面の [アカウント設定] – [ID] をクリックします。表示されたオブジェクト (プリンシパル) ID をコピーし、メモ帳などに張り付けておきます。

- アクセス許可の付与を行うコマンドの準備を行います。「Sites.Read.All」、「Reports.Read.All」、「Files.ReadWrite.All」 の3つを付与します。
以下のスクリプトをコピーし、メモ帳に貼り付けして<オブジェクト ID>を書き換えます。# ========================================================= # 📝 設定セクション:<オブジェクト ID> を書き換えてください # ========================================================= $ManagedIdentityObjectId = "<オブジェクトID>" $RoleNames = @("Reports.Read.All", "Sites.Read.All", "Files.ReadWrite.All") $GraphAppId = "00000003-0000-0000-c000-000000000000" # ========================================================= # 1. 必要なスコープを指定して Microsoft Graph に接続 Write-Host "--- Microsoft Graphに接続しています ---" -ForegroundColor Cyan $AuthScopes = @("AppRoleAssignment.ReadWrite.All", "Application.Read.All") Connect-MgGraph -Scopes $AuthScopes -NoWelcome # 2. Graph APIのサービスプリンシパル情報を取得 $GraphSp = Get-MgServicePrincipal -Filter "AppId eq '$GraphAppId'" # 3. 権限付与ループ $ErrorActionPreference = "SilentlyContinue" # 既に付与済みの赤エラーを非表示にする foreach ($RoleName in $RoleNames) { $AppRole = $GraphSp.AppRoles | Where-Object { $_.Value -eq $RoleName -and $_.AllowedMemberTypes -contains "Application" } if ($AppRole) { $Params = @{ PrincipalId = $ManagedIdentityObjectId; ResourceId = $GraphSp.Id; AppRoleId = $AppRole.Id } New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $ManagedIdentityObjectId @Params Write-Host "✅ $RoleName の付与処理を実行しました。(既に付与済みの場合はスキップされます)" -ForegroundColor Green } } $ErrorActionPreference = "Stop" # エラー設定を元に戻す Write-Host "✅ すべての事前準備(権限付与)が完了しました!" -ForegroundColor Yellow - Microsoft Entra 管理センターの [エンタープライズ アプリ] をクリックし、「アプリケーションの種類」 フィルターを 「マネージド ID」 のみに変更します。

- [アクセス許可] をクリックし、付与した権限が表示されていることを確認します。権限が付与されたか確認します。

3. ランタイム環境の作成と必要モジュールのインストール
Azure Automation で PowerShell 7.4 を利用して Microsoft Graph API を実行するために、モジュールをインストールします。
- Azure Automation 概要画面の [ランタイム環境エクスペリエンスを試す] をクリックします。ランタイム環境に切り替えることで、Azure Automate で PowerShell 7.4 が利用できるようになります。
※ PowerShell 7.4 は LTS (Long Term Servicing) 版として長期サポートと高い安定性が保証されており、業務利用に適した安心のバージョンです。
- [プロセス オートメーション] – [ランタイム環境] – [作成] をクリックします。

- 名前と言語を設定します。言語は 「PowerShell」、ランタイム バージョンは 「7.4」 を選択します。[次へ] をクリックします。

- [ギャラリーから追加] をクリックします。

- 今回の操作に必要なモジュールは 「Microsoft.Graph.Authentication」、「Microsoft.Graph.Sites」 です。「Microsoft.Graph」 で検索し、一覧から 「Microsoft.Graph.Authentication」 をクリックします。

- [選択] をクリックします。

- 同様の手順で 「Microsoft.Graph.Sites」 を追加し、[次へ] をクリックします。

- [作成] をクリックします。

- 追加したランタイムが表示されていることを確認します。
まとめ
今回の設定編では、Azure Automation で Microsoft Graph を動かすための基盤となる設定を解説しました。残りの作業は、Automation にスクリプトを実行するための Runbook を作成し、スクリプトを実行するだけです。
次回の実行編では、実際に PowerShell スクリプトを登録し、SharePoint レポートを定期実行で取得する手順を解説いたします。
👉 次回:マネージドID で完全自動化!Azure Automation × Graph API で SharePoint レポートを定期取得する
Microsoft 365 運用 関連コース
-
CI505-H Microsoft 365 運用管理
Microsoft 365 の運用管理に必要な知識と設定すべき項目を理解いただけます。アカウントやデバイス管理に不可欠な Entra ID の基礎知識をはじめ、Exchange Online、Microsoft Teams、SharePoint Online、OneDrive for Business など各サービスにおいて実施すべき設定と推奨設定、理解しておきたい仕組みなど、運用管理に必要な内容を基本から実務レベルまで解説。
-
CI509-H Microsoft 365 デバイス運用管理
Microsoft Defender、Microsoft Purview、Microsoft Entra ID を活用したセキュリティおよびコンプライアンス対策に加え、注目を集める Microsoft 365 Copilot の運用管理など、Microsoft 365 全体の情報保護に関する機能・利用シーン・運用のポイントを具体的に解説。
-
CI506-H Microsoft 365 運用管理 – 情報保護編
Microsoft Defender、Microsoft Purview、Microsoft Entra ID を活用したセキュリティおよびコンプライアンス対策に加え、注目を集める Microsoft 365 Copilot の運用管理など、Microsoft 365 全体の情報保護に関する機能・利用シーン・運用のポイントを具体的に解説。
-
CI508-H Microsoft 365 PowerShell による管理効率化
Microsoft 365 に対する運用管理で PowerShell を利用するための基本や Exchange Online、SharePoint Online、Microsoft Teams を設定するための便利なコマンドライン、設定を自動化するためのスクリプトの作成方法など、PowerShell による Microsoft 365 管理の基本から必須スキルまでを、運用管理に活用できるサンプルを用いて解説。
