Microsoft 365 バッチスクリプトでの PowerShell 認証方法

リモートワークが一般的になるにつれ、さまざまな組織がクラウドシステムを利用するようになっています。それに伴ってランサムウェアなど悪意ある者の攻撃が今まで以上に広く行われるようになってきました。

ある程度古くから Microsoft 365 を利用している組織では、バッチスクリプトを組んでアプリの自動化を行っているケースも多いのではないでしょうか。

その際にログイン情報として ID パスワードを利用している場合この部分が脆弱な個所となり、狙われてしまうことが考えられ、手を入れていった方が良い個所となっています。

(個人的な感想ですが、証明書ファイルと同レベルのパスワード長を持った保護を行っていれば、失効の可否以外の点ではパスワードもありなんじゃないかと思ってたりもします。ただし、悪意ある者が鍵付き証明書を作り出すのと同等の労力を要するパスワード長を持ったパスワードで管理しているケースは皆無でしょう。)

最近見つけたのですが、以下 docs 内にある Example 3 のコードを用いることで、 PowerShell での Microsoft 365 ログインを証明書ベースに変更することができます。

https://docs.microsoft.com/en-us/powershell/module/azuread/connect-azuread?WT.mc_id=M365-MVP-5002496&view=azureadps-2.0#example-3--connect-a-session-as-a-service-principal

ただ、 Add-AzureADDirectoryRoleMember -ObjectId はなぜか 5997d714-c3b5-4d5b-9973-ec2f38fd49d5 というリテラル値が案内されています。この値は環境によって異なるので、 Get-AzureADDirectoryRole コマンドなどで設定したいロールを確認して適用しましょう。

埋め込むなら以下のような形でしょうか。

(Get-AzureADDirectoryRole -Filter "displayname eq 'Exchange Administrator'").ObjectId

この観点、実際の利用には docs の内容だけだと物足りない感じもします。
UI も絡めてもう少し深堀していきたいと思います。

音楽:じゃれる