Microsoft Entra ID(旧称Azure AD)で証明書ベースの認証を設定するのは、特にスクリプトを自動化するためにパスワードを使わずに済ませようとしている場合は、少々面倒な作業です。証明書の作成、エクスポート、アプリの登録、アクセス許可など、手順が複雑に思えるかもしれませんが、それはあなただけではありません。まるで迷路のようですが、一度コツをつかめば、パスワードをプレーンテキストで保存することなくPowerShellを安全に実行できる、非常に強力なツールです。さらに、自動化時にMFAポップアップが表示されることもなくなります。ただし、このプロセスは、証明書の作成、Azureの構成、そしてその証明書を使用してPowerShellスクリプトからExchange OnlineやTeamsなどのサービスと通信させるという、かなり複雑なプロセスに分かれていることを覚えておいてください。結局のところ、最終的な目標は、実行時にプロンプトやパスワードプロンプトを表示することなく、シームレスかつ安全に接続することです。このチュートリアルが、物事をより明確にし、頭痛の種を軽減してくれることを願っています。
Microsoft Entra ID で証明書ベースの認証を修正する方法
方法1: 自己署名証明書の作成とエクスポート
まず、証明書が必要です。これはあなたの身元を証明するものです。認証局(CA)から取得することも、テスト用に自己署名証明書を生成することもできます。少し奇妙に思えますが、New-SelfSignedCertificateローカルマシンでPowerShellコマンドを使って証明書を作成すれば十分です。例えば、3年間有効な証明書を生成するには、次のようにします。
$certvalid = (Get-Date).AddYears(3) $newcert = New-SelfSignedCertificate -DnsName "pre_prod.woshub.com" -CertStoreLocation "cert:\LocalMachine\My" -NotAfter $certvalid -KeySpec KeyExchange -FriendlyName "Azure Microsoft Entra ID PowerShell Auth cert" $newcert | fl Subject, Thumbprint, NotBefore, NotAfter
すると、証明書のIDのようなものに相当するThumbprintを含む情報が出力されます。この Thumbprint をコピーしておきましょう。後で必要になります。
次に、Azure が受け入れられるようにエクスポートする必要があります。エクスポートは 2 回に分けて行います。1 回は CER ファイル(公開鍵)として、もう 1 回は PFX ファイル(秘密鍵 + 公開鍵、パスワード保護)としてエクスポートします。コマンドは以下のとおりです。
$newcert | Export-Certificate -FilePath "C:\PS\azure-auth.cer" $newcert | Export-PfxCertificate -FilePath "C:\PS\azure-auth.pfx" -Password (ConvertTo-SecureString -String "S3dPswrd@123" -AsPlainText -Force)
ファイルパスが目的の場所に合っていることを確認してください。PFXのパスワードだけ覚えておいてください。後でインポートするときに使います。
方法2: Azure Entra / Azure Portalでアプリを登録する
次のステップ:Azureにこの証明書を信頼するように指示します。Azure Portalにサインインします。「Microsoft Entra ID」>「アプリ登録」>「新規登録」に進みます。わかりやすい名前を付け、「この組織ディレクトリ内のアカウントのみ」を選択して、「登録」をクリックします。
登録後、アプリケーション(クライアント)IDをコピーします。これはPowerShellが認証に使用するアプリのIDです。メモしておいてください。
アプリ登録で、「API のアクセス許可」 > 「アクセス許可の追加」に進みます。Microsoft Graph や Exchange Onlineなど、必要な API を選択します。Exchange を管理するには、 「アプリケーションのアクセス許可」にExchange. ManageAsAppを追加します。次に、「アクセス許可の追加」をクリックし、管理者の同意を必ず付与してください。これにより、アプリに必要な権限が付与されます。
次に、生成した証明書を「証明書とシークレット」にアップロードします。「証明書のアップロード」を使用し、自己署名PFXファイルを選択します。また、「Azure Active Directory」>「ロールと管理者」に移動して、割り当てを追加し、アプリにExchange管理者ロールを割り当てます。これにより、アプリでExchange Onlineを管理できるようになります。これは通常、メールボックススクリプトなどで必要となります。
方法3: PowerShellを使用してExchange Onlineに接続する
すべて準備ができたら、PowerShellからパスワードなしで接続できるようになります。Exchange Onlineモジュール(EXO)がインストールされていることを前提に、変数を準備してください。
$certThumbprint = "9CF05589A4B29BECEE6456F08A76EBC3DC2BC581" $AzureAppID = "11111111-2222-3333-4444-123456789" $tenant="woshub.onmicrosoft.com"
次に、次のように connect コマンドを呼び出します。
Connect-ExchangeOnline -AppId $AzureAppID -CertificateThumbprint $certThumbprint -Organization $tenant
パスワードを聞かれるはずはありません。接続してすぐに使えるはずです。設定によっては、一瞬ハングしてから接続するかもしれませんし、トークンを更新するかPowerShellを再起動する必要があるかもしれません。奇妙ですが、一度接続してしまえば問題なく動作します。
テナントに何が含まれているかを確認するには、次のような簡単なコマンドを実行します。
Get-EXOMailbox
終了したら必ず切断してください。
Disconnect-ExchangeOnline -Confirm:$false
Teams や AzureAD などの他のサービスを実行する場合も同じロジックが適用され、コマンドを交換するだけです。
Connect-MicrosoftTeams -CertificateThumbprint $certThumbprint -ApplicationId $AzureAppID -TenantId $tenant Connect-AzureAD -TenantId $tenant -ApplicationId $AzureAppID -CertificateThumbprint $certThumbprint
これらはすべて、Azure でアクセス許可が正しく割り当てられていることを前提としているため、うまくいかない場合はそれらを再確認してください。
追加: PFXを別のマシンにインポートする
同じ証明書を別のマシンで使用する必要がある場合は、PFXを慎重にインポートしてください。PowerShellで次のように実行できます。
$password = ConvertTo-SecureString -String "S3dPswrd@123" -Force -AsPlainText Import-PfxCertificate -Password $password -FilePath "C:\PS\azure-auth.pfx" -CertStoreLocation Cert:\CurrentUser\My
これにより、証明書がローカルユーザーストアにインストールされ、スクリプトで使用できるようになります。重要なのは、PFXがパスワードで保護され、安全に保管されていることを確認することです。
最初は少し大変ですが、証明書とアプリのロールを整理すれば、Exchange Online、Teams、Azureなどのサービスへの接続がかなりスムーズになります。パスワード入力のプロンプトもなく、シンプルなスクリプトで済みます。セキュリティと自動化の強化を考えると、その価値は十分にあります。確かに少し手間はかかりますが、一度設定してしまえば、スクリプトをスムーズに実行できる優れた設定になります。
まとめ
- Azure 認証用の自己署名証明書を生成してエクスポートする
- Azure Entra ポータルでアプリを作成して登録する
- Azureで権限とロールを適切に割り当てる
- サイレント接続に PowerShell でサムプリントとアプリ ID を使用する
- 後でセッションを切断することを忘れないでください
まとめ
全体的に見て、証明書認証は最初は難しそうに思えるかもしれませんが、一度コツをつかめば信頼できます。重要なのは、証明書の作成、アプリの登録、ロールの割り当て、そしてログインスクリプトの作成という流れを理解することです。特に権限設定に関しては、Azure は細かい設定が厳しいため、最初は完璧にはいかないかもしれません。しかし、正しく設定すれば、自動化は安全かつスムーズに実行されます。この方法が、誰かの設定における面倒な作業を軽減するのに役立つことを願っています。