Microsoft Graph PowerShell v2.0が公開されました。今回はv2.0で新しく利用できるようになった認証方法を紹介したいと思います。
Microsoft Graph PowerShell v2.0のインストール
v2.0になってからMicrosoft Graph REST API (v1.0/Beta) を呼び出すモジュールが分かれました。
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を利用することで保管する必要がなくなったので、よい改善点だと思います。
スクリプト自動化が必要な際は積極的に活用してみてください。