PowerShellでMicrosoft Graphを非対話認証する ― 証明書・シークレット・最小権限

PowerShellカテゴリを表すパンダのイラスト PowerShell

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Microsoft Learnの現行ドキュメントを確認し、旧版の認証例を修正しました。

検証ステータス:📘 Microsoft公式情報確認済み/テナント実機未検証

バックグラウンド処理でMicrosoft Graphへ接続する場合は、ユーザーの対話ログインではなくapp-only認証を使えます。Microsoft Graph PowerShell SDKでは、証明書やクライアントシークレットを使った接続が用意されています。

長期運用では証明書を第一候補にする

証明書をアプリ登録へ登録し、実行端末の証明書ストアから秘密鍵を利用します。秘密文字列をスクリプトへ埋め込む必要がありません。

$TenantId  = 'YOUR_TENANT_ID'
$ClientId  = 'YOUR_APP_ID'
$Thumbprint = 'YOUR_CERT_THUMBPRINT'

Connect-MgGraph `
  -TenantId $TenantId `
  -ClientId $ClientId `
  -CertificateThumbprint $Thumbprint `
  -NoWelcome

Get-MgContext | Select-Object TenantId, ClientId, AuthType

Get-MgContextAuthTypeAppOnly になっていることを確認します。

クライアントシークレットを使う場合

現行のGraph PowerShell SDKでは -ClientSecretCredential を使用します。旧記事の -ClientSecret 例は現行の接続例と一致しないため削除しました。

$ClientId = 'YOUR_APP_ID'
$TenantId = 'YOUR_TENANT_ID'
$Secret   = Read-Host 'Client secret' -AsSecureString
$Credential = [pscredential]::new($ClientId, $Secret)

Connect-MgGraph `
  -TenantId $TenantId `
  -ClientSecretCredential $Credential `
  -NoWelcome

運用ではシークレットをソースコードやGitへ保存せず、秘密情報ストアから取得します。Azure上で実行する処理では、要件に合えばマネージドIDやフェデレーションも検討します。

Graph権限は最小限にする

app-onlyではアプリケーション許可をアプリ登録へ付与し、管理者同意が必要になる場合があります。必要なAPIだけに限定し、広い Directory.ReadWrite.All などを安易に付与しないことが重要です。

並列化は認証と分けて考える

Graph APIの処理速度は認証方式だけで決まりません。並列化するとスロットリングを受けることがあるため、「5〜8倍」のような固定倍率は期待値にしないでください。ページング、要求数、429応答とRetry-Afterを見ながら設計します。

公式情報・一次情報

この記事の更新履歴

  • 2026-09-13 追加:証明書認証、ClientSecretCredential、最小権限、認証確認手順を追加。
  • 2026-09-13 変更:現行Microsoft Graph PowerShell SDKの接続方法に合わせてコード例を変更。
  • 2026-09-13 削除:内部style_prompt、本文H1、旧 -ClientSecret 例、根拠のない性能倍率を削除。

文書情報

記事タイトル
PowerShellでMicrosoft Graphを非対話認証する ― 証明書・シークレット・最小権限
作成日
更新日
Source URL
https://papanda925.com/?p=7036

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました