0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Power Platform 設計の流儀 第1回】外部アプリからDataverseを叩くなら"アプリケーションユーザー"一択|なぜ普通のユーザーじゃダメなのか

0
Last updated at Posted at 2026-06-16

この記事の要点

  • 外部 Web アプリや Azure Functions などから Dataverse を呼び出すときは、アプリケーション ユーザー(Application User) を使うのが正解です。
  • アプリケーション ユーザーは Dynamics 365 / Power Apps のライセンス不要です。
  • 人間のユーザーアカウントを使い回す方式は ライセンス・セキュリティ・運用の3つの理由で NG
  • PL-600*(Microsoft Power Platform Solution Architect)の 頻出論点です。本記事では実務シナリオを通じて解説します。
    *:2026年6月末廃止のMicrosoft Power Platformの最上位資格

はじめに

「カスタム Web アプリから Dataverse のデータを読みたい」「Azure Functions の夜間バッチで Dataverse に書き込みたい」――こうしたサーバー間連携(Server-to-Server, S2S)は Power Platform Solution Architect の現場で頻出のシナリオです。

ところが、この場面で「とりあえず管理者の ID とパスワードを使えばいいか」と発想すると、ライセンス・セキュリティ・運用の3面で確実に詰みます

正解は Microsoft が公式に用意している アプリケーション ユーザー(Application User) という仕組みを使うこと。本記事ではこの仕組みを、PL-600 の試験シナリオを題材に、初学者にもわかるよう一気通貫で解説します。


こんな方に向けた記事です

  • PL-600(Microsoft Power Platform Solution Architect)の受験を控えている方
  • 外部システムと Dataverse を統合する案件を進めている開発者・アーキテクト
  • 「Application User って何が嬉しいの?」を腹落ちさせたい方

題材:あるコールセンターの統合シナリオ

仮想の事例で考えてみましょう。

コールセンター 24h 対応シナリオ

ある通信会社の 24 時間コールセンターでは、次の3つの業務要件があります。

  1. 新人オペレーター:顧客から入電したときに、本人確認テンプレートを画面で参照しながら応対する
  2. エスカレーション担当:複雑な技術問い合わせの転送状況を、外出先のモバイル アプリで管理したい
  3. インシデント対応チーム:すでに社内には .NET で構築された既存のコールセンター業務アプリ が稼働している。Microsoft Dataverse の Contact テーブルに保存されている VIP / Caution / Watch の顧客フラグと、いま着信中の顧客情報を即座に突合したい

ただし、インシデント対応チームには Dynamics 365 のライセンスが付与されていない。彼らは既存の業務アプリのみを使う運用です。

同社はこの既存業務アプリと Dataverse を統合したいと考えています。

このとき、以下3つの記述の正誤を考えてみてください。

# 記述 答え
1 インシデント対応チームが Dataverse の顧客データを読み取るには、Dynamics 365 ライセンスが必要である いいえ
2 既存の業務アプリと Dataverse の通信は、Application User を使用して確立できる はい
3 インシデント対応チームが顧客データを読み取れるようにするには、Dataverse でチームのメンバー(人間)にセキュリティ ロールを割り当てる必要がある いいえ

「なんで人間側にライセンスもロールもいらないの?」――その答えがまさに Application User にあります。順を追って見ていきましょう。


アプリケーション ユーザーとは何か

ひとことでいうと:

Microsoft Entra ID に登録された「アプリそのもの」を主体として、Dataverse 上で動作させるための特殊なユーザー

人間ではなく「アプリ」を Dataverse の世界に登録するイメージです。

普通のユーザーとの違い

観点 人間ユーザー アプリケーション ユーザー
認証主体 人(メール/パスワード/MFA) アプリ(クライアント シークレットまたは証明書)
ライセンス Dynamics 365 / Power Apps が必要 不要(Unlicensed)
ログイン アプリ画面に対話的にログイン サーバー間(S2S)で OAuth トークンを取得
退職・異動の影響 あり なし(アプリは退職しない)
用途 エンドユーザー業務 バックエンド/統合/自動化

ポイントは「ライセンス不要」と「人ではなくアプリ」の2点です。


なぜ普通のユーザーで代用してはいけないのか

「Application User を作るのが面倒だから、社内の運用 ID(人間アカウント)を使い回せばいいじゃないか」――この発想で実装している現場、実は少なくありません。なぜ NG なのか、3つの理由を整理します。

理由1:ライセンス費用が無駄になる

人間ユーザーで Dataverse を叩くには、その人間に Dynamics 365 / Power Apps のライセンスが必要です。バッチ処理用に契約するライセンス代は、年間で見ると無視できない金額になります。Application User なら ライセンス0円 です。

理由2:退職・パスワード変更で本番が止まる

人間アカウントは退職・人事異動・パスワード変更で簡単に死にます。「夜間バッチが突然止まった → 担当者が退職して ID が無効化されていた」――これは現場でよくある事故です。Application User は人に紐づかないので、この事故が原理的に起きません。

理由3:資格情報をアプリに埋め込む脆弱性

人間アカウントの ID/パスワードを構成ファイルに書く、コードに埋め込む――これはセキュリティ監査で必ず指摘される重大リスクです。Application User なら、クライアント シークレットを Azure Key Vault に格納し、さらに 証明書ベース認証 に切り替えれば、より強固に運用できます。


認証の仕組み(5分でわかる OAuth 2.0 Client Credentials)

Application User の裏側で動いている認証フローは、OAuth 2.0 Client Credentials Grant と呼ばれるサーバー間専用のフローです。

カスタム Web アプリ
     │
     │  ① クライアント ID + シークレット(または証明書)を送る
     ▼
Microsoft Entra ID(トークン発行サーバー)
     │
     │  ② アクセストークンを返す
     ▼
カスタム Web アプリ
     │
     │  ③ Bearer トークンをヘッダーに付けて Dataverse Web API を叩く
     ▼
Dataverse
     │
     │  ④ トークンを検証し、対応する Application User の権限でデータを返す
     ▼
カスタム Web アプリ(結果を画面表示)

注目すべきは ④ です。Dataverse はトークンを検証したあと、Entra ID のアプリ ID から 対応する Application User を引き当てて、その Application User に付与されたセキュリティ ロールの範囲でデータアクセスを許可します。

「アプリを Dataverse の住人として登録しておく」――Application User とは、そういう仕掛けです。


作り方:5ステップ

実際の作成手順を整理します。

Step 1:Microsoft Entra ID でアプリ登録

Azure Portal → Microsoft Entra ID → App registrationsNew registration

  • アプリ名を入力(例:Airport-Security-WebApp
  • サポート対象アカウントは「シングル テナント」が基本
  • Redirect URI はサーバー間連携なら不要

Step 2:クライアント シークレットまたは証明書を発行

登録したアプリの Certificates & secrets から発行。

  • 本番運用なら証明書ベース認証を推奨(シークレットより安全)
  • シークレットの場合は Azure Key Vault に保管

Step 3:Power Platform 管理センターで Application User を作成

Power Platform 管理センター を開き、

  1. 環境 から対象環境を選択
  2. 設定ユーザー + アクセスアプリケーション ユーザー
  3. + 新しいアプリ ユーザー
  4. Entra ID で登録したアプリを選択
  5. Business UnitEmail address を設定
  6. セキュリティ ロール を割り当てて保存

Step 4:必要最小限のセキュリティ ロールを設計

Application User にも当然ながら Dataverse のセキュリティ ロールを付与します。ここで大事なのは「最小権限の原則」。

  • 既存の「System Administrator」を付与するのはやめましょう(権限が広すぎる)
  • 業務に応じてカスタム ロールを作る(例:Airport-Security-Read-Only
  • 行レベル(ビジネス ユニット スコープ)も適切に絞る

Step 5:アプリ側のコードで OAuth トークンを取得

.NET / Python / Node.js / Java など、どの言語でも MSAL(Microsoft Authentication Library)を使えば数行で実装できます。

// .NET 例(MSAL.NET)
var app = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithClientSecret(clientSecret)
    .WithAuthority($"https://login.microsoftonline.com/{tenantId}")
    .Build();

var result = await app
    .AcquireTokenForClient(new[] { "https://yourorg.crm.dynamics.com/.default" })
    .ExecuteAsync();

// result.AccessToken を Authorization: Bearer ... ヘッダーに付けて
// Dataverse Web API(/api/data/v9.2/contacts 等)を呼ぶ

これで、インシデント対応チームは Dynamics 365 のライセンスを持っていなくても、既存の業務アプリ越しに Dataverse を検索できるようになります。


重要ルール:「1 Entra アプリ : 1 Application User per 環境」

公式ドキュメントに明記されている重要な制約です。

In an environment, you can only have one application user for each Microsoft Entra-registered application.
(1つの環境内で、1つの Entra ID 登録アプリに対して作成できる Application User は1つだけ)

つまり、同じアプリで複数の Application User を環境内に作ることはできません。逆に、用途別にアプリを分けて登録すれば、それぞれを別の Application User として作成でき、ロールも個別に絞れます。

実務では「読み取り専用バッチ用アプリ」「書き込みバッチ用アプリ」のように Entra 側で2つ登録し、Application User もそれぞれ作るのが推奨パターンです。


PL-600 試験でのポイント整理

ここまでの内容を試験対策の視点でまとめます。

論点 出題されたら覚えておくこと
外部アプリ → Dataverse の認証 Application User + OAuth 2.0 Client Credentials
Application User のライセンス 不要(Unlicensed)
セキュリティ ロールの付与先 Application User 本体(外部アプリのエンドユーザー人間ではない)
1 環境内の制約 1 Entra アプリにつき 1 Application User
推奨される認証情報 証明書ベース認証 > クライアント シークレット(本番は証明書)
シークレット保管 Azure Key Vault

ケース解析:冒頭のコールセンター シナリオを解く

最初のシナリオに戻り、3つの記述の正解を確認します。

記述1:「インシデント対応チームが Dataverse の顧客データを読み取るには、Dynamics 365 ライセンスが必要」→ いいえ

インシデント対応チームのメンバー(人間)は Dynamics 365 アプリに直接ログインしないため、ライセンスを持つ必要はありません。彼らは既存の .NET 業務アプリを使っており、その業務アプリが Application User を介して Dataverse を叩きます。Application User はライセンス不要なので、対応チームのメンバーへのライセンス購入は発生しません。

記述2:「既存の業務アプリと Dataverse の通信は、Application User を使用して確立できる」→ はい

これがまさに本記事の主題。Application User は外部アプリと Dataverse のサーバー間連携のために用意された公式の仕組みです。

記述3:「インシデント対応チームのメンバー(人間)にセキュリティ ロールを割り当てる必要がある」→ いいえ

セキュリティ ロールは Dataverse のユーザー にしか割り当てられません。対応チームのメンバーは Dataverse のユーザーではない(ライセンスを持たない)ため、ロールを直接渡すことができません。ロールを割り当てるべき相手は Application User 本体です。

3問とも、Application User の本質を理解していれば一直線に解けるようになります。


よくある誤解 Q&A

Q1. Application User にも MFA は効きますか?

A. 効きません。Application User はサーバー間専用の認証主体で、対話的なログインを行わないため MFA の概念がそもそも適用されません。代わりに、クライアント シークレットや証明書の安全な保管・ローテーションが責任の中心になります。

Q2. Application User は条件付きアクセス(Conditional Access)の対象になりますか?

A. Workload Identities 向けの条件付きアクセス(Entra ID Premium P1/P2 が必要)に対応できます。位置情報や IP 範囲などで Application User の利用を制限できます。

Q3. Application User の所有レコードはどうなる?

A. Application User が作成したレコードは Application User が「所有者」になります。本番運用ではこれが想定外の影響を生むため、作成直後に所有者を別ユーザーに付け替える設計を入れることがあります。

Q4. Managed Identity でも Application User を作れる?

A. 作れます。Azure リソース(Functions / Logic Apps Standard / App Service など)に割り当てた マネージド ID を、Application User として登録できます。シークレット管理が完全に不要になるため、Azure ホストのアプリでは積極的に検討する価値があります。

Q5. 削除はできる?

A. 一度 非アクティブ化(Deactivate) したあと、削除(Delete) できます。削除前に、その Application User が所有しているレコードを別ユーザーに再割り当てする必要があります。


まとめ

  • 外部アプリから Dataverse を呼ぶときは Application User を使うのが Microsoft 公式の正解
  • ライセンス不要・サーバー間専用・人に紐づかない という3点が中核の利点
  • 認証は OAuth 2.0 Client Credentials。シークレットより証明書ベースを推奨
  • セキュリティ ロールは Application User 本体 に最小権限で付与する
  • PL-600 では「外部アプリ × Dataverse」の文脈で頻出。反射的に Application User を思い出せるかが分かれ目

「外部アプリと Dataverse を繋ぐ、安全で経済的な架け橋」――それが Application User の正体です。ホテルのコンシェルジュ(Application User)が、ロビーにいる宿泊客(外部アプリのユーザー)の代わりに、奥の金庫室(Dataverse)の鍵を開ける――そんなイメージで覚えると腹に落ちやすいかもしれません。宿泊客(人間)には金庫室の鍵もホテル従業員バッジ(ライセンス)も渡さず、コンシェルジュ(Application User)にだけ必要最小限の鍵(セキュリティ ロール)を持たせる、という設計です。


参考リンク


最後まで読んでいただきありがとうございました。
為になった、応援して下さる方はいいね・フォローをして下さると嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?