Microsoft Entra ID(旧 Azure AD)の Free で、ユーザー作成から手元アプリの SSO まで試す

Microsoft Entra ID(旧 Azure AD)の Free で、ユーザー作成から手元アプリの SSO まで試す

Microsoft Entra ID Free のテナントで、テストユーザーの作成とMFA登録、アプリ登録と手元のPythonサンプルでのSSO、割り当てによる制限、サインインログの確認まで試しました。Free で足りる範囲とP1が必要になる境目をまとめます。
2026.10.18

どうも!オペ部の西村祐二です!

Microsoft Entra ID(旧 Azure Active Directory)を個人で触ってみたいと思っても、ドキュメントを読むだけでは分かりにくいところがあります。どこまで無料でできるのか、MFA はどう求められるのか、自分のアプリに SSO を組み込むと何が起きるのか、といった点です。

この記事では、Azure のアカウントに付いてくる Microsoft Entra ID Free のテナントで、次の流れを実際に試しました。

  1. テナントとライセンスを確認する
  2. テストユーザーとグループを作る
  3. テストユーザーで初めてサインインし、MFA を登録する
  4. アプリを登録し、手元で動かす Microsoft の Python サンプル(ms-identity-python-webapp)でサインイン(SSO)する
  5. アプリにサインインできるユーザーを割り当てで絞る
  6. サインインログで結果を確かめる

画面は、2026年10月17日時点の Microsoft Entra 管理センター(entra.microsoft.com)の日本語 UI です。一部の画面は英語で表示されました。画像では、メールアドレス、テナント名、各種 ID、IP アドレス、場所などを伏せています。条件付きアクセスなど P1 以上の機能は扱いません。

Entra ID Free でできること・できないこと

今回試した範囲で、Free で足りるかどうかを先にまとめます。

機能 Free 確認方法
ユーザー・グループの作成 使える 画面で作成
セキュリティの既定値群による MFA 使える 画面で確認し、テストユーザーで MFA を登録
アプリの登録とサインイン(SSO) 使える 手元のサンプルアプリ(ms-identity-python-webapp)でサインイン
アプリへのユーザーの個別割り当て 使える 画面で割り当て、未割り当てのユーザーが拒否されることを確認
アプリへのグループ割り当て P1 以上 画面に「グループを割り当てることができません」と表示。公式ドキュメントにも P1/P2 が必要と記載
動的メンバーシップのグループ(ユーザー対象) P1 以上 公式ドキュメントに記載
条件付きアクセス P1 以上 ライセンスのドキュメントで確認
サインインログ・監査ログの保持期間 7日(P1/P2 は30日) データ保持期間のドキュメントで確認

個人で認証の流れを学んだり、手元のアプリに Entra ID のサインインを組み込んだりする用途であれば、Free で一通り試せました。グループ単位の割り当てや条件付きアクセスのように、組織で運用するときに使う機能から P1 が必要になります。料金はMicrosoft Entra の価格ページにまとまっています。

Entra ID Free のテナントを用意する

Azure の無料アカウントの条件

Entra ID Free は、Azure や Microsoft 365 などのサブスクリプションに含まれています。個人でゼロから始める場合は、Azure の無料アカウントを作るのが入口になります。ページの FAQ によると、要点は次のとおりです。

  • 必要なものは、電話番号、プリペイドではないクレジットカードまたはデビットカード、Microsoft アカウントまたは GitHub アカウント
  • USD$200 のクレジットを最大30日間使える
  • 本人確認のため、カードに USD$1 の一時的な承認がかかることがある(認証後に取り消し)
  • 従量課金制に移行しない限り課金されない。30日を過ぎるかクレジットを使い切ったあとに移行しなければ、アカウントとサービスは無効になる

無料アカウントは新規ユーザーだけが対象で、1人1つまでです。今回 GitHub アカウントでサインアップに進んだところ、以前に Azure を使ったことがあるアカウントだったため、次の画面が表示されました。

「既に Azure アカウントをお持ちのようです」と表示されたサインアップ画面

無料アカウントを作れなくても、以前に Azure を使ったときのテナントはそのまま残っています。Entra ID Free はテナントに付くものなので、今回はこの既存のテナントで進めました。

テナントとライセンスを確認する

Microsoft Entra 管理センターの「Entra ID」>「概要」を開くと、テナントの基本情報が表示されます。

Entra 管理センターの概要。名前は既定のディレクトリ、ライセンスは Microsoft Entra ID Free

名前は「既定のディレクトリ」、ライセンスは「Microsoft Entra ID Free」でした。プライマリドメインは <テナント名>.onmicrosoft.com 形式で、今回はサインアップに使ったメールアドレスをもとにした名前になっていました。

「ユーザー」>「すべてのユーザー」を見ると、自分のアカウントのユーザー プリンシパル名(UPN)が <アカウント>#EXT#@<テナント名>.onmicrosoft.com の形になっていました。Microsoft アカウントでサインアップしてテナントを作ったため、外部の ID としてテナントに登録されています。ユーザーの種類は「メンバー」で、ロールはグローバル管理者です。このあと作るテストユーザーは、テナントのドメインを持つ内部のユーザーです。

ユーザー一覧。自分のアカウントの UPN が #EXT# を含む形式で、ユーザーの種類はメンバー

セキュリティの既定値群を確認する

「概要」>「プロパティ」の「セキュリティの既定値群の管理」を開くと、「有効 (推奨)」になっていました。

セキュリティの既定値群が有効 (推奨) になっている画面

セキュリティの既定値群は、すべての新しいテナントで最初から有効になっている、Microsoft 推奨の基本設定です。ユーザーに MFA の登録を求めるなどの保護をまとめて適用します。Free でも使える機能で、このテナントでも有効になっているため、このあと作るテストユーザーにも MFA の登録が求められます。

テストユーザーとグループを作る

ユーザーを作る

「ユーザー」>「すべてのユーザー」>「新しいユーザー」>「新しいユーザーの作成」を開きます。メニューには「外部ユーザーの招待」もありますが、今回はテナント内のユーザーを作ります。

新しいユーザーの作成画面。UPN、表示名、自動生成のパスワードを入力

「基本」タブに次の値を入れて、「レビューと作成」から作成しました。

  • ユーザー プリンシパル名: test-user01(ドメインはテナントの onmicrosoft.com)
  • 表示名: Test User 01
  • パスワード: 「パスワードの自動生成」のまま

自動生成されたパスワードは、控えておきます(今回は 1Password に保存しました)。このパスワードは一時的なもので、初回のサインインで変更を求められます。

作成直後は一覧に反映されていませんでしたが、再読み込みすると2人目のユーザーとして表示されました。

ユーザー一覧に Test User 01 が追加された画面

グループを作る

「グループ」>「すべてのグループ」>「新しいグループ」から、セキュリティグループを作りました。

新しいグループの作成画面。グループの種類はセキュリティ、メンバーシップの種類は割り当て済み

  • グループの種類: セキュリティ
  • グループ名: entra-free-test-group
  • メンバーシップの種類: 割り当て済み
  • メンバー: Test User 01

メンバーシップの種類の選択肢には「割り当て済み」「動的ユーザー」「動的デバイス」が表示されました。ただし、公式ドキュメントによると、動的メンバーシップのグループは、ユーザーを対象にする場合に P1 ライセンスが必要です。今回は動的グループを作成していません。

テストユーザーで初めてサインインする

テストユーザーで My Apps にサインインしました。管理者でサインインしているものとは別のブラウザセッションを使っています。

パスワードを更新する

一時パスワードでサインインすると、最初に「パスワードの更新」を求められました。

パスワードの更新画面。初めてサインインするか、パスワードの有効期限が切れたため更新が必要と表示

MFA を登録する

パスワードを更新すると、続けて「アカウントをセキュリティ保護しましょう」と表示され、MFA の登録に進みます。

アカウントをセキュリティ保護しましょう画面。Microsoft Authenticator のセットアップを案内

セキュリティの既定値群には、以前は MFA の登録を14日間先延ばしできる猶予がありました。公式ドキュメントによると、この猶予は 2024年7月29日以降、新しいテナントでも既存のテナントでもなくなっています。今回も、初回のサインインでその場で登録を求められました。

画面は Microsoft Authenticator のインストールを案内しますが、「別の認証アプリを設定する」から、ほかの TOTP 対応アプリも登録できます。今回は 1Password のワンタイムパスワードを使いました。

Microsoft Authenticator のインストール画面。下に別の認証アプリを設定するのリンク

「別の認証アプリを設定する」を選ぶと QR コードが表示されます。「Can't scan the QR code?」を開くと、アカウント名と秘密鍵がテキストで表示されるので、1Password のワンタイムパスワード欄に登録できます。

アカウント名と秘密鍵が表示された画面。秘密鍵はぼかしている

認証アプリが表示する6桁のコードを入力すると、登録が完了します。

Authenticator アプリが追加されました画面

管理者側で「ユーザー」> Test User 01 >「認証方法」を見ると、「ソフトウェア OATH トークン」が登録されていました。既定のサインイン方法は「OATH TOTP ワンタイム コード」です。

テストユーザーの認証方法。ソフトウェア OATH トークンが使用可能な認証方法として登録されている

アプリを登録して手元のサンプルでサインインする

次に、Entra ID にアプリを登録し、手元の Mac で動かす Web アプリから、テストユーザーでサインインします。Web アプリには、Microsoft が Azure-Samples で公開している Python(Flask)のサンプル ms-identity-python-webapp を使いました。動かし方は後半の「サンプルアプリを動かす」で説明します。

サインインの流れ

図は自作した概念図で、公式の構成図ではありません。

自作した構成の概念図。手元の Mac のブラウザでサンプルアプリを開くと(1)、アプリがブラウザを Entra ID のサインイン画面へリダイレクトする(2)。ブラウザでサインイン、同意、割り当ての確認を行い(3)、ブラウザは認可コードを持ってアプリに戻る(4)。アプリは認可コードとクライアントシークレットで Entra ID から ID トークンを取得する(5)。割り当てのないユーザーは 3 の時点でエラーになり、4 以降に進まない

ブラウザでサンプルアプリを開くと、アプリはブラウザを Entra ID のサインイン画面へリダイレクトします。ブラウザ側でサインインと同意を済ませると、ブラウザは認可コードを持ってアプリのリダイレクト URI に戻ります。アプリはその認可コードとクライアントシークレットを使って、Entra ID から ID トークンを受け取ります。割り当てを必須にした場合、割り当てのないユーザーは 3 のサインイン画面で止まり、アプリには戻りません。

アプリを登録する

「アプリの登録」>「新規登録」を開き、次の内容で登録しました。

アプリケーションの登録画面。名前、サポートされているアカウントの種類、リダイレクト URI を入力

  • 名前: entra-free-sample-webapp
  • サポートされているアカウントの種類: シングル テナントのみ - 既定のディレクトリ
  • リダイレクト URI: プラットフォームは「Web」、URI は http://localhost:5001/getAToken

サポートされているアカウントの種類の選択肢は、「シングル テナントのみ」「複数の Entra ID テナント」「任意の Entra ID テナント + 個人用 Microsoft アカウント」「個人用アカウントのみ」の4つでした。今回はテナント内のユーザーだけを対象にするので、シングルテナントを選びます。

サンプルの手順は 5000 番ポートを前提にしていますが、今回は 5001 にしました。今回の Mac(macOS 26.6.1)では、5000 番を AirPlay レシーバー(ControlCenter)が使っていたためです。5000 番を使っているプロセスは lsof -iTCP:5000 -sTCP:LISTEN で確認できます。

登録すると、アプリの概要画面が開きます。ここで「アプリケーション (クライアント) ID」と「ディレクトリ (テナント) ID」を控えます。

登録したアプリの概要画面。クライアント ID、テナント ID などが表示される

右側の「ローカル ディレクトリでのマネージド アプリケーション」のリンク先が、同時に作られたエンタープライズアプリケーションです。ユーザーの割り当ては、あとでこちらで設定します。

クライアントシークレットを作る

「証明書とシークレット」>「クライアント シークレット」>「新しいクライアント シークレット」から、シークレットを作りました。有効期限は既定の「推奨: 180 日 (6 か月)」のままです。

クライアントシークレットを作成した画面。値は隠している

値をコピーして 1Password に保存しました。

サンプルアプリを動かす

サンプルは、Azure-Samples の ms-identity-python-webapp を使いました。README から公式クイックスタートにリンクされている Python の Web アプリのサンプルで、Flask と、MSAL for Python をラップした identity ライブラリで書かれています。

環境は macOS 26.6.1、Python 3.13.13 で、パッケージ管理に uv、シークレットの受け渡しに 1Password CLI(op)を使いました。

git clone https://github.com/Azure-Samples/ms-identity-python-webapp.git
cd ms-identity-python-webapp
uv venv
uv pip install -r requirements.txt

Flask 3.1.3、ms-identity-python 0.9.2、msal 1.39.0 が入りました。

設定は .env に書きます。サンプルの .env.sample.entra-id には AUTHORITY、CLIENT_ID、CLIENT_SECRET、REDIRECT_URI の項目があります。クライアントシークレットはファイルに残したくないので、.env には書かず、起動するときに 1Password から環境変数で渡しました。

.env
AUTHORITY=https://login.microsoftonline.com/<ディレクトリ (テナント) ID>
CLIENT_ID=<アプリケーション (クライアント) ID>
REDIRECT_URI=http://localhost:5001/getAToken
CLIENT_SECRET="$(op read 'op://<vault>/<item>/<field>')" \
  uv run flask run --debug --host=localhost --port=5001

1Password を使わない場合も、CLIENT_SECRET を環境変数で渡せば同じように動きます。REDIRECT_URI は、Entra ID に登録した URI と完全に一致させます。サンプルはこの URI のパスを、サインイン後に戻ってくるルートとして使います。

サンプルの画面には表示名しか出ません。ID トークンのクレームも見られるように、templates/index.html の Welcome 行の下に2行足しました。

templates/index.html
<h2>Welcome {{ user.get("name") }}!</h2>
<h3>ID token claims</h3>
<pre>{{ user | tojson(indent=2) }}</pre>

テストユーザーでサインインする

テストユーザーのブラウザで http://localhost:5001/ を開くと、Entra ID のアカウント選択画面にリダイレクトされました。Test User 01 を選ぶと、初回は「要求されているアクセス許可」の同意画面が表示されました。

要求されているアクセス許可の画面。entra-free-sample-webapp が基本プロファイルの表示などを求めている

「このアプリケーションは Microsoft によって公開されたものではありません」と表示され、求められているアクセス許可は「View your basic profile」などでした。「承諾」を押すと、サンプルアプリに戻ります。

サンプルアプリの画面。Welcome Test User 01 と ID トークンのクレームが表示されている

「Welcome Test User 01!」と ID トークンのクレームが表示されました。name と preferred_username はテストユーザーの情報、tid はテナント ID、aud はアプリのクライアント ID です。iss の末尾が /v2.0 なので、v2.0 エンドポイントのトークンです。画像では識別子に当たる値を伏せています。

サインインできるユーザーを割り当てで絞る

アプリを登録した直後は、テナント内のユーザーなら誰でもこのアプリにサインインできます。公式ドキュメントにあるとおり、エンタープライズアプリケーション側で「割り当てが必要」を有効にすると、割り当てたユーザーだけに絞れます。

Free ではグループを割り当てられない

「エンタープライズ アプリ」> entra-free-sample-webapp >「ユーザーとグループ」>「ユーザーまたはグループの追加」を開くと、次の表示が出ました。

割り当ての追加画面。お客様の Active Directory プラン レベルでは、グループを割り当てることができませんと表示

選べるのはユーザーだけで、Free ではユーザーを1人ずつ割り当てることになります。ここでは追加せずに閉じました。

割り当てを必須にする

同じエンタープライズアプリの「プロパティ」で、「割り当てが必要ですか?」を「はい」にして保存しました。

エンタープライズアプリのプロパティ。割り当てが必要ですか? がはい

まだ誰も割り当てていないので、テストユーザーは拒否されるはずでした。ところが、サインインし直してもそのままサインインできました。「ユーザーとグループ」を見ると、Test User 01 がすでに割り当て済みで、割り当てられたロールは「既定のアクセス」(Default Access)でした。

ユーザーとグループの一覧。Test User 01 が割り当て済みになっている

この割り当てを削除し、サンプルアプリからサインアウトしてもう一度サインインすると、今度は Entra ID のサインイン画面でエラーになりました。

AADSTS50105 のエラー画面。アプリへのアクセスが割り当てられていないためブロックされた

表示されたメッセージは次のとおりです(ID とユーザー名は伏せています)。

AADSTS50105: Your administrator has configured the application entra-free-sample-webapp ('<id>') to block users unless they are specifically granted ('assigned') access to the application.

割り当てのないユーザーをブロックする設定になっている、という内容です。アプリには戻らず、Entra ID のサインイン画面で止まりました。

続けて「ユーザーまたはグループの追加」で Test User 01 を個別に割り当てると(ロールは Default Access)、再びサインインでき、クレームの画面まで表示されました。

なお、公式ドキュメントによると、割り当てを必須にしたアプリではユーザー本人による同意ができなくなります。今回はすでに同意済みだったので通りましたが、まだ同意していないユーザーで試す場合は、先に管理者の同意を付与しておく必要があります。

サインインログで確かめる

ここまでのサインインは、「Entra ID」>「監視と正常性」>「サインイン ログ」で確認できます。

サインインログ。Test User 01 の entra-free-sample-webapp への失敗 50105 や成功が並んでいる

上から、割り当て直したあとの「成功」、割り当てを外していたときの「失敗」(エラーコード 50105)が並んでいます。初回サインインのパスワード更新(50055)や MFA 登録(50072)、同意画面(65001)の途中なども「中断」として残っていました。ログが一覧に出るまでには数分かかりました。

Free ではサインインログの保持期間が7日なので、検証の記録を残したい場合は7日以内に確認しておきます。

片付け

検証で作ったものを、次の順で削除しました。

  1. 「アプリの登録」で entra-free-sample-webapp を開き、「削除」を選ぶ。「このアプリの登録を削除することによる影響を理解しています。」にチェックを入れて「削除」を押す
  2. 「ユーザー」で test-user01 を、「グループ」で entra-free-test-group を選んで削除する
  3. 手元のサンプルアプリを止め、クローンしたリポジトリを消す

1Password に保存したパスワード、TOTP、クライアントシークレットも、不要になったら削除します。

アプリの登録を削除するパネル。影響を理解しています、にチェックを入れて削除する

アプリの登録を削除すると、エンタープライズアプリの一覧からも消えました。削除したアプリの登録は「削除されたアプリケーション」タブに、削除したユーザーは「削除済みのユーザー」に残ります。どちらも削除から30日以内なら復元でき、それを過ぎると完全に削除されます。

まとめ

  • Azure の無料アカウントは1人1つまでで、以前に Azure を使ったことがあると作れません。ただ、そのときのテナントに Entra ID Free が付いているので、そこで試せます
  • 新しいユーザーは、初回サインインでパスワードの更新と MFA の登録を求められます。MFA の14日間の猶予はなくなっています。Microsoft Authenticator のほか、「別の認証アプリ」から 1Password などの TOTP アプリも使えます
  • Free のテナントでもアプリを登録でき、テストユーザーでサインインして ID トークンのクレームまで表示できました
  • 割り当てを必須にすると、未割り当てのユーザーは AADSTS50105 で拒否されます。ただし、ユーザーが同意したあとは割り当て済みになっていることがあります。Free ではグループ単位で割り当てられず、ユーザーを1人ずつ割り当てます
  • サインインログには成功、失敗(50105)、中断がエラーコード付きで残ります。Free の保持期間は7日です

ユーザーの個別割り当てまでは Free で試せました。割り当てる人数が増えてグループ単位で管理したくなったときや、条件付きアクセスが必要になったときが、P1 を検討するタイミングです。

参考

Microsoft Azure の利用費割引・活用サポート提供中!

クラスメソッドは、Microsoft Azureのうち特に生成AI領域に強みがあります。AWSの総合支援をメインに5,000社以上支援してきた実績をベースに、特にマルチクラウドでビジネスを最大化したいお客様に引き合いを頂いております。

Microsoft Azure 請求代行・技術支援サービスを詳しく見る

この記事をシェアする

関連記事