🔰
【対応方法】cdk : このシステムではスクリプトの実行が無効になっているため、ファイル(cdk.ps1) を読み込むことができません。
概要
Windows端末で"cdk init"を実行した際に起こるPSSecurity-exceptionの原因と対処法について紹介します!初歩的な内容ですが、Windows端末でAWS CDKの勉強を始めようとするとみんな通る道かと思うので、何かの役にたてば幸いです。
エラー全文
普段使わない端末でcdk initを実行しところ、PowerShwllの実行権限がなく失敗...
cdk init sample-app --language typescript
cdk : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\miyab\AppData\Roaming\npm\cdk.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ cdk init sample-app --language typescript
+ ~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
原因
powershell(.ps1)の実行を無効に設定されているため。
「Get-ExecutionPolicy」コマンドレットで現在の「ExecutionPolicy」を確認したところ、
Restricted(制限あり)の状態になっている。
どうやらWindowsのクライアント端末ではデフォルトでRestricted(制限あり)が設定されているよう。
> Get-ExecutionPolicy
Restricted
対処方法
ExecutionPolicyをRemoteSignedに変更してあげる。
セキュリティ的に、 実行中のプロセスのみをスコープにする。
#ExecutionPolicyを設定(Set-ExecutionPolicy)。
> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
> Get-ExecutionPolicy
RemoteSigned
改めて、cdk initを実行したところ無事に成功!
> cdk init sample-app --language typescript
Applying project template sample-app for typescript
# Welcome to your CDK TypeScript project
(以下略)
(参考) ExecutionPolicyとScopeの一覧
MSの公式ドキュメントより引用
ExecutionPolicy
ExecutionPolicy | 説明 |
---|---|
AllSigned | すべてのスクリプトと構成ファイルが、ローカル コンピューターで記述されたスクリプトを含め、信頼できる発行元によって署名されている必要があります。 |
Bypass | 何もブロックされず、警告やプロンプトは表示されません。 |
Default | 既定の実行ポリシーを設定します。 Windows クライアントまたは Windows サーバーの場合は RemoteSigned に制限されます。 |
RemoteSigned | インターネットからダウンロードしたすべてのスクリプトと構成ファイルが、信頼できる発行元によって署名されている必要があります。 Windows サーバー コンピューターの既定の実行ポリシー。 |
Restricted | 構成ファイルを読み込んだり、スクリプトを実行したりしません。 Windows クライアント コンピューターの既定の実行ポリシー。 |
Undefined | スコープに対して実行ポリシーが設定されていません。 グループ ポリシーによって設定されていないスコープから、割り当てられた実行ポリシーを削除します。 すべてのスコープの実行ポリシーが未定義の場合、有効な実行ポリシーは Restricted になります。 |
Unrestricted | PowerShell 6.0 以降では、これは Windows 以外のコンピューターの既定の実行ポリシーであり、変更することはできません。 すべての構成ファイルを読み込んで、すべてのスクリプトを実行します。 インターネットからダウンロードされた署名されていないスクリプトを実行すると、実行前にアクセス許可の入力を求められます。 |
Scope
Scope | 説明 |
---|---|
MachinePolicy | コンピューターのすべてのユーザーのグループ ポリシーによって設定されます。 |
UserPolicy | コンピューターの現在のユーザーのグループ ポリシーによって設定されます。 |
Process | 現在の PowerShell セッションにのみ影響します。 |
CurrentUser | 現在のユーザーにのみ影響します。 |
LocalMachine | コンピューターのすべてのユーザーに影響を与える既定のスコープ。 |
Discussion