TOPIC/Cloud

Azure Cloud Shell에 Private하게 접근하기 (2)

H-Y-E-N 2024. 4. 3. 15:45

안녕하세요. HYEN입니다.

오늘은 지난 글에 이어 Azure Relay를 사용하여 Azure Cloud Shell을 가상 네트워크에 배포하는 방법에 대해 알아보겠습니다. 😎

지난 글 : https://with-cloud.tistory.com/31

 

Azure Cloud Shell에 Private하게 접근하기 (1)

안녕하세요. HYEN입니다. 오늘은 Azure Cloud Shell에 Private하게 접근하는 방법에 대해 알아보겠습니다. 😉 결과부터 말하자면, Local PC에서 Cloud Shell에 접근하는 것 자체를 제어하는 것은 하기에 적은

with-cloud.tistory.com


Contents

     

    3. 가상 네트워크에서 Cloud Shell 사용하기 - Azure Relay

    ※ 3번에서 진행되는 리소스는 Southeast Asia에 배포합니다. Korea Central로 region 지정 시 오류가 발생합니다.😭※

    3.1 Azure Relay란?

    먼저 Azure Relay가 무엇인지부터 확인하고 넘어가도록 하겠습니다. 

     

    Azure Relay는 클라우드와 온프레미스 서비스가 서로 연결될 수 있는 지점을 제공하는 Azure의 서비스입니다. 
    만약, 온프레미스에 있는 서비스가 클라우드 구성 요소와 통신해야 하지만 VPN 또는 ExpressRoute와 같이 온프레미스와 클라우드 간 사설 네트워크 망을 구축하거나, 방화벽을 통해 특정 포트를 여는 방식을 사용하고자 하지 않을 경우 Azure Relay를 사용할 수 있습니다.

     

    3.2 사전 리소스 생성

    템플릿을 사용하여 가상 네트워크에 Cloud Shell을 배포하기 전에 사전에 생성해야 하는 리소스를 배포하고 필요한 데이터를 확인해야 합니다.

     

    [체크리스트]

    ✅ 가상 네트워크 생성
    ✅ Azure Container Instance OID 확인
    ✅ Azure Relay 네임스페이스 생성 
    ✅ NSG 생성 

     

    먼저, 가상 네트워크를 생성합니다.

    서브넷의 경우 컨테이너 서브넷, 릴레이 서브넷, 스토리지 서브넷이 필요합니다.

    • [기본 사항] 탭

     

    • [IP 주소] 탭 (optional)
      • 각 서브넷의 이름과 대역을 메모해 둡니다. (ARM Template에서 생성해 줘도 됩니다.)

     

    • [검토 + 만들기] 탭을 클릭하여 유효성 검사 후 가상 네트워크 생성을 진행합니다.

     

     

    다음으로, Azure Container Instance OID를 확인합니다.

    • [Microsoft Entra ID] > [개요] > “azure container instance service” 검색

     

    • [개체 ID]를 복사한 후 메모해 둡니다.

     

    Azure Relay 네임스페이스를 생성합니다.

    • [기본 사항] 탭

     

    • [검토 + 만들기] 탭을 클릭하여 유효성 검사 후 Relay 생성을 진행합니다.

     

    NSG를 생성합니다.

    • [기본 사항] 탭

     

    • [검토 + 만들기] 탭을 클릭하여 유효성 검사 후 NSG 생성을 진행합니다.

     

    3.3 템플릿을 사용하여 가상 네트워크에 Cloud Shell 배포

    ARM Template을 사용하여 가상 네트워크에서 Cloud Shell 리소스를 생성합니다.

    (https://learn.microsoft.com/ko-kr/samples/azure/azure-quickstart-templates/cloud-shell-vnet/)

     

    • 하기 스크린샷과 같이 [Deploy to Azure] 버튼을 클릭하여 템플릿 페이지로 이동합니다.

     

    • 하기 스크린샷과 같이 배포에 필요한 정보를 입력합니다.

     

    • [검토 + 만들기] 탭을 클릭하여 ARM Template을 통한 배포를 진행합니다.

    3.4 템플릿을 사용하여 가상 네트워크 내에 Storage Account 생성

    ARM Template을 사용하여 가상 네트워크에서 Cloud Shell 리소스를 생성합니다.

    (https://learn.microsoft.com/ko-kr/samples/azure/azure-quickstart-templates/cloud-shell-vnet-storage/)

     

    • 하기 스크린샷과 같이 [Deploy to Azure] 버튼을 클릭하여 템플릿 페이지로 이동합니다.

     

    • 하기 스크린샷과 같이 배포에 필요한 정보를 입력합니다.

     

    • [검토 + 만들기] 탭을 클릭하여 ARM Template을 통한 배포를 진행합니다.

     

    3.5 가상 네트워크를 사용하도록 Cloud Shell 구성 - Local PC

    배포가 완료된 후 사용자 별 Private Cloud Shell 인스턴스를 사용하도록 구성을 변경해야 합니다.

     

    • Cloud Shell을 실행한 후 ⚙️ 버튼을 클릭하여 [사용자 설정 다시 설정] 버튼을 클릭합니다.

     

    • 사용자 설정 다시 설정 창이 표시되면 [초기화]를 클릭합니다.

     

    • Azure Cloud Shell 시작 창이 표시되면 [Bash]를 클릭합니다.

     

    • 스토리지와의 연결을 위해 하기 스크린샷과 같이 VNET 격리 설정을 진행합니다.

    • 하기 스크린샷과 같이 Virtual Network에 있는 Cloud Shell에 요청을 보낸 후 Cloud Shell에 연결되는 것을 확인할 수 있습니다.

     

    만약, Cloud Shell에서 ifconfig를 날리면 어떻게 될까요?

    하기와 같은 ip가 출력됩니다.

     

    이는 vnet-cs-hyein이라는 이름의 가상 네트워크 내 존재하는 snet-con이라는 이름의 서브넷에 속해 있는 ip입니다. 

    따라서 Cloud Shell이 가상 네트워크 내에 잘 격리되어 있는 것을 확인할 수 있습니다. 

     

    이번에는 Azure Relay를 확인해 보겠습니다. 

    [Azure Relay] > [엔터티] > [하이브리드 연결]로 이동하면 연결이 1개 생성되어 있는 것을 확인할 수 있습니다. 

     

    그렇다면 하이브리드 연결은 무엇일까요?

    하이브리드 연결은 웹 소켓 또는 HTTP(S)를 통해 요청을 보내고 응답을 받을 수 있도록 하는 연결 기능입니다. 
    쉽게 말하자면 요청을 보내고 받는 각각의 애플리케이션 또는 당사자들이 각자의 네트워크 내에서 도달할 수 있는 Azure 영역에 랑데부, 즉 서로가 만날 수 있는 지점를 만드는 것을 하이브리드 연결이라고 할 수 있습니다. 
    그래서 각자의 네트워크가 서로 연결되어 있지 않아도 직접 연결된 것처럼 릴레이를 통해 요청 및 응답을 교환할 수 있게 됩니다. 

     

    이 외에도 Azure Relay에서는 WCF 연결도 지원하고 있지만 이 부분은 이번 글에서는 다루지 않도록 하겠습니다. 

     

    그렇다면, Cloud Shell을 통해 private ip만 attach된 Linux 가상 머신에 접근할 수 있을까요? 

    이를 확인해 보기 위해 vnet-cs-hyein이라는 이름의 가상 네트워크에 snet-vm이라는 이름의 서브넷을 생성합니다.

     

    • snet-vm이라는 이름의 서브넷을 생성하고 ip 대역은 172.19.3.0/24로 할당합니다. 

     

    • Linux 가상 머신을 생성합니다. (자세한 내용은 생략합니다.)

     

    • 먼저 Cloud Shell에서 Linux 가상 머신의 private ip로 ping을 날려 보겠습니다. 

     

    • Cloud Shell을 가상 네트워크에 배포하지 않은 환경에서 가상 머신의 private ip로 ping을 날리면 하기와 같이 packet loss가 발생합니다.

     

    이 두 환경의 차이를 통해서 Cloud Shell이 가상 네트워크 내에 잘 구성되었다는 것을 알 수 있습니다. 

    그렇다면 SSH 접근은 가능할까요? 

     

    답은 YES입니다.

     

    가상 네트워크 내에서 동작하는 것이기 때문에 가상 머신의 NSG에 별도의 인바운드 규칙 추가 없이 접근이 가능합니다. 

    만약 테스트하려는 가상 머신이 배포되어 있는 가상 네트워크와 Cloud Shell을 격리한 가상 네트워크가 서로 다르다면 VNet Peering만 해주면 됩니다. 

     

    3.6 가상 네트워크를 사용하도록 Cloud Shell 구성 - Virtual Machine 

    이번에는 가상 머신에서 Cloud Shell을 실행했을 때 Local PC에서 접근하는 것과 어떤 차이가 있는지 알아보도록 하겠습니다. 

     

    이를 위해 먼저 Windows 가상 머신을 생성합니다. (자세한 내용은 생략합니다.) 

     

    • RDP를 통해 Windows 가상 머신에 접근합니다.

     

    • Azure Portal로 이동하여 Cloud Shell을 실행합니다. 
      하기 스크린샷과 같이 별도의 설정 없이 바로 Cloud Shell을 사용할 수 있는 것을 확인할 수 있습니다. 

     

    이렇게 Azure Relay를 사용하여 Local PC에서 가상 네트워크에 격리된 Cloud Shell을 사용하는 방법, 그리고 가상 머신에서 가상 네트워크에 격리된 Cloud Shell을 사용하는 방법에 대해 알아보았습니다. 


    저번 글에서도 말씀 드렸듯이, Cloud Shell에 대한 완전한 접근 차단을 위해서는 별도의 도메인을 방화벽 등에서 차단해야 한다는 점 참고해 주시면 감사하겠습니다. 

     

    다음 글은 Jenkins와 GitHub를 Private하게 연결하는 법에 대해 다뤄보겠습니다. 😋

    728x90
    320x100
    SMALL