Microsoft Graph PowerShell v2.0 の新しい認証方法

Microsoft Graph PowerShell v2.0が公開されました。今回はv2.0で新しく利用できるようになった認証方法を紹介したいと思います。

参考:Microsoft Graph PowerShell v2.0 でサポートされた認証方法と変更点 | Japan Azure Identity Support Blog (jpazureid.github.io)

参考:msgraph-sdk-powershell/docs/upgrade-to-v2.md at dev ·マイクロソフトグラフ/MSFgraph-SDK-PowerShell ·ティッカー (github.com)

Microsoft Graph PowerShell v2.0のインストール

v2.0になってからMicrosoft Graph REST API (v1.0/Beta) を呼び出すモジュールが分かれました。

引用元:Microsoft Graph PowerShell v2.0 でサポートされた認証方法と変更点 | Japan Azure Identity Support Blog (jpazureid.github.io)

Microsoft Graph REST API (v1.0)を呼び出すモジュールをインストールするコマンドは下記の通りです。

Install-Module Microsoft.Graph

Microsoft Graph REST API (Beta)を呼び出すモジュールをインストールするコマンドは下記の通りです。

Install-Module Microsoft.Graph.Beta

既にMicrosoft.Graphをインストールしている場合は下記のコマンドでアップグレードが可能です。

Update-Module Microsoft.Graph

私はインストール済みのため、アップグレードしてみたいと思います。

問題なく、アップグレードできました。

v2.0から追加された認証方法

以下の3つがサポートされるようになりました。

  • マネージドID
  • クライアントシークレット
  • 環境変数ベース

クライアントシークレットは前に書いた記事にて「MSAL認証用のモジュールを使ったやり方」として紹介しましたが、今回のアップグレードで正式に対応されましたね。

Microsoft Graph の認証方法 - JBS Tech Blog

マネージドID

システム割り当てマネージドIDとユーザー割り当てマネージドIDに対応しており、コマンドは下記の通りです。

システム割り当てマネージドID

Connect-MgGraph -Identity

ユーザー割り当てマネージドID

Connect-MgGraph -Identity -ClientId "<ユーザー割り当てマネージド ID のアプリケーション ID>"

Azure ADアプリへのアクセス許可はAzure Portal上では付与できません。

下記のサイトを参考にアクセス許可を付与してみてください。

チュートリアル - Web アプリからアプリとして Microsoft Graph にアクセスする - Microsoft Entra | Microsoft Learn

クライアントシークレット

下記のコマンドでクライアントシークレットを使った対話型の認証が可能です。

$ClientSecretCredential = Get-Credential -Username "<アプリケーションID>" Message "Enter the client secret string."
Connect-MgGraph -TenantId "<テナントID>" -ClientSecretCredential $ClientSecretCredential

もちろん非対話型の認証も可能です。

$AppId = "<アプリケーションID>"
$Secret = ConvertTo-SecureString -String "<クライアントシークレット>" -AsPlainText -Force
$ClientSecretCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $AppId, $Secret
Connect-MgGraph -TenantId "<テナントID>" -ClientSecretCredential $ClientSecretCredential

環境変数ベース

環境変数にテナントID、アプリケーションID、シークレットを定義することで認証することが可能です。

$Env:AZURE_CLIENT_ID = "<アプリケーションID>"
$Env:AZURE_TENANT_ID = "<テナントID>"
$Env:AZURE_CLIENT_SECRET = "<クライアントシークレット>"
Connect-MgGraph -EnvironmentVariable

クライアントシークレットと証明書が2つ定義されている場合はクライアントシークレットが優先されるとのことです。クライアントシークレット用の環境変数も下記に記載があります。

参考:azure-sdk-for-net/sdk/identity/Azure.Identity at main · Azure/azure-sdk-for-net · GitHub

まとめ

Microsoft Graph PowerShell v2.0の新しい認証方法を説明しました。

v1.0では、スクリプト自動化の課題としてシークレットなどのセキュリティ情報の保管方法がありましたが、マネージドIDを利用することで保管する必要がなくなったので、よい改善点だと思います。

スクリプト自動化が必要な際は積極的に活用してみてください。

執筆担当者プロフィール
梅村 聡

梅村 聡(日本ビジネスシステムズ株式会社)

CS本部DI部CAG所属。主にMicrosoft 365関連の開発を担当。趣味はバレーボールとアニメ鑑賞。

担当記事一覧