가상 머신에 대한 보안 액세스를 위해 Azure Bastion 사용

가상 머신에 대한 보안 액세스를 위해 Azure Bastion 사용

2025년 4월 1일

이 기술 및 교육 문서는 보안 분석가, IT 관리자 및 시스템 엔지니어가 Azure에서 VM(가상 머신)에 안전하게 액세스할 수 있도록 Azure Bastion을 구현하고 구성하는 방법을 안내하는 것을 목표로 합니다. 클라우드 환경에서는 리소스와 데이터를 보호하기 위해 VM에 대한 접근 보안이 필수적입니다. 전통적으로 RDP(원격 데스크톱 프로토콜) 또는 SSH(보안 셸)를 통해 VM에 액세스하려면 공용 포트를 인터넷에 노출해야 했으며 이로 인해 공격 표면이 크게 늘어났습니다. Azure Bastion은 VPN이나 ​​공용 IP 없이 보안 액세스를 제공하여 이러한 노출을 제거하는 강력하고 안전한 솔루션을 제공합니다[1].

소개

인프라를 클라우드로 마이그레이션하면 확장성과 유연성 측면에서 많은 이점을 얻을 수 있습니다. 그러나 보안은 여전히 ​​​​가장 큰 관심사입니다. 가상 머신에 대한 액세스는 많은 애플리케이션과 서비스의 핵심인 경우가 많기 때문에 매우 중요합니다. RDP(3389) 또는 SSH(22) 포트를 인터넷에 직접 노출하는 것은 무차별 대입 공격 및 기타 공격의 대상이 되기 쉽기 때문에 무분별한 보안 관행입니다[2].

Azure Bastion은 가상 네트워크에서 프로비전하는 완전 관리형 PaaS(Platform as a Service) 서비스입니다. 이를 통해 VM의 공용 IP, VM에 설치된 에이전트 또는 로컬 머신의 특수 클라이언트/구성 없이 RDP 및 SSH를 사용하여 Azure Portal에서 직접 가상 네트워크의 가상 머신에 연결할 수 있습니다. Bastion은 보안 TLS(전송 계층 보안) 연결을 통해 RDP/SSH 트래픽을 사용자 브라우저로 라우팅하는 보안 프록시 역할을 하여 VM이 인터넷에 직접 노출되지 않도록 보호합니다[3].

이 방법 가이드에서는 전제 조건, Azure Bastion을 프로비저닝 및 구성하는 방법, RDP 및 SSH를 사용하여 Windows 및 Linux VM에 연결하는 방법, 세션을 관리하는 방법, 보안 액세스를 테스트하고 유효성을 검사하는 방법을 다룹니다. 독자가 이러한 기능을 구현, 테스트 및 검증할 수 있도록 단계별 지침, 실제 예제 및 간결한 설명이 제공됩니다. 또한 자율적이고 전문적이며 안정적인 방식으로 가상 머신에 대한 안전하고 효율적인 원격 액세스를 보장하기 위한 보안 팁, 규정 준수 검사 및 모범 사례에 대해 논의합니다.

VM 액세스에 Azure Bastion이 중요한 이유는 무엇인가요?

  • 향상된 보안: VM에서 공용 IP가 필요하지 않으므로 인터넷의 직접적인 공격으로부터 VM을 보호합니다. 액세스는 브라우저를 통한 TLS를 통해 이루어집니다.
  • 간소화된 액세스: 기본 RDP/SSH 클라이언트 또는 VPN이 필요 없이 Azure Portal에서 직접 VM에 연결합니다.
  • 제로 트러스트: 제로 트러스트 원칙에 부합하여 사용자의 위치에 관계없이 액세스가 항상 확인되고 승인되도록 보장합니다.
  • 감사 및 모니터링: 감사 및 규정 준수 목적으로 세션 기록 옵션(프리미엄 SKU에서 사용 가능)을 사용하여 세션을 모니터링하고 관리할 수 있습니다.
  • 비용 및 복잡성 감소: 완전 관리형 PaaS 서비스이므로 자체 점프 박스나 복잡한 VPN을 관리할 필요가 없습니다.
  • 포트 스캐닝 보호: VM에는 공용 IP가 없으므로 인터넷의 포트 스캐너와 악성 봇에게 보이지 않습니다.

전제조건

Azure Bastion을 구현하려면 다음 항목이 필요합니다.

  1. 활성 Azure 구독: 리소스를 생성하고 관리하기 위한 Azure 구독입니다.
  2. 관리 액세스: VM이 있는 구독 또는 리소스 그룹에 대해 '소유자' 또는 '기여자' 역할을 가진 계정입니다.
  3. Azure Virtual Network(VNet): 연결하려는 VM이 ​​포함된 기존 가상 네트워크입니다.
  4. Azure Bastion용 전용 서브넷: 이름이 AzureBastionSubnet이고 접두사가 /27 이상인 VNet 내의 서브넷입니다(예: 10.0.2.0/27). 이 서브넷은 Bastion 전용이며 다른 리소스에 사용할 수 없습니다[4].
  5. 가상 머신(VM): 연결하려는 동일한 VNet(또는 피어링된 VNet)에 있는 기존 Windows 또는 Linux VM입니다.

단계별: Azure Bastion 구성

Azure Bastion을 프로비저닝하고 이를 사용하여 VM에 연결해 보겠습니다.

1. 'AzureBastionSubnet' 서브넷 생성

이전Bastion을 배포하려면 전용 서브넷을 생성해야 합니다.

  1. 브라우저를 열고 Azure Portal https://portal.azure.com으로 이동합니다.
  2. 필요한 권한이 있는 계정으로 로그인하세요.
  3. 상단 검색 필드에 '가상 네트워크'를 입력하고 결과에서 선택하세요.
  4. VM이 있는 가상 네트워크를 선택합니다.
  5. 왼쪽 탐색 창의 '설정'에서 서브넷을 선택합니다.
  6. +서브넷을 클릭합니다.

  7. 서브넷 추가:

    • 이름: AzureBastionSubnet을 입력합니다(이 이름은 필수).
    • 서브넷 주소 범위: '/27' 이상의 접두사가 포함된 주소 범위를 제공하세요(예: '10.0.2.0/27').
    • 기타 설정은 기본값으로 둡니다.
  8. 저장을 클릭합니다.

    • 설명: 'AzureBastionSubnet'은 Azure Bastion 서비스가 배포되는 위치입니다. 서비스를 올바르게 프로비전하려면 이름이 정확히 'AzureBastionSubnet'이어야 합니다.

2. Azure Bastion 프로비저닝

이제 서브넷이 준비되었으므로 Bastion 서비스를 배포할 수 있습니다.

  1. Azure Portal의 상단 검색 필드에 Bastion을 입력하고 결과에서 선택합니다.
  2. '+ 생성'을 클릭하세요.

  3. 기본사항:

    • 구독: 구독을 선택합니다.
    • 리소스 그룹: VNet과 동일한 리소스 그룹을 선택합니다.
    • 이름: Bastion 인스턴스에 이름을 지정합니다(예: myBastionHost).
    • 지역: VNet과 동일한 지역을 선택합니다.
    • 계층: '기본'(기본 RDP/SSH의 경우) 또는 '표준'(세션 기록, 링크 공유 등과 같은 추가 기능의 경우)을 선택합니다. 이 가이드에서는 'Basic'을 사용하겠습니다.
  4. 가상 네트워크:

    • 가상 네트워크: 'AzureBastionSubnet'을 만든 VNet을 선택합니다.
    • 서브넷: 'AzureBastionSubnet'이 자동으로 선택됩니다.
    • 공용 IP 주소: '새로 만들기'를 클릭하세요. 공용 IP에 이름을 지정합니다(예: myBastionPublicIP). 이 공용 IP는 Bastion 서비스용이며 VM에 노출되지 않습니다.
  5. '검토 + 생성'을 클릭한 다음 만들기를 클릭하세요.

    • 설명: Azure Bastion 프로비저닝에는 5~10분 정도 걸릴 수 있습니다. 배포되면 VM에 액세스하는 데 사용할 수 있습니다.

3. RDP를 통해 Windows VM에 연결

RDP 포트를 노출하지 않고 Windows VM에 연결해 보겠습니다.

  1. Azure Portal에서 Windows VM으로 이동합니다.
  2. 왼쪽 탐색 창에서 연결을 선택합니다.
  3. 요새를 선택합니다.
  4. Windows VM 사용자 자격 증명과 비밀번호를 입력합니다.
  5. 연결을 클릭합니다.

    • 예상 작업: 새 브라우저 탭이 열리고 Windows VM 바탕 화면이 표시됩니다. 연결은 브라우저의 HTML5를 완전히 기반으로 합니다.

4. SSH를 통해 Linux VM에 연결

SSH 포트를 노출하지 않고 Linux VM에 연결해 보겠습니다.

  1. Azure Portal에서 Linux VM으로 이동합니다.
  2. 왼쪽 탐색 창에서 연결을 선택합니다.
  3. 요새를 선택합니다.
  4. '인증 유형': '사용자 이름 및 비밀번호' 또는 'SSH 개인 키'를 선택합니다.
    • 사용자 이름 및 비밀번호인 경우 Linux VM 자격 증명을 입력하세요.
    • SSH 개인 키인 경우 개인 키 파일(.pem 또는 .ppk)을 업로드하세요.
  5. 연결을 클릭합니다.

    • 예상 작업: 새 브라우저 탭이 열리고 SSH 명령을 실행할 수 있는 Linux VM의 터미널이 표시됩니다.

검증 및 테스트

Azure Bastion을 통한 액세스가 예상대로 작동하고 VM에 다른 방식으로 액세스할 수 없는지 확인하는 것이 중요합니다.

1. Bastion 연결 확인

  1. 시나리오: 위의 3단계와 4단계에 따라 Azure Bastion을 사용하여 Windows 및 Linux VM에 액세스해 보세요.
  2. 예상 조치: 브라우저를 통해 RDP 및 SSH 연결이 성공적으로 설정되어야 합니다.
  3. 확인:
    • Windows VM 데스크톱과 상호 작용하고 Linux VM 터미널에서 명령을 실행할 수 있는지 확인하세요.

2. VM의 직접 접근 불가 여부 확인

  1. 시나리오: VM의 공용 IP(있는 경우) 또는 개인 IP(VNet 외부에 있는 경우)를 가리키는 RDP 또는 SSH 클라이언트를 사용하여 인터넷에서 직접 VM에 액세스해 보십시오.
  2. 예상 조치: RDP/SSH 포트가 공개적으로 노출되어서는 안 되므로 직접 연결 시도가 실패해야 합니다.
  3. 확인: *VM에 공용 IP가 있는 경우 VM의 네트워크 인터페이스 또는 VM의 서브넷과 연결된 NSG(네트워크 보안 그룹) 규칙을 확인하세요. 포트 3389(RDP) 및 22(SSH)가 'Any' 또는 'Internet'에 열려 있지 않은지 확인하세요.
    • 이상적으로는 Bastion을 통해 액세스하는 VM에는 연결된 공용 IP가 없어야 합니다.

3. Bastion 세션 모니터링(표준 SKU)

표준 SKU로 Bastion을 프로비저닝한 경우 활성 세션을 모니터링할 수 있습니다.

  1. Azure Portal에서 Azure Bastion 리소스(myBastionHost)로 이동합니다.
  2. 왼쪽 탐색 창의 '모니터링'에서 세션을 선택합니다.
  3. 사용자, 소스 IP 및 대상 VM을 포함하여 활성 RDP 및 SSH 세션 목록이 표시됩니다.

보안 팁 및 모범 사례

  • VM에서 공용 IP 제거: Azure Bastion을 구성한 후 VM에서 모든 공용 IP를 제거합니다. 이것이 Bastion의 주요 보안 이점입니다.
  • NSG를 적절하게 구성: VM 서브넷의 NSG(네트워크 보안 그룹)와 'AzureBastionSubnet'이 필요한 트래픽만 허용하도록 올바르게 구성되었는지 확인하세요. Bastion은 VM의 비공개 RDP/SSH 포트에 액세스해야 하지만 VM에는 공개 인바운드 액세스가 필요하지 않습니다.
  • 최소 권한의 원칙: 사용자가 Bastion을 통해 VM에 연결할 수 있도록 필요한 권한만 할당합니다. Azure RBAC를 사용하면 Bastion을 사용할 수 있는 사람을 제어할 수 있습니다.
  • 강력한 인증: VM 자격 증명에 항상 강력한 인증을 사용합니다. 인증을 위해 Azure AD와 결합하고, 가능한 경우 조건부 액세스를 결합하여 Azure Portal에 액세스하기 위해 MFA를 요구합니다. 그러면 Bastion에 대한 액세스가 제어됩니다.
  • 세션 기록(프리미엄 SKU): 엄격한 규정 준수 및 감사가 필요한 환경의 경우 Azure Bastion Premium SKU를 사용하여 RDP 및 SSH 세션을 기록하는 것이 좋습니다. 이는 VM에서 수행된 작업에 대한 시각적 기록을 제공합니다.
  • 로그 모니터링: Bastion에 대한 Azure 활동 로그와 VM에 대한 보안 로그를 모니터링하여 의심스러운 활동이나 무단 액세스 시도를 감지합니다.
  • 업데이트 및 패치: 내부 취약성을 완화하려면 최신 보안 패치로 VM을 최신 상태로 유지하세요.

일반적인 문제 해결

  • VM에 연결하려고 할 때 Bastion 옵션이 표시되지 않습니다:
    • Azure Bastion이 VM과 동일한 VNet(또는 피어링된 VNet)에 프로비전되었는지 확인합니다.
    • AzureBastionSubnet이 존재하고 올바른 주소 접두사(/27 이상)가 있는지 확인하세요.
    • Azure Portal에서 Bastion이 '실행 중' 상태인지 확인하세요.
  • Bastion을 통한 RDP/SSH 연결 오류:
    • 잘못된 자격 증명: 사용자 및 암호 자격 증명(또는 SSH 키)이 VM에 대해 올바른지 확인합니다.
    • NSG 문제: VM 서브넷의 NSG가 'AzureBastionSubnet'의 포트 3389(RDP) 또는 22(SSH)에서 인바운드 트래픽을 허용하는지 확인합니다.
    • VM 방화벽: VM의 내부 방화벽이 RDP/SSH 연결을 차단하고 있지 않은지 확인하세요.
    • RDP/SSH 서비스가 실행되고 있지 않습니다: RDP(Windows용) 또는 SSH(Linux용) 서비스가 VM에서 실행되고 있는지 확인하세요.
  • 성능 저하 또는 연결 끊김:
    • 인터넷 연결 대역폭을 확인하세요. Bastion은 세션 비디오를 브라우저로 스트리밍합니다.
    • 더 나은 성능과 추가 기능을 제공하는 Bastion의 표준 또는 프리미엄 SKU 사용을 고려해보세요.
    • 세션 성능에 영향을 미칠 수 있는 대상 VM의 CPU 또는 메모리 사용률이 높은지 확인하세요.
  • Bastion을 통해 내부 VM 리소스에 액세스할 수 없습니다:
    • Azure Bastion은 VM에 대한 연결을 제공합니다. VM에 연결되면 VNet의 다른 내부 리소스에 대한 액세스는 VM의 자체 네트워크 구성 및 적용 가능한 NSG 규칙에 따라 달라집니다.

결론

Azure Bastion은 클라우드 환경 보안을 위한 필수 구성 요소로, 가상 머신에 액세스하기 위한 안전하고 단순화된 방법을 제공합니다. RDP/SSH 포트가 인터넷에 직접 노출되는 것을 제거함으로써 공격 표면을 크게 줄이고 전반적인 보안 태세를 강화합니다. Bastion의 이점을 극대화하려면 신중한 구현, 보안 모범 사례와의 통합, 지속적인 모니터링이 중요합니다. 이 g로이러한 실습 접근 방식을 통해 보안 전문가와 IT 관리자는 Azure Bastion을 구성, 검증 및 관리할 수 있는 준비를 갖추게 되어 가상 머신에 대한 액세스가 항상 안전하고 규정을 준수하도록 보장할 수 있습니다.


참고자료:

[1] 마이크로소프트 런. Azure Bastion이란 무엇입니까?. 사용 가능: https://learn.microsoft.com/pt-br/azure/bastion/bastion-overview [2] 마이크로소프트 런. Azure에서 가상 머신에 대한 보안 원격 액세스를 활성화하기 위해 Azure Bastion을 사용하기 위한 설계 및 계획 고려 사항. 사용 가능: https://learn.microsoft.com/pt-br/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-virtual-machine-remote-access [3] 마이크로소프트 런. RDP - Azure Bastion을 사용하여 Windows VM에 연결. 사용 가능: https://learn.microsoft.com/pt-br/azure/bastion/bastion-connect-vm-rdp-windows [4] 마이크로소프트 런. Bastion 호스트를 구성합니다. 사용 가능: https://learn.microsoft.com/pt-br/azure/bastion/tutorial-create-host-portal [5] 마이크로소프트 런. SSH - Azure Bastion을 사용하여 Linux VM에 연결. 사용 가능: https://learn.microsoft.com/pt-br/azure/bastion/bastion-connect-vm-ssh-linux [6] 마이크로소프트 런. Azure Bastion 세션 모니터링 및 관리. 사용 가능: https://learn.microsoft.com/pt-br/azure/bastion/session-monitoring [7] 마이크로소프트 런. Bastion 세션 녹화 구성. 사용 가능: https://learn.microsoft.com/pt-br/azure/bastion/session-recording