Microsoft365にゲストユーザを一括登録したい
Powershell, 利活用, 自動化, 運用管理
はじめに
Microsoft365を利用するにあたり、特にTeamsではゲストユーザを招待する機会があると思います。ゲストユーザは会社外の人になりますので、一般の利用者が勝手にチーム内にゲスト登録できるようにしていることも少ないでしょう。
今回の記事では、システム管理者がゲスト登録を代行している場合に利用できる、ゲストの一括登録処理と期限付きゲストの運用について触れていきます。
前提
今回の処理は以下の通りとします。ゲストユーザの追加情報登録時に有効期限も設定して期限が来たらゲストを無効化する処理まで実装したいと思います。
- ゲスト登録するリストをCSVで作成
- Powershellを使ってAzure ADに登録
- ゲストの追加情報登録
- チームへの参加
Azure ADの管理画面で一括登録
一括登録はAzure ADの管理画面からCSVファイルで一括登録可能です。ただし設定できる属性が以下のみとなっております。
- メールアドレス
- リダイレクト先のURL
- 招待メッセージの送信要否
- カスタマイズされた招待メッセージ
CSVファイルの準備
まずはゲストユーザのリストを作成しましょう。以下の仕様で作成します。カラム名が違っているとプログラムが正常に動きませんのでコピペしてCSVファイルを作成してください。
カラム | 詳細 |
---|---|
DisplayName | ゲストの表示名を入力 |
ゲストのメールアドレス | |
Company | ゲストの会社名 |
EffectiveDate | 有効期限(のちの都合上yyyyMMddのフォーマットで) |
TeamAddress | 登録するチームのメールアドレス |
ゲスト登録Powershellの実装
ゲスト登録にはAzure ADのコマンドとExchange Onlineのコマンドを利用します。今回使うコマンドは下記の通りです。
コマンド | 用途 |
---|---|
Import-Csv | CSVファイルを読み込みます |
New-AzureADMSInvitation | ゲストユーザを登録します |
Start-Sleep | プログラムを指定した秒数ストップします |
Set-AzureADUser | ゲストユーザの属性値を変更します |
Add-UnifiedGroupLinks | Microsoft365グループにメンバー登録します |
実際にソースコードを書いていきいます。ゲストユーザを登録して、チームに所属させるところまでを実行できます。
本来なら1本のプログラムで処理を完了させたいところですが、ゲストが作成されてから属性値が変更できるようになるまでタイムラグがありますのでプログラムを分けさせてもらいます。
最初にゲストユーザを一括作成します。
#環境に合わせて値を修正してください $UserName = "管理者ID" $Passwd = "パスワード" $inputCSVPath = "C:\temp\InvitationList.csv" $contractDomain = "xxxx.onmicrosoft.com" #接続設定 $CvtPass = ConvertTo-SecureString $Passwd -AsPlainText -Force $UserCredential = New-Object System.Management.Automation.PSCredential($UserName,$CvtPass) Connect-AzureAD -Credential $UserCredential #CSVファイルの読み取り if (Test-Path -Path $inputCSVPath){ $CSV = Import-Csv $inputCSVPath Foreach ($InvitationUser in $CSV){ #ゲストユーザ作成 New-AzureADMSInvitation -InvitedUserDisplayName $InvitationUser.DisplayName -InvitedUserEmailAddress $InvitationUser.Mail -InviteRedirectURL "https://myapps.microsoft.com" -SendInvitationMessage $true } }
次にゲストユーザの属性値を変更します。作成から間をあけて実行してください。
#環境に合わせて値を修正してください $UserName = "管理者ID" $Passwd = "パスワード" $inputCSVPath = "C:\temp\InvitationList.csv" $contractDomain = "xxxx.onmicrosoft.com" #接続設定 $CvtPass = ConvertTo-SecureString $Passwd -AsPlainText -Force $UserCredential = New-Object System.Management.Automation.PSCredential($UserName,$CvtPass) Connect-AzureAD -Credential $UserCredential #CSVファイルの読み取り if (Test-Path -Path $inputCSVPath){ $CSV = Import-Csv $inputCSVPath Foreach ($InvitationUser in $CSV){ #ゲストユーザの追加情報を登録 $guestUser = ($InvitationUser.Mail).Replace("@","_") + "#EXT#@" + $contractDomain Set-AzureADUser -ObjectId $guestUser -CompanyName $InvitationUser.Company -JobTitle $InvitationUser.EffectiveDate } }
最後にMicrosoft365グループにメンバー登録します。Microsoft365グループの管理は別の記事でも紹介していますので合わせてご確認ください。
#環境に合わせて値を修正してください $UserName = "管理者ID" $Passwd = "パスワード" $inputCSVPath = "C:\temp\InvitationList.csv" $contractDomain = "xxxx.onmicrosoft.com" #接続設定 $CvtPass = ConvertTo-SecureString $Passwd -AsPlainText -Force $UserCredential = New-Object System.Management.Automation.PSCredential($UserName,$CvtPass) Connect-ExchangeOnline -Credential $UserCredential #CSVファイルの読み取り if (Test-Path -Path $inputCSVPath){ $CSV = Import-Csv $inputCSVPath Foreach ($InvitationUser in $CSV){ #チームに参加 Add-UnifiedGroupLinks -Identity $InvitationUser.TeamAddress -Links $InvitationUser.Mail -LinkType Member } }
Azure ADゲストユーザの無効化
この記事では、期限がきたゲストユーザを無効化する方針とします。ゲストユーザは削除するとTeams上の会話では、不明なユーザとして認識されてしまうためです。無効化することでアクセスはできず、不明なユーザ問題も解決可能です。
#環境に合わせて値を修正してください $UserName = "管理者ID" $Passwd = "パスワード" #初期設定 $today = Get-Date -Format "yyyyMMdd" #接続設定 $CvtPass = ConvertTo-SecureString $Passwd -AsPlainText -Force $UserCredential = New-Object System.Management.Automation.PSCredential($UserName,$CvtPass) Connect-AzureAD -Credential $UserCredential Get-AzureADUser -Filter "UserType eq 'Guest'" | %{ $objectId = $_.ObjectId $EffectiveDate = [DateTime]::ParseExact($_.jobTitle,"yyyyMMdd",$null) - [DateTime]::ParseExact($today,"yyyyMMdd",$null) if($EffectiveDate.Days -le 0) { Set-AzureADUser -ObjectId $ObjectId -AccountEnabled $False } }
まとめ
ゲスト登録運用は、各社のポリシーによっていろいろあると思いますが、利用者によるゲスト登録は管理が出来ず、どうしても情報漏洩リスクが高くなってしまいますので、システム管理者様で管理させれている会社様のほうが多いのではと思います。
ゲストは、いつまでも会社のリソースにアクセスさせるべきではないと考えています。つまり登録だけでなく廃止まで考慮する必要があります。
本記事が皆様の運用管理、利活用の一助となりましたら幸いです。