Microsoft Entra エージェント IDを使用して n8n エージェントをセキュリティで保護する

このガイドでは、Microsoft Entra エージェント IDの統合を行ったn8nをAzure Container Appsにデプロイする方法について説明します。 デプロイでは、Azure Developer CLI (azd) を使用してインフラストラクチャをプロビジョニングし、Microsoft Entra ID オブジェクトを作成し、n8n ワークフローを自動的に構成します。

カスタム エージェントに使用される Microsoft Entra ID Auth SDK (サイドカー) による認証パターンとは異なり、n8n 統合では n8n-nodes-entraagentid コミュニティ ノードを使用して、n8n ワークフロー内でトークンの取得を直接管理します。 デプロイされたワークフローは、自律型 (アプリ専用) と代理 (OBO) トークン フローの両方を示しており、Microsoft Graphと Microsoft Graph MCP Server for Enterprise、https://mcp.svc.cloud.microsoft/enterprise にアクセスできます。

メモ

このサンプルでは、n8n 内の n8n-nodes-entraagentid コミュニティ ノードの使用を示します。 運用環境のAzureに n8n をデプロイするためのガイダンスではありません。

前提条件

開始する前に、以下の項目があることを確認します:

  • Azure OpenAI (GPT-4o など)、PostgreSQL フレキシブル サーバー、およびAzure Container Appsのクォータを持つAzure サブスクリプション。
  • Microsoft Entra テナントの グローバル管理者 ロール。 自動化によって複数のMicrosoft Entra オブジェクトが作成され、アクセス許可に対する管理者の同意が付与されるため、このロールが必要です。 Privileged Identity Management (PIM) を使用して、このロールをジャスト イン タイムでアクティブ化します。

Azure Cloud Shell (推奨) には、Azure CLI、Azure Developer CLI (azd)、PowerShell 7、Git がすべてプレインストールされています。

Cloud Shellではなくローカルで実行している場合は、続行する前に次のツールをインストールしてください。

デプロイ コマンドでサブスクリプション内のリソースを作成および管理できるように、Azure CLIと Azure Developer CLI の両方を認証します。

az login
azd auth login

複製とデプロイ

デプロイ全体は、Azureインフラストラクチャをプロビジョニングし、n8n を自動的に構成する 1 つの azd up コマンドを使用して実行されます。 n8n をデプロイするには、次の手順に従います。

  1. Azure Cloud Shell を開き、PowerShell を選択します。

  2. リポジトリを複製し、デプロイを開始します。

    git clone https://github.com/astaykov/n8n-aca.git && cd n8n-aca && azd auth login && azd up
    

    Azure Cloud Shellでは、azd auth login はデバイス コードを表示します。 表示された URL を開き、認証するコードを入力し、 azd up 自動的に続行します。

  3. メッセージが表示されたら、次の値を指定します。

    • 環境名: 任意の名前 (たとえば、 my-n8n)。 このデプロイを分離するために使用されます。
    • Azure subscription: デプロイするサブスクリプションを選択します。
    • Azure location: リージョンを選択します (例: northeurope)。
    • n8n 管理者の電子メール: n8n 所有者アカウントの電子メール。
    • n8n 管理者パスワード: n8n 所有者アカウントのパスワード (最小 8 文字、大文字と小文字の混在、数字)。
  4. プロビジョニング後のフェーズでは、自動化によって 2 回目のサインインが実行されます。 デバイス コードが表示されます。 URL を開き、コードを入力します。 この手順には、全体管理者またはアプリケーション管理者ロールが必要です。 次に、azd up ポストプロビジョニング フック:

    • Microsoft Entra エージェント ID オブジェクト (ブループリント、エージェント ID、エージェント ユーザー) を作成します。
    • Microsoft Graph MCP Server for Enterprise を有効にします。
    • n8n の準備が整うのを待ちます。
    • 所有者アカウントを作成します。
    • @astaykov/n8n-nodes-entraagentid コミュニティ ノードをインストールします。
    • n8n オートメーション用の API キーを生成します。
    • 5 つの資格情報を実際の値で作成します。
    • 3 つのデモ ワークフローをインポートしてアクティブ化します。

デプロイが完了すると、スクリプトによって n8n URL と構成内容の概要が出力されます。 テナント ID はAzureサインインから自動検出されるため、手動で構成する必要はありません。

デプロイされたリソースを調べる

デプロイでは、Azureリソース、Microsoft Entra ID オブジェクト、およびサンプル ワークフローをサポートするために連携する n8n 構成資産が作成されます。

Azure インフラストラクチャ リソースを確認する

デプロイでは、次の Azure リソースが作成されます。

  • Container Apps 環境: n8n とテスト用 SPA をホストします。
  • n8n Container App: HTTPS イングレスを使用して公式の n8nio/n8n イメージを実行します。
  • 静的 Web アプリ: OBO Webhook フローの SPA をテストします。
  • PostgreSQL フレキシブル サーバー: ワークフロー、資格情報、実行履歴の永続ストア (バースト可能 B1ms)。
  • ストレージ アカウントとファイル共有: 永続的な /home/node/.n8n ディレクトリ。 コミュニティ ノードと構成は再起動後も存続します。
  • Azure AI エージェント ワークフローによって使用される OpenAI: GPT モデルのデプロイ。
  • Log Analytics Workspace: 診断と監視。

Microsoft Entra ID オブジェクトを確認する

自動化では、これらのオブジェクトが 1 回作成され、後続の実行時に再利用されます。

  • エージェント ID ブループリント: フェデレーション ID 資格情報を介してエージェント ID に代わってトークンを発行するアプリの登録。
  • エージェント ID サービス プリンシパル: AI エージェントのサービス プリンシパル。 Microsoft Graphトークンと MCP トークンを自律的に取得します。
  • エージェント ユーザー アカウント: 委任された (OBO) トークン フローを有効にするクラウド専用ユーザー ID。
  • シングル ページ アプリ (SPA) アプリの登録: リダイレクト URI と Blueprint API のアクセス許可で事前構成された Webhook デモ用のクライアント アプリ。

n8n 資格情報とワークフローを確認する

プロビジョニング後フックは、n8n を自動的に構成します。

作成された資格情報:

  • EntraAgentID - Autonomous: アプリ専用の Microsoft Graph API トークン (ユーザー コンテキストなし)。
  • EntraAgentID - エージェント ユーザー OBO: エージェント ユーザーに代わって委任されたトークン。
  • Azure OpenAI: AI エージェント ワークフロー用にデプロイされた GPT モデルへの接続。
  • AgentID Auth Manager - アクセス トークン: 認証マネージャーからダウンストリーム ノードへのトークン転送。
  • AuthManager のベアラー: MCP 呼び出しのトークン転送用ベアラー。

インポートされたワークフロー:

  • エージェント ID Auth Manager - MCP Enterprise のエージェント ユーザー: エージェント ユーザーの委任された MCP トークンを取得し、サブワークフローに転送します。
  • HTTP 要求と自律エージェント トークン: アプリ専用トークンを使用してMicrosoft Graphを直接呼び出す自律エージェントを示します。
  • Webhook - 対話型エージェント (代理): SPA からベアラー トークンを受信し、認証マネージャーを呼び出し、サインインしているユーザーの代わりに Graph MCP サーバー経由で応答する Webhook エントリ ポイント。

トークン フローについて

n8n デプロイでは、次の 2 つのトークン フロー パターンがサポートされています。

  • 自律 (アプリのみ): n8n ワークフローでは、エージェント ID ブループリント資格情報(Federated Identity Credentials を使用)を利用して、エージェント ID サービス プリンシパルのアプリ専用トークンを取得します。 その後、ワークフローはこのトークンを使用してMicrosoft Graphを直接呼び出します。 ユーザー コンテキストは関係しません。

  • MCP を使用した On-Behalf-of (OBO): ブラウザー ベースの SPA は、ベアラー トークンを n8n webhook に送信します。 Webhook は Auth Manager ワークフローを呼び出します。このワークフローでは、Blueprint 資格情報を使用して、エージェント ユーザーに代わって委任されたトークンを取得します。 Auth Manager は、Microsoft Graph MCP Server for Enterprise を呼び出すサブワークフローにトークンを転送します。このサブワークフローでは、MCP ツールの呼び出しが委任されたトークンを使用して Microsoft Graph API 要求に変換されます。

どちらのパターンでも、エージェント ID ブループリントはトークン ファクトリとして機能します。 エージェント ID ブループリントは、エージェント自体に資格情報を格納せずに、エージェント ID のトークンを発行します。 Auth Manager コミュニティ ノードは、各ワークフロー実行内でトークンの取得と AES-256-GCM キャッシュを処理します。

テスト SPA をデプロイする (省略可能)

テスト SPA は、ブラウザーからの OBO Webhook フローを示す静的 JavaScript アプリです。

  1. 最初のプロビジョニングが完了した後にデプロイします。

    azd deploy spa
    

MCP サーバーのスコープについて

このセットアップでは、次の委任された MCP.* スコープがエージェント ID サービス プリンシパルに付与されます。 これらのスコープは、対応するMicrosoft Graphを反映します (たとえば、MCP.User.Read.AllUser.Read.All に対応します)。

  • MCP.User.Read.All: すべてのユーザーを読み取ります。
  • MCP.Organization.Read.All: テナント組織の情報を読み取る。
  • MCP.Group.Read.All: すべてのグループを読み取る。
  • MCP.GroupMember.Read.All: グループ メンバーシップを読み取ります。
  • MCP.Application.Read.All: アプリの登録とサービス プリンシパルを読み取ります。
  • MCP.AuditLog.Read.All: サインイン ログと監査ログを読み取ります。
  • MCP.Reports.Read.All: Microsoft 365 の使用状況レポートを読み取る。
  • MCP.Policy.Read.All: 条件付きアクセス ポリシーを読み取ります。
  • MCP.Domain.Read.All: 検証済みドメインを読み取ります。
  • MCP.Device.Read.All: Microsoft Entra登録済みデバイスを読み取る。

さらにスコープを追加するには、$MCP_SCOPESscripts/Setup-EntraAgentId.ps1配列を編集し、azd provision再実行します。

メモ

MCP サーバーは、委任されたアクセス許可フローのみをサポートします。 アプリ専用のMicrosoft Graph呼び出しには自律資格情報を使用します。

展開を再実行して更新する

デプロイは完全に同一化された操作です。

  • Bicepは、既に存在Azureリソースをスキップします。
  • azd 環境では、最初の実行後Microsoft Entraオブジェクト ID (ブループリント、エージェント ID、エージェント ユーザー、ブループリント シークレット) が保存され、後続の実行時に再利用されます。
  • n8n 構成 (資格情報、ワークフロー) は、実行ごとに新しく適用され、破損した状態を修復できます。

インフラストラクチャを変更せずにプロビジョニング後のスクリプトだけを再実行するには、プロビジョニングをもう一度実行します。 Bicep テンプレートは、インフラストラクチャの変更を検出せず、デプロイ フックのみを実行します。

azd provision   # Bicep detects no changes, runs hooks only

スクリプトを手動で実行する (省略可能)

必要に応じて、構成スクリプトを個別に実行できます。

  • 完全なエンド ツー エンド (Microsoft Entra と n8n):

    .\scripts\Run-All.ps1 `
        -TenantId  "<your-tenant-id>" `
        -N8nUrl    "https://ca-n8n-<token>.<region>.azurecontainerapps.io"
    
  • n8n 構成のみ (Entra のセットアップをスキップ):

    .\scripts\Configure-N8n.ps1 `
        -N8nUrl          "https://ca-n8n-<token>.<region>.azurecontainerapps.io" `
        -OwnerEmail      "admin@contoso.com" `
        -OwnerPassword   "MyStr0ngPassword!"
    
  • Entra のセットアップのみ:

    .\scripts\Setup-EntraAgentId.ps1 `
        -TenantId  "<your-tenant-id>" `
        -N8nUrl    "https://ca-n8n-<token>.<region>.azurecontainerapps.io"
    

リソースをクリーンアップする

デプロイによって作成されたすべてのAzure リソースを削除し、保持されているデプロイ状態を消去します。

azd down --purge

メモ

azd down コマンドはAzureリソースを削除しますが、ブループリント、エージェント ID、エージェント ユーザー アカウントなどのMicrosoft Entraオブジェクトは削除しません。 不要になった場合は、Microsoft Entra 管理センターでこれらのオブジェクトを手動で削除します。