Microsoft 365 PowerShell でのユーザーライセンス付与方法が変更となります

2022 年 6 月 30 日以降、PowerShell で利用されてきた Microsoft 365 におけるライセンスの付与コマンドレットである Set-MsolUserLicense などが利用できなくなるというアナウンスが入ってきました。

https://techcommunity.microsoft.com/t5/azure-active-directory-identity/migrate-your-apps-to-access-the-license-managements-apis-from/ba-p/2464366?WT.mc_id=M365-MVP-5002496

上記がその内容なのですが、要は Microsoft Graph への置き換えのために古い API を削除していくことになったようです。

f:id:mohessu:20210829231352p:plain

という訳で 2022 年 6 月までに関連スクリプトの置き換えが必要なのですが、 PowerShell で利用するためにはまず Microsoft Graph SDK のインストールが必要です。

さっそくモジュールをインストールしていきましょう。

Install-Module Microsoft.Graph -Scope CurrentUser

CurrentUser を選択すると自分のみにインストールされます。
自分のみを対象とすることで管理者権限も不要となります。

f:id:mohessu:20210829160641p:plain

Y か A で先に進めます。

f:id:mohessu:20210829160749p:plain

インストール完了まで 5 分ほど時間がかかります。

f:id:mohessu:20210829162157p:plain

必要に応じて -Scope に AllUsers を選択すると PC への登録が可能となります。
稼働させるユーザーをマシンアカウントにしたいなどの要件がある場合は管理者権限で -Scope AllUsers と指定していきましょう。

これで Graph API にアクセスできるようになるのですが、昨今のクラウドへの不正アクセスの状況などを踏まえると ID / Password でアクセスできる状況は好ましくありません。

この際なので証明書認証でアクセスする方法を見ていきましょう。

まず自己証明書の発行です。この証明書のトークンを AzureAD に登録しておくことでこの証明書を持っている人のみがアクセスできるようになるという訳です。

自己証明書は以下のコマンドレットで発行可能となっています。( Subject および DnsName は好きな名前にして問題ありません。)
このコマンドレットはサインインユーザーの個人証明書内に 1 年有効な鍵付き証明書を作成するものとなっています。

New-SelfSignedCertificate -Subject "Win11ProUser.Myhome.local" -DnsName "Win11ProUser.Myhome.local" -CertStoreLocation "cert:\CurrentUser\My" -KeyAlgorithm RSA -KeyLength 2048 -KeyExportPolicy Exportable

作成された Thumbprint の値はあとで使うので覚えておきましょう。

 

f:id:mohessu:20210829175642p:plain

ちなみに以下パラメータを付与することで 5 年間有効な証明書を作成することも可能です。が、やっぱり期間は長くしすぎない方が良いかと思います。

-NotAfter (Get-Date).AddYears(5)

これもマシンに紐づけたい場合は CertStoreLocation の値を cert:\LocalMachine\My に変更しておくことも可能です。

次に以下コマンドで証明書ストアを開きます。

certmgr.msc

f:id:mohessu:20210829175542p:plain

マシンの場合は以下コマンドに変わります。
certlm.msc

作成した Subject が一致する証明書ができているので、ダブルクリックで開きます。

拇印が Thumbprint と一致していることは確認しておくとよいですね。
詳細タブのなかにある「ファイルにコピー」ボタンを押して鍵なしの公開証明書を PC 内にコピーします。これを AzureAD に登録する形ですね。

f:id:mohessu:20210829175732p:plain

ここから先はウィザード通りに次へボタンを押すだけです。

f:id:mohessu:20210829175915p:plain

秘密鍵は外に出す必要がないため、いいえを選択します。

f:id:mohessu:20210829175932p:plain

形式は何でもよいのですが、 DER を選んでおきましょうか。

f:id:mohessu:20210829175948p:plain

出力先を選択したらおしまいです。

f:id:mohessu:20210829180036p:plain

こんな感じに完了がアナウンスされます。

f:id:mohessu:20210829180058p:plain

完了を押すと エクスポート完了の旨が示されます。

f:id:mohessu:20210829180116p:plain

続いて AzureAD のサイトに移動します。

アドレスは以下ですね。

https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps

アプリの登録画面が表示されたら、新規登録ボタンを押します。

f:id:mohessu:20210829234023p:plain

適当な名前を入力し、使用するテナントを設定しましょう。
リダイレクト URI と共に初期値のままで問題ありません。

f:id:mohessu:20210829172932p:plain

登録が完了するとアプリケーション(クライアント) ID とディレクトリ(テナント) ID が表示されるので、これらもメモしておきましょう。

ここまでメモした 3 つが重要項目です。

f:id:mohessu:20210829173129p:plain

続いて API のアクセス許可画面に移動します。

ここでは Graph API にアクセスしてもよい権限を設定していく工程を見ていきます。

アクセス許可の追加ボタンを押しましょう。

f:id:mohessu:20210829173243p:plain

アクセス許可を Microsoft Graph に対して要求する流れですね。「 Microsoft Graph 」を選択してください。

f:id:mohessu:20210829173315p:plain

続いて「アプリケーションの許可」を選びます。

f:id:mohessu:20210829173354p:plain

すると下部に選択画面が出るので、 User.Read と入力します。

そこで出てくる User の項目の中から User.ReadWrite.All を選びます。

 

f:id:mohessu:20210829211929p:plain

選んだらそのまま検索の内容を変更し、「 Organization 」と入力します。

同じように Organization の中にある Organization.Read.All を選択して「アクセス許可の追加」ボタンを押しましょう。

f:id:mohessu:20210829211838p:plain

先ほどの画面にアクセス許可された名前が追加されていることが分かります。
この時点で不要なものは消しておきたいので、 User.Read となっている個所を選んで削除します。

f:id:mohessu:20210829212501p:plain

右側にサブフォームができるので、「アクセス許可の削除」を押しましょう。

f:id:mohessu:20210829212607p:plain

念のため聞かれますが、「はい、削除します」ボタンを押し消していきます。

f:id:mohessu:20210829173818p:plain

もう少し権限の観点は続きます。
削除の時点で以下のようになったと思いますが、右側にビックリマークが表示されています。

f:id:mohessu:20210829212734p:plain

< テナント名 > に管理者の同意を与えますというボタンがあるので、これを押します。

f:id:mohessu:20210829212752p:plain

管理者として使ってよいことを事前同意する形ですね。

f:id:mohessu:20210829174032p:plain

これでアクセス権限周りの対応は完了です。

f:id:mohessu:20210829212911p:plain

最後に先ほど作成した証明書を AzureAD に登録していきましょう。

証明書とシークレットを開きます。
右側に証明書のアップロードというボタンがあるので押していきます。

f:id:mohessu:20210829174332p:plain

証明書がアップロードされ、追加ボタンを押すことで AzureAD 側にこの証明書が利用できるように登録されます。

f:id:mohessu:20210829180621p:plain

ここでも拇印が表示されているので、先のものと同等であることを確認しておきましょう。

これで、サーバー側の設定は完了です。

f:id:mohessu:20210829180712p:plain

PowerShell に戻って、 Microsoft 365 に接続してみましょう。
接続は Msol などのモジュールを利用せず、 Graph SDK からの接続となります。コマンドレットは以下の通りです。先ほどメモした 3 つの項目を埋めていきましょう。

Connect-MgGraph -ClientID <ID> -TenantId <ID> -CertificateThumbprint <ThumbPrint>

f:id:mohessu:20210829182256p:plain

Welcome To Microsoft Graph! と表示されれば成功です。

長くなってきたので次回、ライセンスの付与するためのコマンドレットを見ていきたいと思います。

音楽:Blue Tone