概要
Azureの某ハンズオン本でAzure PowerShellを使用してサインインしようとしたところ、エラーが出た。
環境
Windows10 Home 22H2
PowerShell 5.1.19041.4780
エラー内容
前提として、PowerShellでAzure PowerShellモジュールがインストール済であること。ここではモジュールインストールについては解説しないので他記事を参照頂きたい。
PS C:\> Install-Module az
この後、サインインのコマンドレットを実行する。
# サインイン
PS C:\> Connect-AzAccount
# サインイン(多要素認証設定済の場合)
PS C:\> Connect-AzAccount -TenantId aaaa-bbbb-ccccc-00000 #引数でテナントIDを指定する必要がある
すると、エラーが表示された。
Connect-AzAccount : 'Connect-AzAccount' コマンドはモジュール 'Az.Accounts' で見つかりましたが、このモジュールを読み込むことができませんでした。
詳細については、'Import-Module Az.Accounts' を実行してください。
発生場所 行:1 文字:1
+ Connect-AzAccount -TenantId aaaa-bbbb-ccccc-00000
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Connect-AzAccount:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CouldNotAutoloadMatchingModule
原因
エラーメッセージに書いてある通り、Import-Module Az.Accounts
コマンドレットを実行してみる。
PS C:\> Import-Module Az.Accounts
Import-Module : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Program Files\WindowsPowerShell\Modules\Az.Accounts\3.0.4\A
z.Accounts.psm1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照
してください。
発生場所 行:1 文字:1
+ Import-Module Az.Accounts
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) [Import-Module]、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand
どうやら、PowerShellの実行ポリシーが制限されていたことが原因らしい。
解決策
PowerShellの実行ポリシーを変更する。実行ポリシーは5段階あり、現在はRestrictedになっていたため全スクリプトの実行が禁止されていた。(初期設定)
今回のような通常のケースでは、ローカルスクリプトとネットからDLした署名付きスクリプトにのみ実行を許可するRemoteSignedへの変更が妥当と思われる。
よりポリシーを緩くすることもできるが、その分セキュリティリスクは高くなる。5段階のポリシーの詳しい条件については下記記事に記載があるので、参照の上自身のセキュリティ要件に適切なポリシーを選択頂きたい。
現在のポリシーを確認する
PS C:\> Get-ExecutionPolicy
Restricted
RemoteSignedへのポリシー変更。確認メッセージが表示されるので、Y
を入力。
PS C:\> Set-ExecutionPolicy RemoteSigned
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies のヘルプ トピック
(https://go.microsoft.com/fwlink/?LinkID=135170) で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): Y
PS C:\>
ポリシーが変更され、コマンドレットを実行できるようになった
PS C:\> Get-ExecutionPolicy
RemoteSigned
余談
・MS社の公式ドキュメント通りにサインインする場合は、ポリシー変更手順も記述されている為本エラーは発生しない想定。
・ポリシー変更時に、現在開いているPowerShellのプロセスのみ、または現在のユーザのみへの対象を絞ったポリシー変更も可能。