鍵のロールオーバーとラベル付けガイド
鍵のロールオーバーとラベル付けガイド
自動ラベル付けが利用できない場合に DKE ラベルを適用する戦略
DKE ラベル付けの課題
これは、Microsoft 365 がコンテンツを読み取れないようにするため、移行前にファイルを手動または代替の方法でラベル付けする必要があることを意味します。
想定される解決策
手動ラベル付け
Purview Label クライアント経由
AIP スキャナー
オンプレミスでの自動ラベル付け
PowerShell
スクリプトベースのファイルラベル付け
1. 手動ラベル付け
エクスプローラーで個々のファイルまたはフォルダーを選択し、適切なラベルを適用する方法です。
欠点: エラー発生時のログが限られており、ファイルを 1 つずつ確認する必要があります。非常に時間がかかり、大規模な移行には適していません。
2. AIP スキャナー
定義されたポリシーに基づいて、ファイル共有や SharePoint オンプレミス上のファイルに自動的にラベルを適用するために、オンプレミスにインストールするツールです。
利点
大規模な環境や、ラベル付けをオンプレミス構成に拡張する必要がある場合に最適です。
欠点
小規模なローカルドライブでは、実装のオーバーヘッドが大きすぎる場合があります。
3. PowerShell ベースのラベル付け
上記の方法には制約があるため、PowerShell を使用してプログラム的にファイルにラベルを付けることができます。
前提条件
- PowerShell と Purview Label クライアントがインストールされたクライアント
- Entra ID(旧 Azure Active Directory)でのアプリ登録
- MSG ファイル(Outlook のメッセージ)は PowerShell 経由でラベル付けできません
- パスワード保護された PDF や証明書で署名された PDF もラベル付けできません(ラベルシステム自体の制約)
PowerShell の課題
Microsoft のドキュメントに従って標準の PowerShell コマンドを使用すると、PowerShell がフリーズしたり、無限に実行され続けたりすることがあります。
テストの結果、上記だけでは不十分であり、リトライ機構とジョブベースの処理を用いてファイルを確実にラベル付けするには、追加の作業が必要であることが判明しています。
信頼性の高い PowerShell ラベル付けスクリプト
次のスクリプトは、リトライロジックとジョブベースの実行を備えた堅牢な解決策を提供します。
Get-ChildItem -Path \\Finance\Projects\ -Recurse -File | ForEach-Object {
try {
$maxRetries = 3
$retryCount = 0
$setSuccess = $false
while (-not $setSuccess -and $retryCount -lt $maxRetries) {
$retryCount++
$jobsetlabel = Start-Job -ScriptBlock {
param ($fileName, $DKELabelId)
Set-FileLabel -FileName $fileName -LabelId $DKELabelId
[GC]::Collect()
[GC]::WaitForPendingFinalizers()
return $true
} -ArgumentList $_.FullName, "d9f23ae3-4321-4321-4321-f515f824c57b"
$finishedsetlabel = $jobsetlabel | Wait-Job -Timeout 10 | Receive-Job
if ($finishedsetlabel) {
$setSuccess = $true
Write-Host "Label set successfully for $($_.FullName) on attempt $retryCount." -ForegroundColor Green
}
}
}
catch {
Write-Host "Failed to set label after $maxRetries attempts for $($_.FullName)." -ForegroundColor Red
}
}
スクリプトの特徴
| 機能 | 説明 |
|---|---|
| リトライ機構 | ファイルごとに最大 3 回まで試行します |
| ジョブベースの実行 | リソースの問題を避けるため、各ファイルを個別のジョブでラベル付けします |
| メモリのクリーンアップ | 各ジョブの後に [GC]::Collect() と WaitForPendingFinalizers() を使用します |
| タイムアウト制御 | Wait-Job -Timeout 10 を使用してハングを防ぎます |
このアプローチにより、PowerShell がフリーズしたり無限に実行され続けたりすることなく、関連するすべてのファイルに正常にラベルを付けることができます。
移行前の監査スクリプト
移行前にすべてのファイルが正しくラベル付けされていることを確認するには、各ファイルのラベルを読み取り、その結果を CSV に記録するスクリプトを作成します。これにより、必要に応じて手動でレビューおよび調整できます。