はじめに
昨日までご機嫌よく動いていたAzAcount処理が急に接続エラーとなり少々困る事態となりました。色々調査しましたが現時点では根本的原因は不明な状態ですが、試行続けた結果、代替方法を見つけましたので、やったこと含めてまとめます。
前提・症状
- サービスプリンシパル(アプリケーション)を用いたクライアントシークレットでの非対話認証
- サービスプリンシパルに閲覧権限を付与
- Connect-AzAccountで要求エラーが発生
- 接続エラー発生のマシンはWindowsServer2022AzureEdition
- MgGraph、ExchangeOnline、PNP.Powershellが同居
- マシンはAzureVM
解消するためにやったこと
VMの再起動
定番の再起動を実施しました。
サービスプリンシパルの正常性の確認
初歩的なことですが、クライアントシークレットor証明書の有効期限が切れていないか確認しました。
OSバージョンの異なる他マシンで接続検証
他OSバージョンの異なるマシンから同じコマンドレットで接続できるか確認しました。
- クライアント端末から実行
- 物理サーバから実行
- 異なるOSのAzureVMから実行(azureマイグレーションでWindowsServer2019)
ここで他バージョンのOSマシンから接続できるなら現時点では最良の解決策だと思います。後述する方法を試しましたが、残念ながら解決に至らず時間と手間だけかかりました。
Azバージョンアップ・ダウングレード
正常稼働するAzバージョンにアップグレード・ダウングレードします。Azは包括的なモジュールのためAzAccounts単体もバージョンを確認し、アップグレード・ダウングレード実行してみてください
- Azのアップグレード・ダウングレード
- AzAccountsのアップグレード・ダウングレード
##ポリシーの変更
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
##Azのアップグレード・ダウングレード、バージョンは正常稼働するバージョンを指定
Uninstall-Module -Name Az
Install-Module -Name Az -RequiredVersion 5.1.1
##AzAccountsのアップグレード・ダウングレード、バージョンは正常稼働するバージョンを指定
Uninstall-Module -Name AzAccounts
Install-Module -Name AzAccounts -RequiredVersion 5.1.1
明示的にTLS1.2を指定
OSバージョンによっては明示的に指定が必要になるようです。
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
PowerShell7のインストール
WindowsPowerShell5.1がWindowsにはデフォルトでインストールされてますが、PowerShell7で正常動作する可能性もあるようですので試してみてました。
WindowsPowerShellとは全くの別物ですのでご安心ください。
最終的な弊社の結論
色々試しましたが、結果的に他AzureVMの異なるバージョンOS上なら接続できましたので、それを利用するようにしました。
個人的には唐突に使えなくなったので、AzureEditionの特徴である再起動不要でパッチがあたっているのが影響しているのではと邪推しております。
まとめ
以上で、『【原因不明】Connect-AzAccountが急に使えなくなった時の対策』でした。
今のところはAzureに関するものですが、同居しているMgGraph、ExchangeOnlineやPNP.Powershellが使えなくならないか心配です。
祈る気持ちで運用を見守りたいと思います。