Entra Exporter を使って Entra ID のバックアップを取得する
はじめに
2025/4 時点で Microsoft Entra ID は利用者によるバックアップ・リストアの機能を有していません。理由としては、Microsoft 側の責任で地理的に分散されたデータセンターにレプリカを構成しており単一データセンターで障害が発生してもサービスが継続されるためです。
またメインの Entra ID システムが何らかの理由で停止した場合、バックアップの認証システムが稼働するようになっています。
このように耐障害性という観点では、利用者側でバックアップを取得する必要はありません。一方で、構成ミスや誤削除のリスクはあるため、そのような観点で構成のエクスポートを必要とするケースがあります。Microsoft としては各オブジェクトで論理的な削除機能を提供しているため、一定期間においては復旧可能ですが、それでも条件付きアクセスの構成をエクスポートしておきたいなどのニーズはあると思います。
上記のドキュメントに記載がありますが、現時点の構成エクスポートの方法は Microsoft Graph API や Microsoft Entra Exporter になります。以前、以下のブログで Graph API による条件付きアクセスのエクスポート・インポートを試しましたが、今回は Entra Expoter を試してみます。
Entra Exporter
Entra Exporter は以下の GitHub で提供されており、PowerShell モジュールとしてインストール可能です。
# モジュールのインストール
Install-Module EntraExporter
以下コマンドでログインします。
# ログイン
Connect-EntraExporter
Connect-EntraExporter
は裏側で以下の Connect-MgGraph
コマンドを実行しているため、ログイン時に大量のアクセス許可が表示されます。また Connect-EntraExporter
ではなく以下のコマンドでも代替できるようなので、コマンドを少し書き換えてサービス プリンシパルやマネージド ID で Entra Exporter を使用することも可能かと思います。
Connect-MgGraph -Scopes 'Directory.Read.All', 'Policy.Read.All', 'IdentityProvider.Read.All', 'Organization.Read.All', 'User.Read.All', 'EntitlementManagement.Read.All', 'UserAuthenticationMethod.Read.All', 'IdentityUserFlow.Read.All', 'APIConnectors.Read.All', 'AccessReview.Read.All', 'Agreement.Read.All', 'Policy.Read.PermissionGrant', 'PrivilegedAccess.Read.AzureResources', 'PrivilegedAccess.Read.AzureAD', 'Application.Read.All'
標準のデータセットをエクスポートする場合は以下コマンドを実行します。
# データのエクスポート
Export-Entra -Path 'C:\EntraBackup\'
すべてのデータをエクスポートする場合は -All
、特定のデータのみエクスポートする場合は -Type
パラメーターを使用します。
# 全データ
Export-Entra -Path 'C:\EntraBackup\' -All
# アプリケーション
Export-Entra -Path 'C:\EntraBackup\' -Type "Applications"
指定できる Type については All
, Config
, AccessReviews
, ConditionalAccess
, Users
, Groups
, Applications
, ServicePrincipals
, B2C
, B2B
, PIM
, PIMAzure
, PIMAAD
, AppProxy
, Organization
, Domains
, EntitlementManagement
, Policies
, AdministrativeUnits
, SKUs
, Identity
, Roles
, Governance
になっています。
データの確認
エクスポートされたデータは以下のようにカテゴリごとにフォルダに格納されています。
以下は条件付きアクセスですが、フォルダ名・ファイル名は管理用の GUID になってしまうため、どの設定か分からないのが難点です。目的の設定を探すには Grep できるツールで表示名で検索する必要があります。
データはこのように JSON 形式で記録されています。Graph API での実行結果をそのまま JSON ファイルで保存していると思われます。
リストアできるか?
条件付きアクセスは JSON ファイルのアップロードによる設定が可能であるため、試してみます。
[保存] ボタンだとエラーになります。同じ id になるため保存できない (=上書きはできない) ようです。
[レビューと作成] から進んでみます。この場合だと新たに設定画面が開き、新規ポリシーとして認識されるため、保存できます。
以下のようにコピーが作成されます。
次にアプリケーションを復元してみます。Entra 管理センターではサポートしていないので、Graph Explorer からトライしてみます。URIは https://graph.microsoft.com/v1.0/applications
です。
事前に [Modify permmisions] から Application.ReadWrite.All
を許可します。
まずは json ファイルをそのまま Request Body に貼って実行してみます。Property 'appId' is read-only and cannot be set.
というエラーになりました。
次に appId
を削除して実行すると、次は Property 'publisherDomain' is read-only and cannot be set.
というメッセージが出ます。同様に繰り返していくと、以下が指定できないようなので削除します。
- appId
- publisherDomain
- hint
- keyId
また passwordCredentials
の startDateTime
は過去時間が指定できないようで未来時間に変更します。
こちらで実行すると成功しました。
Entra 管理センターで確認してみます。同じ名称のアプリケーションが作成できていますが、クライアント ID やシークレットは異なりますので、リストアできたとしてもこのアプリケーションを使用しているスクリプトなどの改修は必要になると思います。
なお、今回はシンプルなアプリケーションで試したので使用している機能によっては他にもエラーが出るかもしれません。また、管理者の同意が必要な API のアクセス許可に関しては、同意が無効化されるため、改めて管理者の同意が必要になります。
まとめ
Microsoft Entra ID のエクスポート ツールである Entra Exporter を試してみました。主要な設定はエクスポートできるものの、リストアするのはハードルが高いため、あくまで設定情報の管理として使用し、設定を復元する場合は JSON ファイルを確認しつつ管理センターから実施するのが現実的と考えます。
また GitHub で Azure DevOps との統合による自動化のガイドがありますが、Azure Functions + BLOB ストレージを使用して簡易的な自動エクスポートを構成することも可能かと思います。
Discussion