Exchange Online PowerShell 연결: 단계별 가이드
By Mirko Peters ·
Connect-ExchangeOnline으로 Exchange Online PowerShell에 연결하는 방법을 다룹니다. 요구 사항, 대화형 로그인, MFA, 파트너 및 무인 옵션, 오류 해결 방법을 설명합니다.
Automatically translated with AI from the original post. Read the English original
Exchange Online PowerShell에 연결하려면 ExchangeOnlineManagement 모듈을 로드하고 Connect-ExchangeOnline -UserPrincipalName admin@yourdomain.com을 실행합니다. 로그인 창이 열리면 암호를 입력하고 MFA 요청을 승인하면 셸이 연결됩니다. 이 문서는 정확한 절차, 파트너 및 무인 액세스 옵션, 연결이 실패할 때 참고할 간단한 해결 방법 목록이 필요한 Exchange 및 Microsoft 365 관리자를 위한 것입니다. 최신 Microsoft 문서를 따르므로, 여기 나오는 명령은 최신 인증과 원격 PowerShell 세션이 없는 환경을 전제로 합니다.
핵심 포인트
- Exchange Online PowerShell에 연결하려면 모듈을 로드한 후 UPN 형식의 관리자 계정으로 Connect-ExchangeOnline을 실행합니다.
- 대화형 로그인은 다단계 인증 사용 여부와 관계없이 작동하므로 별도의 MFA 우회 방법이 필요하지 않습니다.
- 기본 인증과 기존 New-PSSession 방식은 더 이상 지원되지 않으므로, 이에 의존하는 스크립트는 다시 작성해야 합니다.
- 연결 후에는 Get-AcceptedDomain으로 간단히 테스트하고, 세션은 항상 Disconnect-ExchangeOnline으로 종료하십시오.
- 무인 스크립트는 저장된 암호 대신 앱 전용 인증 또는 관리 ID를 사용해야 합니다.
연결하기 전에 준비할 사항
연결 명령은 모듈에서 제공되므로 먼저 모듈을 설치해야 합니다. 아직 설치하지 않았다면 Install-Module -Name ExchangeOnlineManagement로 PowerShell Gallery에서 설치하십시오. Microsoft 문서에서는 이 모듈을 V3 모듈이라고 부릅니다. Microsoft는 Windows PowerShell 5.1과 PowerShell 7을 모두 다룹니다. PowerShell 7을 사용하려면 모듈 버전 2.0.4 이상이 필요합니다.
연결이 성공하는지는 다음 네 가지 요소에 따라 결정됩니다.
- 권한. 역할 기반 액세스 제어는 접속한 뒤 실행할 수 있는 cmdlet을 결정합니다. 연결 자체보다 올바른 cmdlet을 실행하는 것이 더 중요합니다. Microsoft는 cmdlet에 필요한 권한을 찾는 방법을 안내하는 페이지를 제공하므로 즐겨찾기에 추가해 두실 만합니다.
- 계정의 PowerShell 액세스. 계정이 Exchange Online PowerShell을 사용할 수 있어야 합니다. 관리자가 사용자에 대해 이 기능을 해제해 두었다면 로그인은 성공하지만 연결은 되지 않습니다.
- 네트워크. 컴퓨터와 Microsoft 365 사이에서 TCP 포트 80이 열려 있어야 합니다.
- 정상적인 프로필 경로. Microsoft에 따르면 사용자 프로필 경로에
$와 같은 특수 PowerShell 문자가 포함되어 있으면 연결 명령이 실패할 수 있습니다. 해당 문자가 포함된 계정이라면 다른 계정을 사용하십시오.
WinRM을 변경할 필요도 없습니다. 현재 연결은 내부적으로 REST를 사용하므로, WinRM에서 기본 인증을 사용하도록 설정하라는 기존 안내는 더 이상 적용되지 않습니다.
Exchange Online PowerShell에 단계별로 연결하는 방법
이것은 표준 대화형 방식입니다. Windows PowerShell 5.1과 PowerShell 7에서 동일하게 작동하며, 다단계 인증 사용 여부와도 무관합니다.
- 새 PowerShell 창을 엽니다. 새 창을 사용하면 세션에서 이전에 로드한 다른 모듈과의 어셈블리 충돌을 피할 수 있습니다.
Import-Module ExchangeOnlineManagement로 모듈을 로드합니다. 모듈이 이미 설치되어 있다면 Microsoft에 따르면 대개 이 단계를 건너뛰고 바로 연결 명령으로 넘어가도 됩니다. PowerShell이 모듈을 자동으로 로드하기 때문입니다.Connect-ExchangeOnline -UserPrincipalName admin@contoso.com을 실행하되, 본인의 계정을 UPN 형식으로 입력합니다. 일부 조직에서는-UserPrincipalName을 생략하면 입력 창이 표시되기도 합니다. 그래도 연결되지 않으면 해당 매개 변수를 추가합니다.- 로그인 창에 암호를 입력하고 로그인을 선택합니다.
- 계정에 MFA가 적용되어 있다면 확인 코드를 입력하고 확인을 선택합니다. 코드는 구성된 방법으로 전송되며, 예를 들어 문자 메시지나 Microsoft Authenticator를 통해 받을 수 있습니다. PowerShell 7에서는 기본적으로 브라우저를 사용해 로그인합니다.
- 배너가 표시될 때까지 기다립니다. 오류가 없다면 연결된 것입니다.
설명은 여기까지입니다. 추가 매개 변수 없이도 같은 cmdlet으로 Microsoft 365 GCC용 PowerShell 세션에 연결할 수 있습니다. 다른 클라우드만 설정이 필요하며, 이는 다음에 이어서 설명합니다.
스크립트 로그에 시작 배너를 남기고 싶지 않다면 -ShowBanner:$false를 추가합니다. Exchange Online cmdlet의 도움말을 Get-Help로 보려면 -LoadCmdletHelp를 추가합니다. 모듈 3.7.0 버전부터는 이 도움말이 기본적으로 로드되지 않습니다. 그래서 모듈을 업데이트한 뒤 Get-Help가 거의 아무것도 반환하지 않아 당황하는 경우가 많습니다.
그 밖의 연결 방법: PowerShell 7, 파트너 및 클라우드
문서에는 여러 가지 변형이 나와 있습니다. 상황에 맞는 방법을 선택하십시오.
브라우저 없이 PowerShell 7 사용. Connect-ExchangeOnline -Device를 실행합니다. 명령은 https://microsoft.com/devicelogin을 열고 코드를 입력하라는 메시지를 출력합니다. 다른 기기에서 해당 작업을 수행하고 로그인한 뒤 확인하면 원래 세션의 연결이 완료됩니다. MFA 사용 여부와 관계없이 동작하며, 데스크톱이 없는 서버나 Linux 머신에서 유용합니다.
PowerShell 7에서 인라인 자격 증명 사용. MFA가 적용되지 않은 계정의 경우 Connect-ExchangeOnline -UserPrincipalName admin@contoso.com -InlineCredential을 사용할 수 있습니다. 대부분의 조직은 관리자에게 MFA를 요구하므로 이 방법은 거의 쓰지 않게 될 것입니다.
자격 증명 개체를 사용한 Windows PowerShell 5.1. MFA가 적용되지 않은 계정의 경우 먼저 $Credential = Get-Credential을 실행한 다음 Connect-ExchangeOnline -Credential $Credential을 실행할 수 있습니다. Microsoft는 이 방법이 실패하면 대신 -UserPrincipalName을 사용해야 한다고 안내합니다.
파트너로서 고객 테넌트 사용. Cloud Solution Provider 파트너와 게스트 관리자는 -DelegatedOrganization을 추가합니다. 예를 들면 Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com -DelegatedOrganization adatum.onmicrosoft.com과 같습니다. 권한 측면은 Microsoft 문서에서 Cloud Solution Provider 프로그램과 GDAP(세분화된 위임 관리자 권한)를 참고하도록 안내합니다.
정부 및 지역 클라우드. -ExchangeEnvironmentName으로 환경을 선택합니다. 기본값은 O365Default이며, Microsoft 365와 GCC를 포함합니다. 문서에 나온 다른 환경의 값은 O365USGovGCCHigh, O365USGovDoD, O365GermanyCloud, O365China입니다.
무인 스크립트. 스크립트에 관리자 암호를 저장하지 마십시오. Microsoft는 더 나은 방법 두 가지를 문서화하고 있습니다. Azure에서 실행되는 스크립트에는 Connect-ExchangeOnline -ManagedIdentity -Organization "contoso.onmicrosoft.com"과 같은 관리 ID가 적합합니다. 그 밖의 모든 경우에는 인증서를 사용한 앱 전용 인증이 적합합니다. 인증서 지문 매개 변수는 Windows에서만 지원됩니다. 설정에는 Microsoft Entra ID의 앱 등록, 관리자 동의가 포함된 Exchange.ManageAsApp 애플리케이션 권한, 인증서, 그리고 앱에 할당할 Exchange 관리자와 같은 지원되는 역할이 필요합니다. Microsoft는 최소 권한 원칙을 권장하므로, 달리 방법이 없지 않다면 앱에 전역 관리자 권한을 부여하지 마십시오. 축약된 내용만 보지 말고 앱 전용 인증에 관한 Microsoft의 별도 문서를 따르십시오.
Windows 서비스에서 실행할 때는 오류를 피하기 위해 -SkipLoadingFormatData를 추가하십시오. Web Account Manager와 관련된 오류가 보인다면, 모듈 버전 3.7.2 이상에는 이를 위한 -DisableWAM 스위치가 있습니다.
스크립트는 간결하게 유지하십시오. 가져올 항목을 제한하십시오
일반적으로 연결하면 사용 가능한 Exchange Online cmdlet이 가져와집니다. 사서함을 잠깐 확인하는 용도라면 괜찮지만, 명령이 세 개뿐인 스크립트에는 모든 명령이 필요하지 않습니다. Microsoft의 모듈 페이지에는 이와 관련된 구체적인 팁이 나와 있습니다. 같은 세션에서 Connect-ExchangeOnline과 Disconnect-ExchangeOnline을 자주 호출하면 메모리 누수가 발생할 수 있습니다. 해결책은 스크립트당 한 번만 연결하고, -CommandName 매개 변수를 사용해 필요한 cmdlet만 가져오는 것입니다.
예를 들어 사서함 통계만 읽는 스크립트에는 해당 명령 하나면 충분합니다. 필요한 명령 몇 개를 지정하고, 시작 부분에서 한 번 연결하고, 작업을 수행한 뒤, 끝 부분에서 한 번 연결을 끊으십시오. 이렇게 작성된 스크립트는 연결 줄만 보아도 어떤 명령을 사용하는지 알 수 있어 검토하기가 더 쉽습니다.
팀 환경에서는 두 가지 습관이 더 도움이 됩니다. 첫째, 연결 줄을 작은 함수처럼 한 곳에 두십시오. 그러면 인증 방식을 바꿀 때 스무 개의 스크립트를 고치는 대신 한 번만 수정하면 됩니다. 둘째, 스크립트를 실행한 계정이나 앱 이름을 기록하되, 비밀 값은 절대 기록하지 마십시오. 사서함에서 예상치 못한 변경이 발생했을 때 이 로그 한 줄이 몇 시간의 조사 시간을 줄여 줍니다.
연결과 연결 해제를 깔끔하게 확인하십시오
오류 없이 연결되었다면 좋은 신호이지만, 무해한 읽기 명령으로 한 번 더 확인하십시오. Get-AcceptedDomain은 조직의 도메인 목록을 보여주며 실행하는 데 1초 정도 걸립니다. 도메인이 표시되면 세션이 정상이며 계정에 최소한 읽기 권한이 있다는 뜻입니다.
연결에 대한 세부 정보를 보려면 Get-ConnectionInformation을 사용하십시오. Microsoft의 모듈 페이지에서는 Get-PSSession이 이러한 REST 기반 연결에 대해 유용한 값을 반환하지 않는다고 설명합니다. 따라서 Get-PSSession으로 상태를 확인하는 기존 스크립트는 수정해야 합니다.
작업이 끝나면 Disconnect-ExchangeOnline을 실행하십시오. 스크립트에서는 -Confirm:$false를 추가하면 확인 메시지를 건너뛸 수 있습니다. Microsoft의 연결 관련 문서에서는 연결을 끊지 않고 창만 닫으면 사용 가능한 세션을 모두 소진할 수 있으며, 그러면 세션이 만료될 때까지 기다려야 한다고 경고합니다.
가장 흔한 연결 오류를 해결하십시오
대부분의 실패는 몇 가지 흔한 원인에서 비롯됩니다. 위에서부터 아래로 차례대로 확인하십시오.
- 사용자 이름 또는 암호가 잘못되었습니다. 단계를 다시 수행하고 둘 다 확인하십시오. 사소해 보이지만 먼저 UPN 형식을 확인하십시오.
- 계정에 PowerShell 액세스가 꺼져 있습니다. 관리자가 이를 사용하도록 설정할 수 있습니다. Exchange Online PowerShell 액세스를 사용하도록 설정하거나 사용하지 않도록 설정하는 방법은 Microsoft의 별도 문서를 참조하십시오.
- 포트 80이 차단되어 있습니다. 네트워크 팀에 Microsoft 365로의 TCP 포트 80 통신을 허용해 달라고 요청하십시오.
- 연합 계정이며 ID 공급자에 연결할 수 없습니다. IDP 또는 STS가 공개적으로 접근 가능하지 않다면, Microsoft는 연결에 Microsoft 365의 비연합 계정을 사용할 것을 권장합니다.
- "'Update-ModuleManifest' 용어가 인식되지 않습니다". 연결에는 PowerShellGet과 그 종속 항목인 PackageManagement가 필요합니다. 두 모듈을 모두 업데이트한 다음 PowerShell을 다시 시작하십시오.
- "Could not load file or assembly 'System.IdentityModel.Tokens.Jwt'". 같은 세션에서 다른 모듈과 충돌하는 경우입니다. 다른 항목을 가져오기 전에 새 Windows PowerShell 창에서 연결하십시오.
- 서비스나 예약된 작업으로 열린 창에서 발생하는 오류.
-SkipLoadingFormatData를 사용해 보십시오.
위 경우에 해당하지 않는다면 다음으로 의심할 부분은 모듈 버전입니다. 설치할 때 사용한 것과 같은 범위에서 Update-Module -Name ExchangeOnlineManagement를 실행한 뒤 새 창에서 다시 시도하십시오.
흔한 실수
- 기본 인증(Basic authentication)이나
New-PSSession사용. Microsoft는 이들을 참고용 기록으로만 제시하며 더 이상 지원되지 않는다고 밝히고 있습니다. 여전히 이 방식으로 세션을 만드는 스크립트는Connect-ExchangeOnline으로 옮겨야 합니다. - 연결 해제 대신 창 닫기. 세션이 소진될 수 있습니다. 모든 스크립트의 마지막 줄에는
Disconnect-ExchangeOnline을 두십시오. - 스크립트에 일반 텍스트로 비밀번호 넣기. 대신 관리 ID(managed identity)나 인증서를 사용하십시오.
- 다른 모듈을 먼저 가져오기. 다른 모듈과 충돌하면 로그인이 실패할 수 있습니다. Exchange Online에 먼저 연결하거나 새 창을 사용하십시오.
- 연결되었으니 권한도 있다고 가정하기. 연결한 후 cmdlet이 "인식되지 않음"으로 표시된다면 역할에 해당 cmdlet이 포함되어 있지 않은 것입니다. 이는 연결 문제가 아니라 RBAC 문제입니다.
함께 살펴볼 관련 주제
- 모듈 설치 및 업데이트: 연결은 올바른 모듈과 PowerShell 버전에 따라 달라지므로, 팀에 배포하기 전에 Exchange Online PowerShell 모듈의 요구 사항을 확인하십시오.
- cmdlet에 필요한 권한 찾기: Microsoft는 특정 Exchange cmdlet에 필요한 역할을 조회하는 방법을 설명합니다.
- Security & Compliance PowerShell 연결: 같은 모듈에서
Connect-IPPSSession을 제공하지만, 이 cmdlet은 Linux나 macOS의 PowerShell 7에서는 사용할 수 없습니다. - 무인 자동화: 예약된 Exchange 스크립트를 안전하게 실행하려면 앱 전용 인증과 관리 ID를 사용하십시오.
- 대량 일괄 작업: REST 기반 cmdlet은 15분의 제한 시간이 있으므로, 대규모 구성원 업데이트는 일괄 처리로 나누십시오.
다음 단계
Exchange Online PowerShell에 안정적으로 연결하려면 새 창에서 시작하고, 관리자 계정으로 Connect-ExchangeOnline -UserPrincipalName을 실행하며, Get-AcceptedDomain으로 테스트한 뒤 작업이 끝나면 연결을 해제하십시오. 그다음 무인 스크립트는 관리 ID나 인증서를 기준으로 계획하여, 누구도 비밀번호를 입력하거나 저장할 필요가 없도록 하십시오.