📏
Microsoft Entra の条件付きアクセスをエクスポート・インポートする
はじめに
検証環境を新規作成する機会があり、条件付きアクセスを一つずつポータルから設定するのは手間なので、エクスポート・インポートにトライしてみます。
エクスポート
現状では Azure ポータルや Entra 管理センターからエクスポートする機能がないため、Microsoft Graph PowerShell の Invoke-MgRestMethod を使用して Microsoft Graph API を叩きます。
使用する Microsoft Graph API の詳細や Scope の情報はこちら。
# Microsoft Graph にサインイン
Connect-MgGraph -Scopes "Policy.Read.All"
# Microsoft Graph API の uri を指定
$uri = "https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies"
# 条件付きアクセスの取得
$json = Invoke-MgRestMethod -Method GET -Uri $uri | ConvertTo-Json -Depth 8
# JSON ファイルにエクスポート
$json | Out-File -FilePath "ConditionalAccessPolicies.json"
ポリシー編集
いくつか元のテナントに紐づく情報など使用できないので、以下の点を編集しました。環境によってはその他もあると思うので、後述の反映時のエラー メッセージを確認してください。
- createdDateTime の削除
- modifiedDateTime の削除
- id の削除
- authenticationStrength@odata.context の削除 (id を含むため)
- user や group のテナント固有のオブジェクトの削除し、All などに変更
- applications のテナント固有のオブジェクトの削除、All などに変更
- state を disabled に変更 (反映後にロック アウトされないようにするため)
新テナントに反映
Azure ポータルや Entra 管理センターから以下のようにファイル反映する機能が準備されているのですが、複数ルールではなく 1 ルールずつのため結局手間はかかるということで PowerShell にしました。
使用する Microsoft Graph API の詳細や Scope の情報はこちら。
# Microsoft Graph を切断
Disconnect-MgGraph
# Microsoft Graph にサインイン**(新しいテナント)**
Connect-MgGraph -Scopes "Policy.Read.All, Policy.ReadWrite.ConditionalAccess, Application.Read.All"
# JSON ファイルを読み込む
$policies = (Get-Content -Path "ConditionalAccessPolicies.json" | ConvertFrom-Json).value
# Graph API を使用してポリシーを作成
foreach ($policy in $policies) {
# Graph API に POST リクエストを送信
$response = Invoke-MgRestMethod -Method Post -Uri $uri -Body ($policy | ConvertTo-Json -Depth 8)
# レスポンスを表示
$response
}
コメント
テナントを跨いでエクスポート・インポートする場合、テナント固有の設定がされていると多数のエラーが出ます。そのトラブル シューティングを考えると、頑張ってポータルから設定したほうが早いかもしれないです。
Discussion