Temporary Access Pass を一括発行する

皆さん、こんにちは。

今回は、以前取り上げた、Temporary Access Pass (TAP) に関する記事となります。

Temporary Access Pass (TAP) は非常に便利ですが、以前の記事では、ユーザーごとに one by one で発行する方法を紹介しました。しかしながら、複数のユーザーに対して、Temporary Access Pass (TAP) を発行する方法を模索してみましたので、その内容をご紹介したいと思います。

私はバルクで Temporary Access Pass (TAP) を発行するためのサンプル スクリプトを作成いたしました。下記のものです。

# Microsoft Entra ID PowerShell Script
# Create a new temporary Access Pass (TAP) as bulk
# Author : Yutaro Tamai (https://sccm.jp)

# Initialization phase (Installing and Importing Modules)
Install-Module Microsoft.Graph.Identity.Signins
Install-Module Microsoft.Graph.Users
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
Import-Module Microsoft.Graph.Identity.SignIns
Import-Module Microsoft.Graph.Users

# Connect Microsoft Graph
Connect-MgGraph -Scopes "UserAuthenticationMethod.ReadWrite.All", "User.Read.All" -NoWelcome

# Input lifetime of the Temporary Access Pass by user
[int]$TAP_Lifetime = Read-Host "Temporary Access Pass の有効期間 (分) を入力してください。"

# Select a CSV user list
Add-Type -assemblyName System.Windows.Forms
$FileLoadDialog = New-Object System.Windows.Forms.OpenFileDialog
$FileLoadDialog.Filter = "CSV File|*.csv"
$FileLoadDialog.Title = "ユーザー リストを選択してください"
if ($FileLoadDialog.ShowDialog() -ne [System.Windows.Forms.DialogResult]::OK) {
    Write-Output "処理をキャンセルしました"
    $FileLoadDialog.Dispose()
    exit
}
$Load_CSV_Path = $FileLoadDialog.FileName
$FileLoadDialog.Dispose()

# Select a CSV file to save
$FileSaveDialog = New-Object System.Windows.Forms.SaveFileDialog
$FileSaveDialog.Filter = "CSV File|*.csv"
$FileSaveDialog.Title = "結果を保存するファイルを選択してください"
$FileSaveDialog.OverwritePrompt = $True

if ($FileSaveDialog.ShowDialog() -ne [System.Windows.Forms.DialogResult]::OK) {
    Write-Output "処理をキャンセルしました"
    $FileSaveDialog.Dispose()
    exit
}
$Save_CSV_Path = $FileSaveDialog.FileName
$FileSaveDialog.Dispose()

# Import CSV
$UPNs = Import-Csv $Load_CSV_Path

# Set json
$properties = @{}
$properties.isUsableOnce = $False
$properties.LifetimeInMinutes = $TAP_Lifetime
$propertiesJSON = $properties

# Define array for result
$TAP_Exports = New-Object System.Collections.ArrayList

Foreach($UPN in $UPNs){
# Define variable
$TAP_Export = New-Object PSObject | Select-Object UserPrincipalName, Mail, Manager_Mail, TemporaryAccessPass, TAP_StartDateTime_JST, TAP_LifetimeInMinutes, TAP_Expiration_JST

# Get basic information
$TAP_Export.UserPrincipalName = $UPN.Users
$TAP_Export.Mail = Get-MgUser -UserId $UPN.Users | ForEach-Object {$_.Mail}

# Create TAP
$TAP_Info = New-MgUserAuthenticationTemporaryAccessPassMethod -UserId $UPN.Users -BodyParameter $propertiesJSON
$TAP_Export.TemporaryAccessPass = $TAP_Info.TemporaryAccessPass

# Get time-related data for TAP
$TAP_Export.TAP_StartDateTime_JST = $TAP_Info.StartDateTime.AddHours(9)
$TAP_Export.TAP_LifetimeInMinutes = $TAP_Info.LifetimeInMinutes
$TAP_Export_StartDateTime_UTC = $TAP_Info.StartDateTime.AddMinutes($TAP_Info.LifetimeInMinutes)
$TAP_Export.TAP_Expiration_JST = $TAP_Export_StartDateTime_UTC.AddHours(9)

# Get Manager information, Error handling (No Manager)
$TAP_Export.Manager_Mail = Get-MgUserManager -UserId $UPN.Users -ErrorAction SilentlyContinue | ForEach-Object {Get-MgUser -UserId $_.id } | ForEach-Object {$_.Mail}

# Add Array
[void]$TAP_Exports.Add($TAP_Export)
}

# Write results to target CSV file
$TAP_Exports | Export-Csv $Save_CSV_Path -NoTypeInformation -Encoding UTF8 -NoClobber

# End action (remove variable)
Remove-Variable -Name TAP_Info, TAP_Export, TAP_Exports, TAP_Lifetime, TAP_Export_StartDateTime_UTC

Create-TAP.ps1

<サンプル スクリプトの使い方>

  1. まず、上記の PowerShell スクリプトをコピーもしくはダウンロードして保存します。
  2. 下記のような CSV ファイルを作成します。
    ポイントは、先頭行に [Users] と入力し、User Principal Name (UPN) を列挙します。
  3. PowerShell を管理者権限で開きます。
  4. 下記のコマンドを実行します。
    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
  5. その後、[Create-TAP.ps1] を実行します。
  6. その後、下記画面が表示されますので、適切な管理者アカウントでサインインします。
  7. 初回に、Microsoft Graph を利用する際に下記のような画面が表示されますので、[承諾] の作業を実施ください。
  8. 必要な事前準備が終わると、下記のように、メッセージが表示されます。
    自身のテナントで設定された範囲の期間で、Temporary Access Pass (TAP) の有効期間を “分” 単位で入力します。
  9. 次に、ダイアログが開くので、項番 2 で作成した CSV を選択します。
  10. その後、同じようなダイアログが開きますが、今度は、Temporary Access Pass (TAP) を保存する CSV の保存先を決めます。
  11. ダイアログを選択後、少し待つとスクリプトが完了し、項番 10 で設定したファイルに下記のようにパスワード情報などが記録されます。
  12. これで、バルクにて、Temporary Access Pass (TAP) を発行出来ました。

<まとめ>

今回は、Temporary Access Pass (TAP) を本格的に運用する際に出てくるであろう課題に取り組んでみました。

今回のスクリプトを活用すれば、例えば、Temporary Access Pass (TAP) を対象ユーザーや対象ユーザーのマネージャーにメールする等の対応も可能かと思います。

この記事やスクリプトが少しでもお役に立てれば幸いです。