ヘッダー画像

Microsoft365にゲストユーザを一括登録したい

はじめに

Microsoft365を利用するにあたり、特にTeamsではゲストユーザを招待する機会があると思います。ゲストユーザは会社外の人になりますので、一般の利用者が勝手にチーム内にゲスト登録できるようにしていることも少ないでしょう。

今回の記事では、システム管理者がゲスト登録を代行している場合に利用できる、ゲストの一括登録処理と期限付きゲストの運用について触れていきます。

前提

今回の処理は以下の通りとします。ゲストユーザの追加情報登録時に有効期限も設定して期限が来たらゲストを無効化する処理まで実装したいと思います。

Azure AD ゲスト登録
  1. ゲスト登録するリストをCSVで作成
  2. Powershellを使ってAzure ADに登録
  3. ゲストの追加情報登録
  4. チームへの参加

Azure ADの管理画面で一括登録

一括登録はAzure ADの管理画面からCSVファイルで一括登録可能です。ただし設定できる属性が以下のみとなっております。

  • メールアドレス
  • リダイレクト先のURL
  • 招待メッセージの送信要否
  • カスタマイズされた招待メッセージ

CSVファイルの準備

まずはゲストユーザのリストを作成しましょう。以下の仕様で作成します。カラム名が違っているとプログラムが正常に動きませんのでコピペしてCSVファイルを作成してください。

カラム詳細
DisplayNameゲストの表示名を入力
Mailゲストのメールアドレス
Companyゲストの会社名
EffectiveDate有効期限(のちの都合上yyyyMMddのフォーマットで)
TeamAddress登録するチームのメールアドレス

ゲスト登録Powershellの実装

ゲスト登録にはAzure ADのコマンドとExchange Onlineのコマンドを利用します。今回使うコマンドは下記の通りです。

コマンド用途
Import-CsvCSVファイルを読み込みます
New-AzureADMSInvitationゲストユーザを登録します
Start-Sleepプログラムを指定した秒数ストップします
Set-AzureADUserゲストユーザの属性値を変更します
Add-UnifiedGroupLinksMicrosoft365グループにメンバー登録します

実際にソースコードを書いていきいます。ゲストユーザを登録して、チームに所属させるところまでを実行できます。

本来なら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 
        }
    }

まとめ

ゲスト登録運用は、各社のポリシーによっていろいろあると思いますが、利用者によるゲスト登録は管理が出来ず、どうしても情報漏洩リスクが高くなってしまいますので、システム管理者様で管理させれている会社様のほうが多いのではと思います。

ゲストは、いつまでも会社のリソースにアクセスさせるべきではないと考えています。つまり登録だけでなく廃止まで考慮する必要があります。

本記事が皆様の運用管理、利活用の一助となりましたら幸いです。