Azure 가상 머신에 대한 JIT(Just-in-Time) 액세스 관리
2024년 1월 10일
이 기술 및 교육 문서는 보안 분석가, IT 관리자 및 시스템 엔지니어가 Azure VM(Virtual Machines)에 대한 JIT(Just-in-Time) 액세스를 구현하고 관리하도록 안내하는 것을 목표로 합니다. JIT는 무단 액세스 공격으로부터 VM을 보호하는 데 도움이 되는 Microsoft Defender for Cloud에서 제공하는 기본 보안 기능으로, 엄격히 필요한 경우에만 관리 포트에 대한 액세스를 제한하여 네트워크 공격 표면을 크게 줄입니다[1].
소개
클라우드 환경에서 가상 머신은 특히 인터넷에 노출된 관리 포트(예: RDP 3389 및 SSH 22)가 있는 무차별 대입 공격 및 포트 검색의 대상이 되는 경우가 많습니다. 이러한 포트를 계속 열어두면 공격 표면이 불필요하게 커져 손상 위험이 높아집니다. JIT Access는 보안 팀이 기본적으로 VM에 대한 인바운드 트래픽을 차단하고 제한된 기간 동안 특정 IP 주소에서 요청 시에만 관리 포트를 열 수 있도록 하여 이 문제를 해결합니다. 이 접근 방식은 최소 권한 및 제로 트러스트 원칙을 따르며, 정당한 경우에만 가능한 한 가장 짧은 시간 동안 액세스가 허용되도록 보장합니다[2].
이 실무 가이드에서는 JIT 활성화를 위한 전제 조건, Microsoft 보안 센터를 통한 구성 프로세스, JIT 액세스 요청 및 승인 방법, 보안 경고와의 통합, 효과적인 관리를 위한 모범 사례를 다룹니다. 독자가 JIT를 구현 및 검증하여 Azure VM의 보안을 강화하고 무단 액세스 위협으로부터 보호할 수 있도록 단계별 지침, 예제 Azure CLI 명령 및 지침이 제공됩니다.
Azure VM에 JIT(Just-in-Time) 액세스가 중요한 이유는 무엇입니까?
- 공격 표면 감소: 기본적으로 VM 관리 포트를 닫고 필요한 경우에만 노출하여 공격자의 기회를 최소화합니다.
- 세분화된 액세스 제어: 액세스를 요청할 수 있는 사용자, 열 수 있는 포트, 기간, 소스 IP 주소를 지정할 수 있습니다.
- 규정 준수: 중요한 리소스에 대한 액세스를 엄격하게 제어해야 하는 규정 준수 요구 사항을 충족하는 데 도움이 됩니다.
- 가시성 및 감사: 모든 JIT 액세스 요청, 승인, 포트 열기/닫기에 대한 자세한 로그를 제공하여 보안 감사 및 조사를 용이하게 합니다.
- Defender for Cloud와의 통합: Microsoft Defender for Cloud와 완전히 통합되어 보안 상태 관리 및 위협 방지 기능을 활용합니다.
- 자동화: 사고 대응이나 예정된 유지 관리 작업과 같은 특정 시나리오에서 액세스를 승인하도록 자동화할 수 있습니다.
전제조건
Azure Virtual Machines에 대한 JIT 액세스를 구현하려면 다음 항목이 필요합니다.
- 활성 Azure 구독: 리소스를 생성하고 관리하기 위한 Azure 구독입니다.
- 관리 액세스: Azure 구독 또는 VM이 있는 리소스 그룹에서 '소유자', '기여자' 또는 '보안 관리자' 역할을 가진 계정입니다.
- 클라우드용 Microsoft Defender Standard(또는 Defender for Servers): JIT는 Microsoft Defender for Cloud의 프리미엄 기능이며 VM이 포함된 구독에서 Defender for Servers 계획을 활성화해야 합니다[3].
- 기존 Azure 가상 머신: JIT로 보호하려는 Azure VM입니다. 이 자습서에서는 VM이 이미 배포되어 있다고 가정합니다.
- Azure CLI 또는 Azure PowerShell: Azure와 상호 작용하기 위한 명령줄 도구를 설치하고 구성했습니다.
단계별: JIT 액세스 활성화 및 관리
Azure VM에 대한 JIT를 구성해 보겠습니다.
1. Defender for Servers 계획 활성화
필수 구성 요소에서 설명한 대로 JIT를 사용하려면 Defender for Servers 계획이 활성화되어야 합니다.
- 브라우저를 열고 Azure Portal
https://portal.azure.com으로 이동합니다. - 필요한 권한이 있는 계정으로 로그인하세요.
- 상단 검색 필드에 'Defender for Cloud'를 입력하고 결과에서 선택하세요.
- Defender for Cloud 대시보드에서 환경 설정을 선택합니다.및 왼쪽 탐색 창에 있습니다.
- VM이 포함된 Azure 구독을 선택합니다.
- Defender 계획 페이지에서 Defender for Servers 계획이 '활성화됨'인지 확인합니다. 그렇지 않은 경우 '활성화'를 클릭하고 지침에 따라 활성화하세요.
2. VM에 대한 JIT 액세스 활성화
개별 VM 또는 여러 VM에 대해 동시에 JIT를 활성화할 수 있습니다.
- Defender for Cloud 대시보드의 왼쪽 탐색 창에서 Workload Protection을 선택합니다.
- '고급 보호' 섹션까지 아래로 스크롤하고 Just-in-Time VM 액세스를 클릭합니다.
-
'가상 머신' 탭 아래에는 '구성됨', '권장', '구성되지 않음'이라는 세 가지 하위 탭이 표시됩니다.
- '권장': Security Center에서 JIT로 보호하도록 권장하는 VM을 나열합니다.
구성되지 않음: JIT로 보호되지 않지만 적격한 VM을 나열합니다.
-
'권장' 또는 '구성되지 않음' 탭에서 JIT를 활성화하려는 VM을 선택합니다.
-
VM에서 JIT 활성화를 클릭합니다.
-
JIT 정책 구성: 선택한 각 VM에 대해 다음 옵션을 구성할 수 있습니다.
- 포트: 보호할 관리 포트입니다(예: 22, 3389, 5985, 5986). 사용자 정의 포트를 추가할 수 있습니다.
- 프로토콜: 각 포트의 프로토콜(예: TCP, UDP)입니다.
- 최대 요청 시간: 승인된 요청 후 문이 열릴 수 있는 최대 시간(시간)입니다. 기본값은 3시간입니다.
- 승인된 소스 IP 주소: 선택 사항이지만 적극 권장됩니다. 특정 IP 또는 IP 블록에 대한 액세스를 제한합니다. 기본적으로 'Any'('*')입니다. 이는 모든 IP가 액세스를 요청할 수 있음을 의미합니다.
-
저장을 클릭하여 선택한 VM에 JIT 정책을 적용합니다.
3. VM에 대한 JIT(Just-In-Time) 액세스 요청
사용자 또는 관리자가 JIT로 보호되는 VM에 액세스해야 하는 경우 액세스를 요청해야 합니다.
- 보안 센터 대시보드에서 워크로드 보호 > Just-in-Time VM 액세스를 선택합니다.
- 'Virtual Machines' 탭에서 액세스하려는 VM을 선택합니다('Configured' 탭에 있어야 함).
-
액세스 요청을 클릭합니다.
-
'액세스 요청' 창에서 다음을 지정합니다.
- 문: 열어야 하는 문입니다.
- 소스 IP 주소: 연결할 공용 IP 주소입니다. '내 IP 주소'(기기의 현재 공용 IP) 또는 '사용자 지정'을 선택하여 IP 또는 CIDR을 지정할 수 있습니다.
- 기간: 액세스 기간(JIT 정책에 구성된 '최대 요청 시간'으로 제한됨).
- 정당성: 액세스 요청 이유에 대한 간략한 설명입니다.
-
포트 열기를 클릭합니다.
- 참고: JIT 정책에 승인이 필요한 경우 포트가 열리기 전에 구성된 승인자에게 요청이 전송됩니다.
4. JIT 액세스 요청 승인(구성된 경우)
Azure Logic Apps 또는 Azure Functions를 통해 승인이 필요한 시나리오의 경우 프로세스가 다를 수 있습니다. 기본적으로 JIT는 워크플로 자동화가 구성되지 않은 한 요청 시 즉시 포트를 엽니다.
- 팁: 승인 워크플로의 경우 Azure Logic Apps를 사용하여 Azure 감사 로그 또는 Azure Security Center 이벤트를 모니터링하고 승인 프로세스를 트리거할 수 있습니다(예: 수동 승인을 위해 보안 그룹에 이메일 보내기).
5. JIT 접속 상태 확인
접근권한 요청 후 포털에서 상태를 확인하실 수 있습니다.
- 보안 센터 대시보드에서 워크로드 보호 > Just-in-Time VM 액세스를 선택합니다.
- '가상 머신' 탭에서 액세스를 요청한 VM은 액세스가 '활성' 또는 '보류 중'(승인된 경우)임을 나타내는 상태를 표시해야 합니다.
- '남은 시간' 열에는 남은 액세스 시간이 표시됩니다.
6. JIT 액세스 비활성화(선택 사항)
VM에 대해 JIT를 비활성화해야 하는 경우 다음 단계를 따르세요.
- 보안 센터 대시보드에서 워크로드 보호 > Just-in-Time VM 액세스를 선택합니다.
- 'Virtual Machines' 탭에서 구성된 VM을 선택합니다.
- VM에서 JIT 비활성화를 클릭합니다.
검증 및 테스트
JIT 액세스의 효율성을 검증하는 것은 VM이 보호되고 필요할 때 액세스가 부여될 수 있는지 확인하는 데 중요합니다.
1. D-블록 테스트및 일반 액세스
- JIT 액세스를 요청하지 않고 JIT 보호 VM에서 관리 포트(예: RDP 3389 또는 SSH 22)에 액세스해 봅니다.
- 예상 결과: 기본적으로 포트가 닫혀 있으므로 연결이 거부되거나 시간 초과되어야 합니다.
2. 승인된 JIT 액세스 테스트
- 공용 IP 주소를 사용하여 원하는 VM 및 포트에 대한 JIT 액세스를 요청합니다.
-
승인 후(또는 승인이 구성되지 않은 경우 즉시 열기) 동일한 공용 IP 주소에서 RDP 또는 SSH를 통해 VM에 액세스해 봅니다.
- 예상 결과: 연결이 성공해야 합니다.
-
JIT 액세스 시간이 만료될 때까지 기다리거나 수동으로 액세스를 취소합니다.
- VM에 다시 액세스해 보세요.
- 예상 결과: 연결이 다시 거부되어야 합니다.
3. 감사 로그 확인
모든 JIT 작업은 Azure 감사 로그에 기록되어 누가 무엇을, 언제, 어디서 요청했는지에 대한 전체 추적을 제공합니다.
- Azure Portal에서 리소스 그룹 또는 특정 VM으로 이동합니다.
- 왼쪽 탐색 창에서 활동 로그를 선택합니다.
- 'Just-in-Time VM Access' 또는 'Microsoft.Security/locations/jitNetworkAccessPolicies'와 관련된 이벤트를 필터링합니다.
- 'JIT 네트워크 액세스 정책 생성됨', 'JIT 네트워크 액세스 정책 요청됨', 'JIT 네트워크 액세스 정책 승인됨'(해당되는 경우), 'JIT 네트워크 액세스 정책 종료됨'과 같은 이벤트가 표시됩니다.
보안 팁 및 모범 사례
- 최소 권한의 원칙: 가능한 최소 권한(가능한 한 가장 짧은 시간 동안 가장 제한된 소스 IP에서 필요한 정확한 포트)을 부여하도록 JIT 정책을 구성합니다.
- 소스 IP 주소 제한: 가능하면 JIT 정책 및 액세스 요청에 소스 IP 주소를 지정하세요. 소스 IP에
Any(*)를 사용하지 마세요. - 짧은 기간: 최대 요청 시간을 합리적인 가장 짧은 기간(예: 1~2시간)으로 설정하여 사용자가 액세스 필요성을 재평가하도록 합니다.
- 모니터링 및 경고: Azure Monitor에서 JIT 액세스 요청, 특히 중요한 포트 또는 예상치 못한 IP에 대한 경고를 구성합니다. 이러한 경고를 SIEM(예: Microsoft Sentinel)과 통합하세요.
- 워크플로 자동화: 승인 요구 사항이 엄격한 환경의 경우 Azure Logic Apps 또는 Azure Functions를 사용하여 JIT 요청에 대한 사용자 지정 승인 워크플로를 만듭니다.
- 문서화 및 교육: JIT 액세스 정책을 명확하게 문서화하고 사용자에게 액세스 요청 방법과 보안 모범 사례 준수의 중요성을 교육합니다.
- 정기 검토: JIT 정책 및 액세스 로그를 정기적으로 검토하여 관련성과 효율성이 유지되는지 확인합니다.
- NSG 및 Azure Firewall과 결합: JIT는 NSG(네트워크 보안 그룹) 및 Azure Firewall과 같은 다른 네트워크 보안 계층을 보완합니다. 심층적인 방어를 위해 함께 사용하세요.
일반적인 문제 해결
- VM에 대해 JIT를 활성화할 수 없습니다: VM 구독에 대해 Defender for Servers 계획이 활성화되어 있는지 확인하세요. VM이 잘못된 상태가 아닌지 또는 충돌하는 설정이 없는지 확인하십시오.
- JIT 액세스를 요청할 수 없습니다: 액세스를 요청하는 데 필요한 권한(예: '협력자' 또는 '가상 머신 JIT 액세스 운영자')이 있는지 확인하세요. VM이 JIT용으로 구성되어 있고 포트가 정책에 정의되어 있는지 확인하세요.
- JIT 요청 후 연결이 거부되었습니다: JIT 요청에 지정한 원본 IP 주소가 장치의 공용 IP와 일치하는지 확인하세요. 기간이 만료되지 않았는지 확인하세요. JIT 포트를 연 후 트래픽을 차단하는 추가 NSG 또는 방화벽 규칙이 없는지 확인합니다.
- 잘못된 포트가 열려 있음: VM에 구성된 JIT 정책을 확인하여 올바른 포트가 나열되었는지 확인하세요. Azure CLI를 사용하는 경우 포트 매개변수를 확인하세요.
- JIT 액세스 보안 경고: JIT 관련 보안 경고를 조사합니다. 이는 무단 액세스 시도 또는 잘못된 구성을 나타낼 수 있습니다.
- VM 성능에 영향을 받음: JIT 자체는 VM 성능에 영향을 주어서는 안 됩니다. 문제가 있는 경우 VM 또는 네트워크의 다른 구성 요소를 조사합니다.
결론
오Azure Virtual Machines에 대한 JIT(Just-in-Time) 액세스 관리는 무단 액세스 위협으로부터 클라우드 리소스를 보호하기 위한 필수 보안 전략입니다. 기본적으로 관리 포트를 닫고 필요할 때만 열면 JIT는 공격 표면을 크게 줄이고 보안 상태를 강화하며 규정 준수 요구 사항을 충족하는 데 도움이 됩니다. 보안 모범 사례 및 지속적인 모니터링과 결합된 JIT의 효과적인 구현을 통해 VM의 보안을 유지하고 합법적인 사용자 및 목적만 액세스할 수 있도록 보장합니다. 이 실용적인 가이드를 통해 보안 전문가는 JIT 액세스를 구성, 검증 및 관리하여 Azure 가상 머신을 더욱 탄력적이고 보호할 수 있게 됩니다.
참고자료:
[1] 마이크로소프트 런. VM에 대한 JIT(Just-In-Time) 액세스란 무엇입니까?. 사용 가능: https://learn.microsoft.com/pt-br/azure/defender-for-cloud/just-in-time-access-overview [2] 마이크로소프트 런. VM에서 Just-In-Time 액세스를 활성화합니다. 사용 가능: https://learn.microsoft.com/pt-br/azure/defender-for-cloud/just-in-time-access-usage [3] 마이크로소프트 런. 클라우드용 Microsoft Defender로 서버 보안을 관리하세요. 사용 가능: https://learn.microsoft.com/pt-br/azure/defender-for-cloud/tutorial-enable-servers-plan [4] 마이크로소프트 런. PowerShell을 사용하여 VM에 대한 JIT(Just-In-Time) 액세스를 관리합니다. 사용 가능: https://learn.microsoft.com/pt-br/azure/defender-for-cloud/just-in-time-access-powershell