2022 年 6 月 30 日以降、PowerShell で利用されてきた Microsoft 365 におけるライセンスの付与コマンドレットである Set-MsolUserLicense などが利用できなくなるというアナウンスが入ってきました。
上記がその内容なのですが、要は Microsoft Graph への置き換えのために古い API を削除していくことになったようです。
という訳で 2022 年 6 月までに関連スクリプトの置き換えが必要なのですが、 PowerShell で利用するためにはまず Microsoft Graph SDK のインストールが必要です。
さっそくモジュールをインストールしていきましょう。
Install-Module Microsoft.Graph -Scope CurrentUser
CurrentUser を選択すると自分のみにインストールされます。
自分のみを対象とすることで管理者権限も不要となります。
Y か A で先に進めます。
インストール完了まで 5 分ほど時間がかかります。
必要に応じて -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 の値はあとで使うので覚えておきましょう。
ちなみに以下パラメータを付与することで 5 年間有効な証明書を作成することも可能です。が、やっぱり期間は長くしすぎない方が良いかと思います。
-NotAfter (Get-Date).AddYears(5)
これもマシンに紐づけたい場合は CertStoreLocation の値を cert:\LocalMachine\My に変更しておくことも可能です。
次に以下コマンドで証明書ストアを開きます。
certmgr.msc
マシンの場合は以下コマンドに変わります。
certlm.msc
作成した Subject が一致する証明書ができているので、ダブルクリックで開きます。
拇印が Thumbprint と一致していることは確認しておくとよいですね。
詳細タブのなかにある「ファイルにコピー」ボタンを押して鍵なしの公開証明書を PC 内にコピーします。これを AzureAD に登録する形ですね。
ここから先はウィザード通りに次へボタンを押すだけです。
秘密鍵は外に出す必要がないため、いいえを選択します。
形式は何でもよいのですが、 DER を選んでおきましょうか。
出力先を選択したらおしまいです。
こんな感じに完了がアナウンスされます。
完了を押すと エクスポート完了の旨が示されます。
続いて AzureAD のサイトに移動します。
アドレスは以下ですね。
https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps
アプリの登録画面が表示されたら、新規登録ボタンを押します。
適当な名前を入力し、使用するテナントを設定しましょう。
リダイレクト URI と共に初期値のままで問題ありません。
登録が完了するとアプリケーション(クライアント) ID とディレクトリ(テナント) ID が表示されるので、これらもメモしておきましょう。
ここまでメモした 3 つが重要項目です。
続いて API のアクセス許可画面に移動します。
ここでは Graph API にアクセスしてもよい権限を設定していく工程を見ていきます。
アクセス許可の追加ボタンを押しましょう。
アクセス許可を Microsoft Graph に対して要求する流れですね。「 Microsoft Graph 」を選択してください。
続いて「アプリケーションの許可」を選びます。
すると下部に選択画面が出るので、 User.Read と入力します。
そこで出てくる User の項目の中から User.ReadWrite.All を選びます。
選んだらそのまま検索の内容を変更し、「 Organization 」と入力します。
同じように Organization の中にある Organization.Read.All を選択して「アクセス許可の追加」ボタンを押しましょう。
先ほどの画面にアクセス許可された名前が追加されていることが分かります。
この時点で不要なものは消しておきたいので、 User.Read となっている個所を選んで削除します。
右側にサブフォームができるので、「アクセス許可の削除」を押しましょう。
念のため聞かれますが、「はい、削除します」ボタンを押し消していきます。
もう少し権限の観点は続きます。
削除の時点で以下のようになったと思いますが、右側にビックリマークが表示されています。
< テナント名 > に管理者の同意を与えますというボタンがあるので、これを押します。
管理者として使ってよいことを事前同意する形ですね。
これでアクセス権限周りの対応は完了です。
最後に先ほど作成した証明書を AzureAD に登録していきましょう。
証明書とシークレットを開きます。
右側に証明書のアップロードというボタンがあるので押していきます。
証明書がアップロードされ、追加ボタンを押すことで AzureAD 側にこの証明書が利用できるように登録されます。
ここでも拇印が表示されているので、先のものと同等であることを確認しておきましょう。
これで、サーバー側の設定は完了です。
PowerShell に戻って、 Microsoft 365 に接続してみましょう。
接続は Msol などのモジュールを利用せず、 Graph SDK からの接続となります。コマンドレットは以下の通りです。先ほどメモした 3 つの項目を埋めていきましょう。
Connect-MgGraph -ClientID <ID> -TenantId <ID> -CertificateThumbprint <ThumbPrint>
Welcome To Microsoft Graph! と表示されれば成功です。
長くなってきたので次回、ライセンスの付与するためのコマンドレットを見ていきたいと思います。
音楽:Blue Tone