こんにちは、 Azure ID チームの小出です。今日は、ゲスト ユーザーの棚卸をする方法について紹介します。
はじめに
多くの企業のテナントでは、外部のユーザーと一緒に Teams 会議をしたり、外部のユーザーがプロジェクトで使用するリソースにアクセスしたりできるよう、外部のユーザーをテナントにゲスト ユーザーとして招待していると思います。ゲスト ユーザーは、一般ユーザーでも Azure ポータル上から簡単に招待することができますが、ゲスト ユーザーが増えるにつれて、こんな不安をお持ちのテナント管理者もいらっしゃると思います。
- 不要なゲスト ユーザーを削除したいが、誰を削除したらいいかわからない。
- 一定期間サインインのないゲスト ユーザーを棚卸したいが、最終サインイン日時がわからない。
- ゲスト ユーザーが大量にいるため、確認に工数がかかっている。棚卸を自動化したい。
上記のような不安を解消するために、今回は、ゲスト ユーザーを棚卸するための機能として、アクセス レビューとゲスト ユーザーの最終サインイン日時を取得する方法の 2 つを紹介します。
なお、アクセス レビューをご利用いただくためには、Azure AD Premium P2 ライセンスが必要となります。少なくとも、レビュー担当者として割り当てられているユーザーに P2 ライセンスの割り当てが必要です。詳細については、こちらの資料 をご覧ください。
目次
A. アクセス レビューを使用して一定期間サインインのないユーザー アカウントを自動的に棚卸する方法
アクセス レビューは、特定のグループやアプリケーションに割り当てられたユーザーを対象に、グループのメンバーシップやアプリケーションの割り当てに問題がないか (不要なユーザーに割り当てが行われていないか) を定期的に確認できる機能です。
1 回もしくは定期的に行われるレビューでは、レビューを行う管理者ユーザー (以下、レビュー担当者) が、レビュー内で各ユーザーに対し、[許可] もしくは [拒否] を設定します。詳細は後述しますが、レビュー担当者はレビュー内で各対象ユーザーの最終サインイン日時 (=最終利用日時) を確認することが可能ですので、そちらをもとに割り当ての「許可」「拒否」を選択します。
レビューで拒否が選択された場合、たとえばグループから自動的にユーザーを削除したり、アプリケーションから割り当てを自動的に削除したりすることができます。さらには 30 日間アカウントを無効化 (サインインをブロック) したのちにユーザーを自動的に削除することも可能です。
このアクセスレビュー機能を応用してゲスト ユーザーの棚卸を行いますが、実際のところレビューを行う管理者は不特定多数のゲスト ユーザーについて 1 人 1 人アクセスの要否を判断することは困難です。そのため、今回はゲスト ユーザー自身にセルフレビューを依頼し、アクセス権の継続が必要な場合のみ [許可] してもらいます。アクセス権が不要になったゲスト ユーザーは自ら [拒否] を選択することも、レビュー自体を無視することも可能です。(レビューを無視した場合は [拒否] 扱いとすることが可能です。)
以下の手順にてレビューを作成すると、レビューで拒否が設定されたゲスト ユーザーは自動的に無効化され、 30 日後にテナントから自動的に削除されます。
アクセス レビューの作成手順
Azure ポータルにサインインし、 [Azure Active Directory] - [Identity Governance] を開きます。もしくは、ポータル上の検索ボックスより、[Identity Governance] を開きます。
左ペインにて [アクセス レビュー] をクリックし、 [+ 新しいアクセス レビュー] を選択します。
レビュー対象を指定します。たとえば、 特定のグループを対象にゲスト ユーザーのレビューを行いたい場合は、以下のように指定します。
手順1: [チームとグループ] を選択します。
手順2: [チームとグループの選択] を選択し、ゲスト ユーザーが所属しているグループを選択します。
手順3: [ゲスト ユーザーのみ] を選択します。手順 2 ではレビュー対象のグループを指定します。ゲスト ユーザーは既存の業務用セキュリティ グループ (例: プロジェクト A グループ) に参加させることが一般的かと思います。この場合、既存の業務用セキュリティ グループを手順 2 で選択しつつ、手順 3 では [ゲスト ユーザーのみ] を選択すればレビュー対象をゲスト ユーザーのみに限定することが可能です。
警告
なお、手順 2 で[ゲスト ユーザーを含むすべての Mcirosoft 365 グループ] を選択すると、後述の手順にて [拒否されたゲスト ユーザーに適用するアクション] が構成できません。そのためこの項目では [チームとグループの選択] を使用します。
ヒント
ゲスト ユーザーを既存の業務用セキュリティグループに参加させていない場合は、ゲスト ユーザー全員を含む動的グループを利用する方法もあります。具体的には
(user.userType -eq "Guest")
のルールで動的グループを作成すると、ゲスト ユーザー全員がメンバーに含まれるグループが作成されます。以下では本グループを手順 2 で指定します。動的グループの作成方法の詳細は、本記事では省略しております。以下の公開情報をご確認ください。
ヒント
非アクティブなユーザーのみを、アクセス レビューの対象とすることもできるようになりました。新機能を利用したい場合は、下記チェックをオンにしたうえで、どれくらいサインインのないユーザーをレビューの対象とするか、日付を指定します。
必要に応じて、レビュー担当者と繰り返しの設定を行います。以下の画面では、半年ごとに、ゲスト ユーザー自身がレビューを行うよう設定しています。
- 管理者のレビューへの負担を最小限にしたい場合は、本手順のように [レビュー担当者を選択する] にて [ユーザーによる自分のアクセスのレビュー] を選択し、 ゲスト自身がセルフ レビューを行うよう構成します。
- ゲスト自身ではなく、特定のユーザーが一括でレビューを管理したい場合は、 [ユーザーまたはグループが選択済み] を選択してレビュー担当者を個別に指定することも可能です。また、[グループの所有者] を選択して、グループの所有者をレビュー担当者とする構成も実現できます。
- 上記の設定では、14 日間有効なレビューが半年ごとに繰り返し実行されます。レビューの依頼をうけたゲスト ユーザーは 14 日間 (2 週間) 以内にレビューに対して応答する必要があります。
ヒント
複数ステージのアクセス レビューも実施できるようになりました。最大 3 段階のステージでレビューを行うことができます。たとえば第 1 ステージでセルフ レビューを行い、第 2 ステージ以降で所有者および管理者によるレビューを行うことも可能です。
アクセス レビューの設定を行います。
自動的に棚卸を行うために、 [リソースへの結果の自動適用] を [有効] に設定します。また、[レビュー担当者が応答しない場合] の設定を [アクセスの削除] に設定します (管理者がレビューを行う場合は、 [アクセスの削除] もしくは [推奨事項の実行] に設定します。)
レビューで拒否されたゲスト ユーザーをブロックし、30 日後にテナントから削除されるようにするためには、[拒否されたゲスト ユーザーに適用するアクション] の項目で、[ユーザーのサインインを 30 日間ブロックした後、テナントからユーザーを削除します] を選択します。
主な設定項目の説明と、指定する際の判断基準は以下の通りです。
項目 説明 [リソースへの結果の自動適用] レビュー完了後、自動で結果を反映させたい場合は [有効] にします。 [レビュー担当者が応答しない場合] レビュー担当者がレビューを行わなかったユーザーに対し、どのような処理を行うか指定します。 [拒否されたゲスト ユーザーに対するアクション] ゲスト ユーザーが拒否された場合の動作を指定します。 [レビュー担当者が応答しない場合] の選択肢 説明 [変更なし] レビュー担当者が応答しない場合、特に何も実行されません。 [アクセスの削除] レビュー担当者が [拒否] を設定した時と同様の処理が行われます。実際に行われる処理は、以下の [拒否されたゲスト ユーザーに対するアクション] によって決定されます。 [アクセスを承認する] レビュー担当者が [許可] を設定した時と同様の処理が行われます。そのため、引き続きグループのメンバーシップが維持されます。 [推奨事項の実行] システム上で算出される推奨事項が実行されます。具体的には、 30 日以内にサインインがあれば [許可] 、 30 日以内にサインインがなければ [拒否] が選択される動作となります。 また、 [拒否] が選択されたユーザーに対して行われる処理は、[拒否されたゲスト ユーザーに対するアクション] によって決定されます。 [拒否されたゲスト ユーザーに対するアクション] の選択肢 説明 [リソースからユーザーのメンバーシップを削除] レビュー対象のグループから、メンバーが削除されます。またはアプリケーションへのアクセス権が削除されます。ユーザー自体は特に影響を受けないため、テナントには引き続きサインインできます。 [ユーザーが 30 日間サインインできないようにしてから、テナントからユーザーを削除する] 他のリソースへのアクセス権を持っているかどうかに関係なく、拒否されたユーザーによるテナントへのサインインがブロックされます。 また、 30 日後にテナントからゲスト ユーザーが削除されます。 レビュー名と説明を記入し、アクセスレビューを作成します。
アクセス レビューの実施 (セルフ レビュー編)
アクセス レビューが開始されると、レビュー対象者の元に azure-noreply@microsoft.com からメールが届くので、[レビューを開始する(Review Access)] をクリックします。
以下のような画面が表示されるので、セルフ レビューを実施します。
画面が以下のように遷移します。 Progress の項目が 1/1 と表示されていることを確認します。
指定した日付が経過するなどしてレビューが完了すると、[自動適用] が有効な場合は、自動的に [拒否されたゲスト ユーザーに対するアクション] が実行されます。
アクセス レビューが開始されると、レビュー対象者の元に azure-noreply@microsoft.com からメールが届くので、[レビューを開始する(Review Access)] をクリックします。
以下のような画面が表示されるので、セルフ レビューを実施します。
画面が以下のように遷移します。 Progress の項目が 1/1 と表示されていることを確認します。
指定した日付が経過するなどしてレビューが完了すると、[自動適用] が有効な場合は、自動的に [拒否されたゲスト ユーザーに対するアクション] が実行されます。
たとえば、[ユーザーが 30 日間サインインできないようにしてから、テナントからユーザーを削除する] を設定した場合、拒否したユーザーの [サインインのブロック] が [はい] になります。この状態では、まだユーザーは削除されませんが、ユーザーはポータル上にサインインできない状態となります。また、このあと 30 日経過すると、そのゲスト ユーザーはテナントから削除されます。
アクセス レビューの実施 (管理者編)
上記まではゲスト ユーザー自身にレビューを実施してもらう手順となりますが、もしゲスト ユーザーの数が少ない場合などは管理者が代表してレビューを行うことも可能です。この場合の手順を後述します。
アクセス レビューが開始されると、レビュー対象者の元に azure-noreply@microsoft.com からメールが届くので、[レビューを開始する] をクリックします。
ユーザーの状況を確認します。各ユーザーを選択すると、 [承認する] と [拒否] がクリックできるようになるので、承認もしくは拒否を指定します。
[決定] の項目に、レビューを行った際の承認・拒否の値が表示されることを確認します。
指定した日付が経過するなどしてレビューが完了すると、[自動適用] が有効な場合は、自動的に [拒否されたゲスト ユーザーに対するアクション] が実行されます。
アクセス レビューに関する以下の公開情報も、併せてご確認ください。
B. ゲスト ユーザーの最終サインイン日時を取得する方法
アクセス レビューを使用した棚卸についてご案内しましたが、この機能を利用するためには、 Azure AD Premium P2 ライセンスが必要です。そのため、 Azure AD Premium P1 ライセンスまでのみお持ちの環境では、上記の機能を利用することができません。
棚卸を完全に自動化したい場合は、Azure AD Premium P2 ライセンスの購入を検討する必要がありますが、一定期間サインインのないユーザーを抽出するのみであれば、以下の Github リポジトリに記載のスクリプトを使用することで、ユーザーの最終サインイン日時を取得することが可能です。
このスクリプトを利用するためには、アプリケーションの登録などの事前準備が必要です。必要な手順につきましては、以下にて詳細をご案内しておりますので、こちらも併せてご参照ください。
スクリプトを実行すると CSV ファイルが出力され、以下のように、ユーザーの ID、UPN、最終サインイン日時、アプリケーション情報を順に確認できます。LastSingInDateUTC は、対話型の最終サインイン日時です。LastNonInteractiveSigninDateUTC は、非対話型の最終サインイン日時となります。
実行結果:
なお、上記にてダウンロードしたスクリプトでは、ゲスト ユーザーのみならず、テナントに登録されているすべてのユーザーの情報が取得されます。そのため、取得対象をゲスト ユーザーのみにしたい場合は、Get-LastSignIn.ps1 のスクリプトの 48 行目を、以下のように修正してから実行ください。
修正箇所:
修正前:
$users = Get-MgUser -All -Property id, userPrincipalName, signInActivity |
修正後:
$users = Get-MgUser -All -Property id, userPrincipalName, signInActivity -Filter "usertype eq 'Guest'" |
上記手順で 30 日以上サインインしていないゲスト ユーザーを手動で抽出し、必要に応じて、削除処理などを実施いただければと思います。
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。