Netwrix 1Secure는 데이터와 아이덴티티 전반에 걸쳐 통합된 가시성을 제공합니다 - 14일간 무료로 전체 액세스가 가능합니다.무료 평가판 시작

리소스 센터블로그

PowerShell 실행 정책

PowerShell 실행 정책

Aug 25, 2025

PowerShell 실행 정책은 스크립트 실행 조건을 제어하여 실수로 인한 실행이나 안전하지 않은 실행을 줄입니다. 실행 정책은 제한적(Restricted, AllSigned)에서 허용적(Unrestricted, Bypass)까지 범위가 있으며, Process, CurrentUser, LocalMachine 같은 여러 범위에 적용할 수 있습니다. 보안 경계는 아니지만 더 안전한 스크립팅을 유도하고, 디지털 서명을 지원하며, 일관된 조직 관리가 가능하도록 Group Policy 를 통해 중앙에서 강제 적용할 수 있습니다.

PowerShell 실행 정책 소개

PowerShell에서 실행 정책(Execution policies)은 PowerShell 스크립트가 시스템에서 실행되는 조건을 제어하도록 설계된 안전 기능입니다. 이러한 정책은 엄밀히 말해 보안 메커니즘은 아니지만, 다음 목적을 수행하기 위한 것입니다:

  • 스크립트의 우발적 실행을 방지
  • 알 수 없거나 신뢰할 수 없는 출처에서 스크립트를 실행할 위험을 관리하는 데 도움

실행 정책은 스크립트 보안을 강화하는 데 중요한 역할을 합니다. 이 정책은 시스템에서 실행될 수 있는 스크립트의 유형을 제한함으로써 1차 방어선 역할을 합니다. 또한 AllSigned 및 RemoteSigned 같은 정책을 통해 스크립트 출처에 대한 신뢰를 설정하여, 스크립트가 신뢰할 수 있는 출처에서 비롯되었는지 보장합니다. 이는 사용자가 이메일 첨부파일이나 웹에서 다운로드한 스크립트를 자신도 모르게 실행할 수 있는 상황에서 인적 오류를 줄이는 데 도움이 됩니다. 더 넓은 관점에서, 조직은 실행 정책을 사용해 여러 시스템과 사용자 전반에 걸쳐 일관된 보안 관행을 강제할 수 있습니다.

다만 다음도 함께 염두에 두어야 합니다:

  • 실행 정책은 보안 경계가 아닙니다. 관리자 권한이 있는 사용자가 재정의할 수 있거나, 특정 PowerShell 플래그를 통해 우회될 수 있습니다.
  • 이들의 주된 목적은 악의적인 의도를 가진 공격자를 차단하는 것이 아니라, 실수로 인한 실행을 방지하는 데 있습니다.

PowerShell 실행 정책은 서명된 스크립트, 안전한 저장소, 기타 보호 조치 등을 포함하는 보다 광범위한 보안 전략의 일부로 사용해야 합니다.

Netwrix Auditor for Windows File Servers

Netwrix Auditor for Windows File Server로 새 파일 모니터링 프로세스를 간소화하세요

자세히 알아보기

PowerShell 실행 정책 이해하기

실제로 실행 정책이 어떻게 작동하는지부터 살펴보겠습니다. 스크립트를 실행하면 PowerShell이 실행 정책을 확인합니다.

  • 스크립트가 신뢰할 수 있는 게시자가 서명했거나 로컬에서 제공되는 등 요구 사항을 충족하면 실행됩니다.
  • 스크립트가 정책의 요구 사항을 충족하지 못하면 PowerShell이 실행을 차단하고 오류 메시지를 표시합니다.

주요 이점

PowerShell 실행 정책의 주요 이점은 다음과 같습니다:

  • 악성 스크립트의 우발적 실행을 방지합니다 — 실행 정책은 신뢰할 수 없거나 유해한 스크립트를(특히 인터넷에서 다운로드한 스크립트) 의도치 않게 실행할 위험을 줄여줍니다.
  • 안전한 스크립팅 관행을 권장합니다 — AllSigned 및 RemoteSigned 같은 정책은 스크립트 작성자와 사용자가 신뢰할 수 있는 인증서로 스크립트에 서명하도록 유도하여, 진위성과 무결성을 보장합니다.
  • 로컬 스크립트와 원격 스크립트를 구분합니다 — RemoteSigned 같은 정책은 로컬에서 생성된 스크립트는 제한 없이 실행할 수 있도록 허용하는 한편, 원격 또는 다운로드된 스크립트에는 더 엄격한 제어를 적용합니다.
  • 유연한 구성 — 실행 정책은 다양한 범위(프로세스, CurrentUser, LocalMachine, MachinePolicy, UserPolicy)에 적용할 수 있어, 관리자가 정책을 어떻게 그리고 어디에 적용할지에 대해 제어할 수 있습니다.
  • 유연성을 위한 일시적 재정의 — 일시적 재정의(예: -ExecutionPolicy Bypass 사용)를 통해 시스템의 보안 설정을 영구적으로 변경하지 않고도, 통제된 상황에서 스크립트가 실행되도록 허용할 수 있습니다.
  • 조직의 컴플라이언스 향상 — 실행 정책은 그룹 정책을 통해 조직 전체에 적용하여 스크립트 실행에 대한 일관된 보안 관행을 보장할 수 있습니다.
  • 스크립트 보안에 대한 인식 제고 — 스크립트 서명이나 정책 우회 같은 명시적 작업을 요구함으로써 실행 정책은 사용자가 스크립트의 출처와 신뢰성을 비판적으로 판단하도록 유도합니다.

주요 제한 사항

PowerShell 실행 정책의 주요 제한 사항은 다음과 같습니다:

  • 실행 정책은 고의적인 공격을 막도록 설계되지 않았기 때문에 보안 경계로 볼 수 없습니다. 관리자 권한을 가진 숙련된 사용자는 다음과 같이 쉽게 이를 우회할 수 있습니다:
  • -ExecutionPolicy Bypass 플래그 사용
  • 시스템 레지스트리 수정
  • 다른 프로세스 내에서 스크립트를 실행하거나 PowerShell을 완전히 우회하기
  • 실행 정책은 스크립트의 내용을 분석하지 않습니다. 서명 키가 유출되면 서명된 스크립트에도 악성 코드가 포함될 수 있습니다.
  • 실행 정책은 PowerShell 스크립트와 명령에만 적용되므로 보호 범위가 제한적입니다. VBScript, Python 같은 다른 스크립트 유형이나 실행 파일은 제어하지 않아 보호에 공백이 생깁니다.
  • AllSigned와 같은 엄격한 정책은, 사용자가 신뢰할 수 있는 서명 인프라에 대한 접근 권한이 없거나 서명되지 않은 스크립트로 작업하는 일이 잦다면 지연을 초래할 수 있습니다.
  • 실행 정책은 사용자가 이를 준수하도록 의존합니다. 교육을 받지 않은 사용자는 실행 정책을 우회하거나, 그 의미와 영향을 충분히 이해하지 못한 채 실행 정책을 비활성화할 수 있습니다.
  • MachinePolicy, UserPolicy, Process와 같은 여러 정책 범위는 특히 혼합 또는 중복 설정이 있는 환경에서 혼란을 야기할 수 있습니다.
  • 자동화된 스크립트나 CI/CD 파이프라인은 제한적인 정책 때문에 문제가 발생할 수 있으며, 추가 구성이 필요하거나 일시적인 정책 우회(override)가 요구될 수 있습니다.
  • 실행 정책은 잘못된 보안 감각을 줄 수 있습니다. 관리자는 물론 사용자가 이를 강력한 보안 메커니즘이라고 오해할 수 있지만, 실제로는 주로 실수로 스크립트가 실행되는 것을 방지하기 위한 안전장치입니다.

다음 표는 PowerShell 실행 정책의 주요 이점과 한계를 요약합니다.

Script Execution Control

Prevents accidental execution of harmful scripts

Easily bypassed by users with administrative privileges

Source Validation

Encourages script signing and trusted sources

Does not verify script contents for malicious behavior

Organizational Use

Supports consistent enforcement through Group Policy

May hinder productivity in environments with unsigned scripts

Flexibility

Allows scoped configurations and temporary overrides

Multiple scopes can be confusing for policy management

Security Scope

Adds a layer of defense in a security strategy

Limited to PowerShell scripts, leaving other tools unprotected

PowerShell 실행 정책의 종류

PowerShell은 6가지 유형의 실행 정책을 제공합니다.

제한됨

이것은 Windows 시스템의 기본 실행 정책입니다. 모든 스크립트의 실행을 차단하므로 관리자는 스크립트를 사용해 작업을 자동화할 수 없습니다. 이 정책에서는 개별 명령만 대화형으로 실행할 수 있습니다.

이 정책은 스크립트 실행을 최대한 제한하므로 스크립트가 필요하지 않은 환경에 적합합니다.

RemoteSigned

이는 Windows 서버의 기본 실행 정책입니다. 이 정책은 인터넷에서 다운로드한 스크립트와 같이 원격에서 가져온 스크립트가 신뢰할 수 있는 게시자에 의해 서명되어 있어야 함을 요구합니다. 로컬 컴퓨터에서 작성한 스크립트는 서명할 필요가 없습니다. 전반적으로 이 정책은 보안과 편의성의 균형을 맞추지만, 일부 시나리오에서는 불편을 초래할 수 있습니다.

인터넷에서 다운로드한 서명되지 않은 스크립트를 실행하려면, 예를 들어 Unblock-File cmdlet을 사용하여 차단을 해제해야 합니다.

AllSigned

이 정책은 신뢰할 수 있는 인증서와 인증서 인프라에 의존합니다. 이 정책 하에서는 신뢰할 수 있는 게시자가 서명한 스크립트와 구성 파일만 실행할 수 있습니다. 서명되지 않았거나 변조된 스크립트는 실행할 수 없습니다. 또한, 스크립트가 서명되어 있더라도 어떤 스크립트를 실행하기 전에 사용자에게 확인을 요청합니다.

이 정책은 스크립트 무결성과 인증을 강하게 강조하는 환경에 가장 적합합니다.

제한 없음

이 정책은 모든 스크립트를 제한 없이 실행할 수 있게 하지만, 실행 전에 원격의 서명되지 않은 스크립트에 대해서는 경고가 표시됩니다. 이는 Windows가 아닌 컴퓨터의 기본 실행 정책이며 변경할 수 없습니다.

이 정책은 악성 또는 유해한 스크립트를 실행할 위험을 높이므로, 보안보다 유연성이 우선시되는 개발 또는 테스트 환경에만 제한해서 사용해야 합니다.

우회

이 정책은 경고나 프롬프트 없이 스크립트를 자유롭게 실행할 수 있도록 허용합니다. 자동화 시나리오, CI/CD 파이프라인, 또는 실행 정책이 정당한 워크플로와 충돌할 때 이 옵션을 사용하세요. 보호나 제한이 없으면 우발적이거나 악의적인 스크립트 실행의 위험이 배가될 수 있으니 주의하십시오.

정의되지 않음

이 옵션을 사용하면 현재 범위에 대한 실행 정책이 제거됩니다. 모든 범위가 정의되지 않은 경우, 유효 정책은 Windows 클라이언트의 경우 기본값이 Restricted 이고, RemoteSigned 는 Windows Server용 기본값입니다. 범위에 대한 실행 정책 설정을 지우는 데 사용됩니다.

PowerShell 실행 정책의 범위

PowerShell 실행 정책은 다양한 범위(scope)에 적용할 수 있으며, 이 범위는 정책이 어떻게 그리고 어디에서 시행되는지를 결정합니다. 범위는 관리자가 개별 사용자, 컴퓨터의 모든 사용자 또는 단일 세션과 같이 서로 다른 수준에서 스크립트 실행 동작을 제어할 수 있도록 해줍니다. 다양한 범위는 아래에서 설명합니다.

MachinePolicy

Set by a Group Policy for all users of the computer. This policy overrides LocalMachine and CurrentUser. To override this policy, remove the Group Policy setting. It is used for centralized management of script execution policies for all users on a machine.

UserPolicy

Set by a Group Policy for the current user of the computer. This policy overrides LocalMachine and CurrentUser. It is used or centralized management for individual users within a domain environment. Like MachinePolicy, this policy cannot be overridden locally.

Process

Applies to the current PowerShell session only. The policy is saved in the $env:PSExecutionPolicyPreference environment variable. When the PowerShell session is closed, the variable and value are deleted. Hence the policy is temporary and ends when the session is closed. It is useful for testing or temporarily overriding the system policy without permanent changes.

CurrentUser

Applies only to the current logged-in user. This policy is stored in the CurrentUser configuration file. It is used to set a policy for individual users without affecting other users on the same computer.

LocalMachine

Applies to all users on the computer. This policy is stored in the AllUsers configuration file. This is the default scope when no scope is specified. Use it for organization-wide policies on shared machines or when multiple users need the same policy.

현재 사용자와 로컬 컴퓨터에 대한 실행 정책은 PowerShell 구성 파일에 저장됩니다. 특정 세션에 대한 실행 정책은 메모리에만 저장되며, 세션이 닫히면 손실됩니다.

범위 우선순위

서로 다른 범위에 여러 실행 정책이 정의되어 있는 경우, PowerShell은 다음의 우선순위 순서에 따라 실제로 적용되는 정책을 결정합니다(우선순위가 높은 것부터 낮은 것까지):

  1. 그룹 정책: MachinePolicy
  2. 그룹 정책: UserPolicy
  3. 실행 정책: Process
  4. 실행 정책: LocalMachine
  5. 실행 정책: CurrentUser

다음 사항을 기억하세요:

  • 그룹 정책 설정( MachinePolicy 및 UserPolicy )은 로컬 구성을 재정의합니다.
  • 실행 정책을 설정할 때 범위를 지정하지 않으면 기본적으로 LocalMachine이 사용됩니다.
  • 그룹 정책이 적용되어 있으면, 더 낮은 범위에서 Set-ExecutionPolicy로 정책을 변경하려는 시도는 실패합니다.

PowerShell 실행 정책 설정

PowerShell 실행 정책을 설정하면 시스템에서 스크립트가 실행되는 방식이 결정됩니다.

현재 실행 정책을 확인하십시오

다음 cmdlet을 사용하여 현재 실행 정책을 확인합니다:

      Get-ExecutionPolicy
      
Image

모든 범위에 대한 정책 확인

다음 cmdlet을 사용하여 모든 범위의 정책을 확인합니다:

      Get-ExecutionPolicy -List
      
Image

실행 정책 설정

Set-ExecutionPolicy cmdlet을 사용하여 PowerShell에 대한 실행 정책을 설정합니다.

명령 구문

      Set-ExecutionPolicy <PolicyName> -Scope <Scope>
      

예제 1 – 실행 정책 설정

다음 cmdlet을 사용하여 정책을 Unrestricted 로 설정합니다.

      Set-ExecutionPolicy Unrestricted
      
Image

계속하려면 Y 를 누르거나 L 를 눌러 작업을 중단합니다.

예제 2 – 실행 정책 범위 지정

정책은 서로 다른 수준(스코프)에서 설정할 수 있습니다. 다음 cmdlet을 사용하여 로컬 컴퓨터에 대해 정책을 RemoteSigned로 설정합니다:

      Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
      

다음 사항에 유의하세요:

  • LocalMachine 스코프에 대한 실행 정책을 설정하려면 PowerShell을 관리자 권한으로 실행해야 합니다.
  • 정책이 그룹 정책(Group Policy) (MachinePolicy 또는 UserPolicy)에 의해 강제 적용되는 경우, 다른 설정을 우선하며 정책을 변경하려고 하면 오류가 발생합니다.

원격 컴퓨터의 실행 정책을 로컬 컴퓨터에 적용하기

원격 컴퓨터의 PowerShell 실행 정책을 로컬 컴퓨터에 적용하려면 PowerShell 원격 처리를 사용하고 Set-ExecutionPolicy cmdlet을 함께 사용하면 됩니다. 방법은 다음과 같습니다:

      Invoke-Command -ComputerName TargetComputer -ScriptBlock {

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force

} -Credential (Get-Credential)
      

여기서 -ComputerName은 대상 컴퓨터를 지정합니다. -ScriptBlock에는 실행할 명령이 포함됩니다(이 경우 Set-ExecutionPolicy). -Credential을 사용하면 현재 계정에 대상 컴퓨터에 대한 권한이 없는 경우 사용할 자격 증명을 지정할 수 있습니다.

정책 설정을 강제로 적용

실행 정책을 변경하는 동안 프롬프트를 건너뛰려면 -Force 매개변수를 사용합니다.

      Set-ExecutionPolicy RemoteSigned -Force
      

실행 정책 제거

특정 범위에 대한 정책을 제거하려면 정책을 Undefined 로 설정합니다.

      Set-ExecutionPolicy Undefined -Scope CurrentUser
      

모든 범위를 Undefined 로 설정하면 기본 정책은 Restricted 가 됩니다.

PowerShell 실행 정책을 일시적으로 우회

PowerShell에서 스크립트를 실행할 때 정책을 영구적으로 변경하지 않고 실행 정책을 일시적으로 우회할 수 있습니다. 그러나 실행 정책을 우회하면 시스템이 보안 위험에 노출될 수 있습니다. 실행 중인 스크립트가 신뢰할 수 있는 출처에서 제공된 것인지 확인하세요.

또한 일부 명령에는 관리자 권한이 필요할 수 있습니다.

예시 1: 단일 스크립트에 대한 실행 정책 우회

이 명령은 해당 PowerShell 호출에 대해서만 실행 정책을 우회합니다.

      powershell.exe -ExecutionPolicy Bypass -File "C:\Temp\Script.ps1"
      

Example 2: Bypass in the Current Session

현재 세션의 기간 동안 실행 정책을 일시적으로 변경할 수 있습니다.

      Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
      

여기서 -Scope Process는 변경 사항이 현재 PowerShell 세션에만 적용되도록 보장합니다. 세션을 닫으면 실행 정책이 원래 설정으로 되돌아갑니다.

예제 3: 정책을 변경하지 않고 스크립트 실행

스크립트를 인라인으로 직접 실행하려면 -Command 매개변수를 사용하세요.

powershell.exe -ExecutionPolicy Bypass -Command “& { . ‘C:\Temp\Script.ps1’ }”

그룹 정책을 사용하여 실행 정책 관리

Turn on Script Execution 그룹 정책 설정을 사용하면 기업의 컴퓨터에 대한 실행 정책을 관리할 수 있습니다. 이 그룹 정책 설정은 모든 범위에서 PowerShell에 설정된 실행 정책을 재정의합니다.

  • Turn on Script Execution이 비활성화되어 있으면 스크립트가 실행되지 않습니다. 이는 Restricted 실행 정책과 동일합니다.
  • Turn on Script Execution을 활성화하고 실행 정책을 선택할 수 있습니다.
  • Turn on Script Execution이 구성되지 않은 경우에는 영향이 없습니다. PowerShell에서 설정한 실행 정책이 적용됩니다.

서명된 스크립트와 서명되지 않은 스크립트 관리

서명된 스크립트는 다음을 포함하는 PowerShell 스크립트입니다:

  • 스크립트 콘텐츠
  • 신뢰할 수 있는 인증 기관(CA) 또는 자체 서명 인증서의 디지털 서명

이를 통해 스크립트가 신뢰할 수 있는 출처에서 제공되었고, 서명된 이후에 수정되지 않았음을 보장합니다. 서명된 스크립트는 실행할 수 있는 스크립트를 제어해야 하는 환경에서 보안을 강화하는 데 도움이 됩니다.

다음 실행 정책은 서명된 스크립트와 관련이 있습니다:

  • AllSigned – 모든 스크립트와 구성 파일이 신뢰할 수 있는 게시자에 의해 서명되어야 합니다.
  • RemoteSigned – 인터넷에서 다운로드한 스크립트는 신뢰할 수 있는 게시자에 의해 서명되어야 합니다. 로컬 스크립트는 서명할 필요가 없습니다.

스크립트 서명

스크립트에 서명하려면 코드 서명 인증서가 필요합니다.

  • 인증 기관(CA)에서 인증서를 받을 수도 있고, New-SelfSignedCertificate cmdlet을 사용해 자체 서명 인증서를 생성할 수도 있습니다.
  • Set-AuthenticodeSignature cmdlet을 사용하여 스크립트에 서명하세요.

다음은 스크립트에 서명하는 방법입니다.

      $cert = Get-Item Cert:\CurrentUser\My\CERT_THUMBPRINT
      
      Set-AuthenticodeSignature -FilePath "C:\Temp\Script.ps1" -Certificate $cert
      

CERT_THUMBPRINT을 인증서의 실제 지문(thumbprint)으로 바꿉니다.

스크립트 서명 상태 보기

스크립트에 서명이 되어 있는지와 서명의 상태를 확인하려면 다음을 사용하세요:

      Get-AuthenticodeSignature -FilePath "C:\Temp\Script.ps1"
      

신뢰할 수 없거나 서명되지 않은 스크립트 관리

정책을 완전히 우회하지 않으면서 스크립트에 대한 권한을 관리하려면 다음을 고려하세요:

  • 스크립트가 ‘인터넷에서 가져옴’으로 표시되어 있으면 차단을 해제하세요.
  • 게시자(퍼블리셔)에서 서명된 스크립트를 처음 실행할 때 게시자 인증서를 승인해야 할 수 있습니다. 인증서 관리 도구를 사용해 해당 인증서를 신뢰할 수 있는 것으로 추가할 수 있습니다.

예시: 스크립트 차단 해제

때때로 스크립트가 인터넷에서 다운로드되었다는 이유로 차단될 수 있습니다. 실행 정책을 우회하지 않고 차단을 해제하려면 Unblock-File cmdlet을 사용하세요.

      Unblock-File -Path "C:\Temp\Script.ps1"
      

스크립트 권한 관리

PowerShell에서 스크립트 권한을 관리한다는 것은 어떤 스크립트를 누가 실행할 수 있는지를 제어하는 것을 의미합니다. 여기에는 실행 정책 구성, 파일 권한 활용, 코드 서명 관행 사용이 포함됩니다.

PowerShell 실행 정책을 사용해 스크립트 실행 제어

실행 정책은 스크립트가 실행될 수 있는 조건을 제한합니다. 정책마다 적용되는 제한 사항이 다릅니다. 예를 들어 Restricted 정책에서는 어떤 스크립트도 실행할 수 없습니다.

스크립트에 코드 서명을 사용하세요

스크립트에 서명하면 엄격한 정책이 적용된 환경에서 신뢰할 수 있는 스크립트만 실행할 수 있습니다.

NTFS 파일 권한을 사용하세요

파일 또는 폴더 권한을 수정하여 스크립트 파일에 대한 액세스를 제한하세요. 다음은 권한을 부여하거나 거부하는 방법입니다.

  1. 스크립트 파일 또는 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 속성을 선택하세요.
  2. 보안(Security) 탭으로 이동한 다음 편집(Edit)을 클릭하세요.
  3. 사용자 또는 그룹을 추가하거나 제거하고 적절한 권한을 할당하세요(예: 읽기, 쓰기, 실행).
  4. 권한이 없는 사용자의 실행 또는 수정을 방지하기 위해 권한을 거부하세요.

그룹 정책을 사용하여 권한 제어

그룹 정책은 여러 시스템에 걸쳐 스크립트 권한과 실행 정책을 강제 적용할 수 있습니다. 그룹 정책을 구성하려면:

  1. Group Policy Management 콘솔(GPMC)을 여세요.
  2. 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > Windows PowerShell로 이동하세요.
  3. “Turn on Script Execution” 정책을 사용하여 원하는 실행 정책을 설정하세요.

인터넷 소스에서 가져온 스크립트를 보호

인터넷에서 다운로드한 스크립트는 안전하지 않음으로 표시됩니다. 실행하기 전에 텍스트 편집기로 스크립트를 열어 안전성을 검토하세요.

실행 정책 설정을 위한 모범 사례

PowerShell 실행 정책을 올바르게 설정하는 것은 보안과 기능의 균형을 맞추는 데 필수적입니다. 보안 관점에서 실행 정책은 강력한 보안 경계가 아니라 실수로 스크립트가 실행되는 것을 방지하기 위한 도구라는 점을 이해해야 합니다. 실행 정책은 액세스 제어, 스크립트 서명, 엔드포인트 보호 같은 다른 보안 조치와 함께 사용해야 합니다. 엔터프라이즈 환경에서는 그룹 정책을 통해 일관된 정책을 적용하고, 위험을 최소화하기 위해 사용자에게 모범 사례를 교육하세요.

보안과 기능의 균형을 이루는 실행 정책을 구성하기 위한 몇 가지 모범 사례는 아래와 같습니다.

가장 제한적인 정책 사용

가능한 경우 Restricted 또는 AllSigned 실행 정책을 적용하여 더 엄격한 제어를 시행해야 합니다. RemoteSigned 는 약간의 유연성이 필요한 환경이면서도 외부 위협으로부터 보호해야 하는 경우에 대한 현실적인 선택입니다.

Bypass를 영구적으로 사용하지 마세요

Bypass 실행 정책은 특정 자동화 또는 문제 해결 시나리오에서만 사용하세요. 작업이 완료되면 더 엄격한 정책으로 되돌리세요.

디지털 서명 사용

신뢰할 수 있는 인증 기관(CA)을 사용해 스크립트에 서명하여 무결성과 진위성을 보장하세요. 또한 스크립트 개발자들이 자신의 스크립트에 서명하도록 권장해야 하며, 특히 AllSigned 정책과 함께 사용할 경우 더욱 그렇습니다.

모니터링 및 로깅 구현

의심스러운 활동을 탐지하고 대응하기 위해 PowerShell 활동에 대한 로깅을 활성화하세요(예: 스크립트 블록 로깅, 모듈 로깅, 전사(transcription)).

다음 cmdlet을 사용하여 모듈 로깅을 활성화하세요:

      Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging" -Name EnableModuleLogging -Value 1
      

로그는 이벤트 뷰어에서 Applications and Services Logs > Microsoft > Windows > PowerShell 아래에서 확인할 수 있습니다.

또한 Microsoft Defender for Endpoint 또는 SIEM 솔루션을 사용해 로그를 모니터링할 수도 있습니다.

운영 환경이 아닌 환경에서 정책 테스트

예기치 않은 상황을 방지하려면 조직 전체에 배포하기 전에 통제된 환경에서 실행 정책을 테스트하세요. 또한 정당한 스크립트와 자동화 워크플로가 중단되지 않도록 보장할 수 있습니다.

조건부 정책 변경 사용

유연성이 필요한 워크플로를 관리하려면 -Scope Process 매개 변수를 사용해 정책을 일시적으로 수정하세요. cmdlet은 다음과 같습니다:

      Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
      

정책 적용 시 환경을 고려하세요

권장 PowerShell 실행 정책은 환경에 따라 달라집니다.

  • 개발 환경 – RemoteSigned를 권장 정책으로 유지하세요. 이는 개발자가 로컬 스크립트를 서명하지 않고도 실행할 수 있도록 유연성을 제공하는 동시에, 인터넷에서 다운로드한 스크립트는 서명되어 신뢰할 수 있도록 보장합니다. 또한 스크립트 실행을 모니터링하기 위해 스크립트 블록 로깅을 활성화해야 합니다.
  • 테스트/스테이징 환경 – RemoteSigned 또는 AllSigned 정책을 사용하세요. RemoteSigned는 기본 무결성 검사로 로컬 및 외부 스크립트가 혼합된 시나리오를 테스트하는 데 유용합니다. 반면 AllSigned는 모든 스크립트에 서명을 요구하여 더 엄격한 통제를 적용합니다.
  • 운영 환경 – AllSigned 또는 Restricted 정책을 사용하세요. AllSigned는 신뢰할 수 있는 발행자에 의해 서명된 스크립트만 실행되도록 보장합니다. 하지만 Restricted는 PowerShell 스크립트에 의존하지 않는 환경에서 가장 안전한 선택지입니다. 또한 시스템 전반에 걸친 일관성을 보장하기 위해 그룹 정책을 통해 정책을 적용해야 합니다.
  • 자동화 환경 – Bypass는 권장 정책입니다(특정 작업에만 해당). 이는 특히 애플리케이션 화이트리스트와 DevOps 파이프라인 같은 다른 메커니즘으로 정책이 관리되는 경우, 자동화 작업이 중단 없이 실행되도록 허용합니다. 또한 적절한 접근 제어와 정기적인 감사를 통해 자동화 환경을 반드시 보호해야 합니다.
  • 고도로 보안이 필요한 환경 – Restricted 정책을 선택하는 것이 좋습니다. 이 정책은 어떤 스크립트도 실행되지 못하게 합니다.

실행 정책(Execution Policy) 오류 문제 해결

다음은 PowerShell 실행 정책과 관련하여 자주 발생하는 오류와 해결 방법입니다.

“이 시스템에서는 스크립트 실행이 비활성화되어 있습니다”

다음과 같은 오류 메시지가 표시될 수 있습니다.

이 시스템에서는 스크립트 실행이 비활성화되어 있으므로 파일 C:\Temp\Script.ps1을 로드할 수 없습니다.

원인: 실행 정책이 Restricted 또는 Undefined로 설정되어 있어 어떤 스크립트도 실행되지 않습니다.

해결 방법: 현재 정책을 확인한 다음 특정 세션에 한해 일시적으로 변경하세요. 또는 현재 사용자나 컴퓨터에 대한 정책을 변경할 수도 있습니다.

현재 세션에 대한 정책을 변경하려면 다음 cmdlet을 사용하세요:

      Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
      

현재 사용자 또는 컴퓨터에 대한 정책을 변경하려면 다음 cmdlet을 사용하세요:

      Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
      

“스크립트가 디지털 서명되지 않았으므로 로드할 수 없습니다”

다음과 같은 오류 메시지가 표시될 수 있습니다:

파일 C:\Temp\Script.ps1을(를) 로드할 수 없습니다. 파일에 디지털 서명이 없습니다.

원인: 실행 정책이 AllSigned 또는 RemoteSigned로 설정되어 있어 스크립트에 서명이 필요합니다.

해결 방법: 로컬 스크립트를 신뢰한다면 AllSigned 대신 RemoteSigned를 사용하세요. 또는 정책을 일시적으로 우회할 수도 있습니다.

“레지스트리 키에 대한 액세스가 거부되었습니다”

다음과 같은 오류 메시지를 받을 수 있습니다:

Set-ExecutionPolicy : 레지스트리 키에 대한 액세스가 거부되었습니다.

원인: LocalMachine 범위에서 실행 정책을 수정할 수 있는 권한이 충분하지 않습니다.

해결 방법: PowerShell을 관리자 권한으로 실행하거나 다음 cmdlet을 사용하여 현재 사용자에 대한 정책을 설정하십시오:

      Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
      

범위 간 실행 정책 충돌

서로 다른 범위(MachinePolicy, UserPolicy, Process, CurrentUser, LocalMachine)에서 충돌하는 정책이 적용되고 있습니다.?

원인: 더 높은 범위에서(예: MachinePolicy) 설정된 더 엄격한 정책이, 더 낮은 범위에서(예: LocalMachine) 설정된 더 허용적인 정책을 재정의합니다.?

해결 방법: 다음 cmdlet을 사용하여 모든 범위의 정책을 확인하세요:

      Get-ExecutionPolicy -List
      

이 정보를 확인한 후에는 적절한 범위에서 정책을 수정하거나, 더 허용적인 정책이 적용된 세션에서 스크립트를 실행할 수 있습니다.

“Group Policy Object (GPO)가 제어하고 있으므로 실행 정책을 변경할 수 없습니다”

이 문제가 발생하는 이유는 실행 정책이 그룹 정책(Group Policy)에 의해 강제 적용되어 로컬 변경이 불가능하기 때문입니다.

해결 방법: 그룹 정책(Group Policy)을 수정하려면 시스템 관리자와 상의하세요. 다만 빠른 해결이 필요하다면 정책을 일시적으로 우회할 수 있습니다.

“정책 범위를 인식할 수 없습니다”

다음과 같은 오류 메시지가 표시될 수 있습니다.

Set-ExecutionPolicy : 지정된 범위를 인식할 수 없습니다.

원인: 범위 이름에 오타가 있습니다.

해결 방법: 범위가 아래 중 하나로 올바르게 지정되었는지 확인하세요.

서로 다른 PowerShell 버전에서 예기치 않은 동작

예를 들어 2.0과 같은 구형 PowerShell 버전은 실행 정책을 다르게 처리하거나 특정 기능이 없을 수 있습니다.

해결 방법: 최신 버전의 PowerShell로 업그레이드하세요.

차단됨으로 표시된 스크립트

다음과 같은 오류 메시지가 표시될 수 있습니다.

파일을 로드할 수 없습니다. 파일이 디지털 서명되어 있지 않거나 인터넷에서 다운로드되어 차단되었습니다.

원인: 스크립트가 인터넷에서 다운로드되었기 때문에 차단됨으로 표시됩니다.

해결 방법: 다음 cmdlet을 사용하여 스크립트의 차단을 해제합니다.

      Unblock-File -Path C:\Temp\Script.ps1
      

결론: 올바른 PowerShell 실행 정책 선택

효과적인 실행 정책을 선택할 때는 이러한 요소들을 반드시 고려해야 합니다.

  • 실행 정책을 선택하기 전에 환경을 파악해야 합니다. 환경마다 필요한 정책이 다르기 때문입니다. 예를 들어 프로덕션 서버에는 스크립트 검증의 어느 정도를 강제하기 위해 AllSigned 또는 RemoteSigned가 가장 적합합니다.
  • 또한 보안 요구 사항을 평가하고 그에 따라 결정해야 합니다. 예를 들어, 강력한 코드 서명 프로세스가 마련되어 있고 스크립트 실행에 대해 엄격한 통제를 적용하려면 AllSigned를 사용하세요. 또는 스크립트를 실행하면 안 되는 시스템에는 Restricted를 사용합니다.
  • 자동화 요구 사항을 고려하세요. 신뢰할 수 있는 프로세스가 스크립트를 자동으로 실행하는 환경에서는 Bypass 정책을 사용하는 것이 더 간단할 수 있습니다.
  • 마지막으로 스크립트의 소스를 평가하세요. 스크립트가 내부에서 제공되고 신뢰할 수 있다면 RemoteSigned는 사용성과 보안의 균형을 제공합니다. 그리고 스크립트가 내부와 외부가 혼합된 경우, 보안을 강화하려면 AllSigned를 고려하세요.

자주 묻는 질문

다음의 $env:psexecutionpolicypreference 변수는 무엇인가요?

$env:PSExecutionPolicyPreference 환경 변수는 PowerShell에서 시스템 전체 또는 사용자별 실행 정책을 변경하지 않고 단일 세션에 대해서만 실행 정책을 일시적으로 재정의하는 데 사용됩니다. 세션을 닫으면 변경 사항은 사라집니다.

다음과 같이 $env:psexecutionpolicypreference 를 사용할 수 있습니다:

  • 다음과 같이 $env:PSExecutionPolicyPreference 값에 할당하면 실행 정책을 일시적으로 변경할 수 있습니다:

$env:PSExecutionPolicyPreference = “Bypass”

이후에는 세션이 지속되는 동안 스크립트가 제한 없이 실행됩니다.

  • 아래와 같이 이 변수의 현재 값을 확인합니다:

$env:PSExecutionPolicyPreference

  • 임시 정책을 제거하고 아래와 같이 기본 동작으로 되돌리세요:

Remove-Item Env:PSExecutionPolicyPreference

공유하기

더 알아보기

저자 소개

Asset Not Found

Jonathan Blackwell

소프트웨어 개발 책임자

2012년부터 엔지니어이자 혁신가인 Jonathan Blackwell은 엔지니어링 리더십을 제공해 Netwrix GroupID를 Active Directory 및 Azure AD 환경에서 그룹 및 사용자 관리 분야의 최전선에 올려놓았습니다. 개발, 마케팅, 영업에서의 그의 경험을 통해 Jonathan은 Identity 시장과 구매자가 생각하는 방식까지 완전히 이해할 수 있습니다.