まとめ
公式ドキュメントに記載されていない仕様を見つけても、むやみに利用するのはやめよう!
あらまし
組織内部の希望者に向けて、Webフォームで申請するとEntra IDにアカウントを作成、Exchage Onlineのアカウントを振り出してメールが利用できるようになるサービスを提供している。
Global Address Book(GAL)の問題
ただし、サービスの利用者はお互いに(直接の)面識があるとは限らないため、Exchange Onlineのデフォルト設定であるアドレス帳へのメールアドレスの表示は無効としておきたい。そのため、「グローバルアドレス一覧から非表示」の設定を行いたいのだが、Exchange管理センターから手作業で設定変更を行うようなことはせず、また、PowerShellコマンドで設定変更1を行うのも面倒(自動化を含め)だと思ったので、他の方法を考えることにした。
なお、オンプレADは存在しないため、Entra ID Connectでの連携などは行っていない。
Global Address Bookへの対応方法
いろいろ調べていると、Microsoft Graphを利用して操作するUserオブジェクト2に showInAddressList というプロパティがあり、現在の設定を確認することができると分かった。
実際には HiddenFromAddressListsEnabled というフラグをExchange Online側で持っていて、showInAddressList はEntra IDで表示時に算出しているだけとか言われてる3。
ただし、当時の記憶では この値を直接操作するな と記載があった。それならユーザ作成時に値をtrueにして与えたらいいんじゃね?変更じゃないし などと考えて試してしてみると、期待通りに動作してくれた。数十回のテストを行った後、この仕様で行くことにした。
邪道だと指摘されそうだが、ユーザ作成時にGALから非表示にする方法が用意されていないため、正攻法でもユーザ作成後にPowerShellでGALから非表示またはAddress Book Policyを各ユーザに設定する必要がある。
本番運用開始後もしばらくは様子を確認していたが問題はなかった、あの時までは…
問題発覚
たまたはOutlookでアドレス帳を見たときになぜか空になっているはずの場所にいくつかのメールアドレスが表示されていることを確認。狭い範囲の日時でしか発生しておらず、ログ等を調査してもエラーなどは確認できないため、Exchange Online側の仕様が突然変更され、数日後元に戻った としか思えない状況だった。
まぁ非推奨の手段が原因で発生した問題なので、MSに問い合わせたとしてもまともな回答がもらえるとは思えなかったため、そっと手動でGALから非表示に設定をしたのち、対象アドレスにお詫びメールを送付して終了。
再発防止策
定期的にGALに表示されているメールアドレスが無いか確認し、存在していれば非表示に設定変更するPowerShellスクリプトを作成して終了。
-
https://learn.microsoft.com/ja-jp/exchange/address-books/address-lists/manage-address-lists ↩
-
https://learn.microsoft.com/ja-jp/graph/api/resources/user?view=graph-rest-1.0 ↩
-
https://stackoverflow.com/questions/54316503/microsoft-graph-how-to-switch-off-show-in-global-address-list-for-new-user#comment121311426_54319230 ↩