본문 바로가기
Computer Technology 기록부/클라우드 컴퓨팅 기록부 : Microsoft Azure

(AZ-900-5)Azure 컴퓨팅 및 네트워킹 서비스

by Amins 2023. 6. 9.

1. Azure Virtual Machines

  • Azure VM(가상 머신)을 사용하여 클라우드에서 VM 사용 가능
  • VM은 IaaS(서비스 제공 인프라)를 가상화된 서버 형식으로 제공하며 다양한 방법으로 사용 가능
  • 물리적 컴퓨터처럼 가상 머신에서 실행되는 모든 소프트웨어를 사용자 지정할 수 있다
  • 이미 만든 이미지를 만들거나 사용하여 VM을 신속하게 프로비저닝할 수 있다.
  • 미리 구성된 가상 머신 이미지를 선택하면 짧은 시간 안에 가상 머신을 만들고 프로비저닝할 수 있다.
    • 이미지? : VM을 만드는 데 사용되는 템플릿이며 개발 도구 또는 웹 호스팅 환경과 같은 OS 및 기타 소프트웨어를 사전에 포함할 수 있다.

 

가상 머신이 이상적인 경우

  • OS(운영 체제)에 대한 완전한 제어.
  • 사용자 지정 소프트웨어를 실행하는 기능.
  • 사용자 지정 호스팅 구성을 사용해야 하는 경우.

 

2. Azure VM의 장점 : 크기 집합과 가용성 집합

Azure에서 VM 스케일링
테스트, 개발 또는 사소한 작업을 위해 단일 VM을 실행할 수 있습니다. 또는 VM을 함께 그룹화하여 고가용성, 확장성 및 중복성을 제공할 수 있습니다. 또한 Azure는 확장 집합 및 가용성 집합과 같은 기능을 사용하여 VM 그룹화도 관리할 수 있습니다.

가상 머신 크기 집합
Virtual Machine Scale Sets를 사용하면 부하 분산된 동일한 VM 그룹을 만들고 관리할 수 있습니다. 용도가 같은 가상 머신을 여러 개 만들었을 경우라면 이것들이 모두 동일하게 구성되었는지 확인한 다음에 네트워크 라우팅 매개 변수를 설정해 효율성을 확보해야 합니다. 또한 사용을 모니터해 가상 머신을 늘려야 할 지 줄여야 할 지 확인해야 합니다.

이렇게 하는 대신 Azure는 가상 머신 확장 집합을 사용하여 대부분의 작업을 자동화합니다. 확장 집합을 이용하면 중앙에서 몇 분 만에 수 많은 VM을 관리, 구성, 업데이트할 수 있습니다. VM 인스턴스의 양적 규모를 수요에 맞춰 자동으로 증감할 수 있으며 정해진 일정에 따라 스케일링 되도록 설정할 수도 있습니다. 또한 가상 머신 확장 집합은 부하 분산 장치를 자동으로 배포하여 리소스가 효율적으로 사용되고 있는지 확인합니다. 가상 머신 확장 집합을 사용하면 컴퓨팅, 빅 데이터 및 컨테이너 작업과 같은 영역에 대한 대규모 서비스를 구축할 수 있습니다.

가상 머신 가용성 집합
가상 머신 가용성 집합은 복원력이 뛰어나고 고가용성인 환경을 빌드하는 데 도움이 되는 또 다른 도구입니다. 가용성 집합은 VM이 업데이트에 시차를 주고 다양한 전원 및 네트워크 연결을 갖도록 설계되어 단일 네트워크 또는 전원 오류로 인해 모든 VM이 손실되지 않도록 합니다.

가용성 집합은 업데이트 도메인 및 장애 도메인이라는 두 가지 방법으로 VM을 그룹화하여 이 작업을 수행합니다.

업데이트 도메인: 업데이트 도메인은 동시에 다시 부팅할 수 있는 VM을 그룹화합니다. 이렇게 하면 한 번에 하나의 업데이트 도메인 그룹만 오프라인 상태가 되도록 하면서 업데이트를 적용할 수 있습니다. 하나의 업데이트 도메인에 있는 모든 컴퓨터가 업데이트됩니다. 업데이트 프로세스를 진행하는 업데이트 그룹에는 다음 업데이트 도메인에 대한 유지 관리가 시작되기 전에 복구하는 데 30분이 소요됩니다.


장애 도메인: 장애 도메인은 공통 전원 및 네트워크 스위치로 VM을 그룹화합니다. 기본적으로 가용성 집합은 최대 3개의 장애 도메인으로 VM을 분할합니다. 이렇게 하면 VM을 각각의 장애 도매인에 두어(다른 전원 및 네트워킹 리소스에 연결되도록 함으로써) 물리적 전원 또는 네트워킹 오류로부터 보호할 수 있습니다.
가장 좋은 것은 가용성 집합 구성에 추가 비용이 필요 없다는 점입니다. 자신이 만든 VM 인스턴스에 대해서만 요금을 지불합니다.

 

 

3. VM을 사용하는 경우의 예시

  • 테스트 및 개발 도중
    • VM은 다양한 OS 및 애플리케이션 구성을 만드는 빠르고 쉬운 방법을 제공합니다. 테스트 및 개발 담당자는 더 이상 필요하지 않은 VM을 손쉽게 삭제할 수 있습니다.

 

  • 클라우드에서 애플리케이션을 실행하는 경우
    • 기본 인프라를 만들어 실행하는 것과 달리 퍼블릭 클라우드에서 특정 애플리케이션을 실행하는 기능은 상당한 경제적 이익을 제공할 수 있습니다. 예를 들어, 애플리케이션은 수요의 변동을 처리할 필요가 있을 수 있다. VM이 필요하지 않을 때 VM을 종료하거나 예기치 않은 수요 증가를 충족하기 위해 신속하게 VM을 시작하면 사용하는 리소스에 대해서만 요금을 지급하게 됩니다.

 

  • 클라우드로 데이터 센터 확장 시
    • 조직은 Azure에 가상 네트워크를 만들고 VM을 해당 가상 네트워크에 추가함으로써 온-프레미스 네트워크의 기능을 확장할 수 있습니다. 그러면 SharePoint 같은 애플리케이션을 로컬로 실행하는 대신 Azure VM에서 실행할 수 있습니다. 이 배열을 통해 온-프레미스 환경에서 배포하는 것보다 더 쉽고 저렴하게 배포할 수 있습니다.

 

  • 재해 복구 시
    • 클라우드에서 특정 유형의 애플리케이션을 실행하고 온-프레미스 네트워크를 클라우드를 확장하는 것과 같이 재해 복구에 대한 IaaS 기반 접근 방식을 사용하여 막대한 비용을 절감할 수 있습니다. 기본 데이터 센터에 오류가 발생한 경우 Azure에서 실행되는 VM을 만들어 중요한 애플리케이션을 실행한 다음 기본 데이터 센터가 다시 작동하면 이를 종료할 수 있습니다.
  • 물리적 서버를 클라우드로 이동할 시
    • VM은 물리적 서버에서 클라우드로 이동(리프트 앤 시프트라고도 함)할 때도 좋습니다. 물리적 서버의 이미지를 만들고 거의 또는 전혀 변경할 필요 없이 가상 머신 내에서 호스트할 수 있습니다. 물리적 온-프레미스 서버와 마찬가지로 VM도 유지 보수할 책임이 있습니다. 설치된 OS와 소프트웨어를 유지 보수해야 합니다.

 

4. VM 리소스

VM을 프로비저닝 할 때는 해당 VM에 연관된 리소스를 확인할 수 있으며 그 대상은 다음과 같습니다.

  • 크기(용도, 프로세서 코어 수 및 RAM 양)
  • 스토리지 디스크(하드 디스크 드라이브, 반도체 드라이브 등)
  • 네트워킹(가상 네트워크, 공용 IP 주소 및 포트 구성)

 

5. 연습 -  Azure Virtual Machine 만들기

 Azure CLI를 이용해 VM을 만들고 웹서버인 Nginx를 설치해 봅시다.

 

az vm create를 이용해 bash환경에서 바로 linux vm을 만들 수 있습니다.(Portal을 이용한 VM 생성과 동일)

az vm create \
  --resource-group learn-e009591c-15ce-4e67-b24d-cdbcbeb943ef \
  --name my-vm \
  --image UbuntuLTS \
  --admin-username azureuser \
  --generate-ssh-keys

resourse group 뒤의 lean- 도메인은 매 샌드박스 활성화마다 변경됩니다. 

 

az vm extension set 명령을 실행하여 VM에서 Nginx를 구성합니다.

az vm extension set \
  --resource-group learn-e009591c-15ce-4e67-b24d-cdbcbeb943ef \
  --vm-name my-vm \
  --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --version 2.1 \
  --settings '{"fileUris":["https://raw.githubusercontent.com/MicrosoftDocs/mslearn-welcome-to-azure/master/configure-nginx.sh"]}' \
  --protected-settings '{"commandToExecute": "./configure-nginx.sh"}'

해당 명령은 사용자 지정 스크립트 확장을 사용하여 VM에서 Bash 스크립트를 실행합니다. 스크립트는 GitHub에 저장되어 있습니다. 

resourse-group의 도메인은 매 샌드박스 활성화 때 이용된 도메인으로 설정해 줍니다

 

코드 설명

  1. apt-get update를 실행하여 인터넷에서 최신 패키지 정보를 다운로드합니다. 해당 단계에서는 다음 명령을 실행하여 최신 버전의 Nginx 패키지를 찾을 수 있습니다.
  2. Nginx를 설치합니다.
  3. VM의 호스트 이름이 포함된 환영 메시지를 출력하도록 홈페이지(/var/www/html/index.html)를 설정합니다.

 

6. Azure Virtual Desktop

또 다른 유형의 가상 머신은 Azure Virtual Desktop입니다. Azure Virtual Desktop은 클라우드에서 실행되는 데스크톱 및 애플리케이션 가상화 서비스입니다. 이를 통해 모든 위치에서 클라우드 호스트 버전의 Windows를 사용할 수 있습니다. Azure Virtual Desktop은 디바이스 및 운영 체제 간에 작동하며 원격 데스크톱 또는 대부분의 최신 브라우저에 액세스하는 데 사용할 수 있는 앱에서 작동합니다.

 

장점 1 : 보안 강화
Azure Virtual Desktop은 Azure AD(Azure Active Directory)를 사용하는 사용자의 데스크톱에 대한 중앙 집중식 보안 관리를 제공합니다. 다단계 인증을 사용하여 사용자 로그인을 보호할 수 있습니다. 세부적인 RBAC(역할 기반 액세스 제어)를 사용자에게 할당하여 데이터 액세스를 보호할 수도 있습니다.
Azure Virtual Desktop을 사용하면 데이터와 앱이 로컬 하드웨어에서 분리됩니다. 실제 데스크톱 및 앱이 클라우드에서 실행되므로 개인 디바이스에 기밀 데이터가 남을 위험이 줄어듭니다. 또한 사용자 세션은 단일 및 다중 세션 환경 모두에서 격리됩니다.

장점 2 : 다중 세션 Windows 10 또는 Windows 11 배포
Azure Virtual Desktop을 사용하면 단일 VM에서 여러 명의 동시 사용자를 지원하는 유일한 Windows 클라이언트 기반 운영 체제인 Windows 10 또는 Windows 11 Enterprise 다중 세션을 사용할 수 있습니다. 또한 Azure Virtual Desktop은 Windows Server 기반 운영 체제보다 광범위한 애플리케이션 지원을 통해 보다 일관된 환경을 제공합니다.

 

7. Azure 컨테이너 

가상머신에서 인스턴스(애플리케이션)들은 각각 자신만의 OS를 필요로 힙니다. 따라서 단일 호스트 컴퓨터에서 애플리케이션의 여러 인스턴스를 실행하려는 경우, 컨테이너가 사용됩니다.

 

컨테이너

  • 가상화 환경으로, 단일 물리적 호스트에서 여러 가상 머신을 실행하는 것과 매우 유사하며 단일 물리적 또는 가상 호스트에서 여러 컨테이너를 실행할 수 있습니다.
  • 가상 머신과 달리 컨테이너에 대한 운영 체제를 관리하지 않습니다. 가상 머신은 연결하고 관리할 수 있는 운영 체제의 인스턴스 형태입니다.
  • 컨테이너는 경량이며, 동적으로 생성, 스케일링 아웃, 중지할 수 있도록 설계되었습니다.
  • 애플리케이션 수요가 증가함에 따라 가상 머신을 만들고 배포할 수 있지만 컨테이너는 더 가볍고 민첩한 방법입니다.
  • 컨테이너는 주문형 변경에 대응할 수 있도록 설계되었습니다.
  • 컨테이너를 사용하면 크래시 또는 하드웨어 중단이 발생한 경우 빠르게 다시 시작할 수 있습니다.
  • 가장 많이 사용되는 컨테이너 엔진 중 하나는 Azure에서 지원하는 Docker입니다.

 

가상환경 VS 컨테이너

Summary : 가상머신은 각각의 os를 띄워야 하고 컨테이너는 한 os를 공유하고 있는 구조입니다. 가상머신은 완전한 운영 체제 가상화를 위해 사용되고, 컨테이너는 애플리케이션 실행 및 배포를 위해 사용됩니다. 

출처: https://hwanine.github.io/web/Container-vs-VM/
출처 : https://hazel-developer.tistory.com/242

  1. 가상머신(VM): 가상머신은 호스트 시스템에서 독립된 운영 체제 환경을 에뮬레이트합니다. 가상머신은 호스트 시스템 상에 가상 하드웨어를 생성하고, 이를 통해 게스트 운영 체제(가상머신 이미지)를 실행합니다. 가상머신은 완전한 운영 체제를 실행하기 때문에 여러 애플리케이션과 라이브러리를 실행할 수 있으며, 각 가상머신은 독립된 운영 체제와 자원(메모리, 디스크, CPU 등)을 할당받습니다.
  2. 컨테이너(Container): 컨테이너는 운영 체제 수준의 가상화를 제공합니다. 호스트 운영 체제의 커널을 공유하면서, 격리된 프로세스의 실행 환경을 제공합니다. 컨테이너는 호스트 시스템에서 실행되는 애플리케이션을 격리하여 더 가벼운 가상화를 제공하며, 애플리케이션과 종속성을 패키지화하여 이식성과 확장성을 높일 수 있습니다. 컨테이너는 이미지라고 하는 실행 가능한 단위로 배포되며, 컨테이너 이미지는 필요한 모든 라이브러리, 의존성 및 실행 파일을 포함합니다.

솔루션에서 컨테이너 사용
컨테이너는 종종 마이크로 서비스 아키텍처를 사용하여 솔루션을 만드는 데 사용됩니다. 이 아키텍처에서 솔루션을 더 작고 독립적인 조각으로 분할할 수 있습니다. 예를 들어, 웹 사이트를 프런트 엔드를 호스트하는 컨테이너, 백 엔드를 호스트하는 컨테이너 및 스토리지용 컨테이너로 분할할 수 있습니다. 분할 후에는 앱을 논리적 섹션으로 구분하여 독립적으로 유지 관리, 확장 또는 업데이트할 수 있습니다.

웹 사이트 백 엔드가 용량에 도달했지만 프런트 엔드와 스토리지는 부하가 크지 않은 경우를 가정해 보세요. 성능 향상을 위해 백 엔드를 별도로 확장할 수 있습니다. 이러한 변경이 필요한 경우 다른 구성 요소에 영향을 주지 않고 스토리지 서비스를 변경하거나 프런트 엔드를 수정하도록 선택할 수도 있습니다.

 

 

8. Azure Functions

Azure Functions는 이벤트 기반의 서버리스 컴퓨팅 옵션으로 가상 머신이나 컨테이너 유지가 필요 없습니다. VM이나 컨테이너를 사용해 앱을 빌드한 경우에는 만든 앱의 기능을 작동하려면 이러한 리소스가 ‘실행 중’이어야 합니다. Azure Functions를 사용하면 이벤트로 인해 기능이 깨어나며 이벤트가 없을 경우 프로비저닝된 리소스를 유지할 필요가 완화됩니다.

 

9. Azure의 서버리스 컴퓨팅

  • 인프라 관리 필요 X: 코드 배포만 신경쓰고, 운영체체 설치 및 관리에 신경 X
  • 확장성 : 리소스가 더 필요할 때 쉽게 확장 가능
  • 효율적 비용 처리 : 사용한 만큼만 비용을 지불

10. Azure App Service

App Service를 사용하면 인프라를 관리할 필요 없이 원하는 프로그래밍 언어로 웹앱, 백그라운드 작업, 모바일 백 엔드 및 RESTful API를 빌드하고 호스트할 수 있습니다. 자동 확장 기능과 고가용성을 제공합니다. App Service는 Windows 및 Linux를 지원하며, GitHub, Azure DevOps 또는 Git 리포지토리에서 자동화된 배포를 사용하여 지속적인 배포 모델을 지원합니다.

Azure App Service는 Azure에서 앱을 호스트하는 데 사용할 수 있는 강력한 호스팅 옵션입니다. Azure App Service를 통해 사용자는 앱을 빌드하고 유지 관리하는 데 집중하고, Azure는 환경을 유지하고 실행하는 데 집중할 수 있습니다.

Azure App Service는 웹 애플리케이션, REST API 및 모바일 백 엔드를 호스트하는 HTTP 기반 서비스입니다. 또한 .NET, .NET Core, Java, Ruby, Node.js, PHP 또는 Python을 비롯한 여러 언어를 지원하며, Windows 및 Linux 환경도 모두 지원합니다.

 

앱 서비스 유형

  • 웹앱
    • App Service는 ASP.NET, ASP.NET Core, Java, Ruby, Node.js, PHP 또는 Python을 사용하여 웹앱 호스트가 전체 지원됩니다. Windows 또는 Linux를 호스트 운영 체제로 선택할 수 있습니다.
  • API 앱
    • 웹 사이트를 호스트하는 것처럼 원하는 언어 및 프레임워크를 사용하여 REST 기반 웹 API를 빌드할 수 있습니다. 전체 Swagger 지원과 함께 Azure Marketplace에서 API를 패키지 및 게시하는 기능을 사용할 수 있습니다. 생성된 앱은 HTTP 또는 HTTPS 기반 클라이언트에서 사용할 수 있습니다.
  • WebJobs
    • WebJobs 기능을 사용하여 웹앱, API 앱 또는 모바일 앱과 동일한 컨텍스트에서 프로그램(.exe, Java, PHP, Python 또는 Node.js) 또는 스크립트(.cmd, .bat, PowerShell 또는 Bash)를 실행할 수 있습니다. 프로그램과 스크립트는 트리거를 통해 예약하거나 실행할 수 있습니다. WebJobs는 종종 애플리케이션 로직의 일부로 백그라운드 작업을 실행하는 데 사용됩니다.
  • 모바일 앱
    • App Service의 Mobile Apps 기능을 사용하여 iOS 및 Android 앱의 백 엔드를 빠르게 빌드할 수 있습니다. Azure Portal에서 몇 가지 작업만으로 다음을 수행할 수 있습니다.
      • 클라우드 기반 SQL 데이터베이스에 모바일 앱 데이터를 저장합니다.
      • MSA, Google, Twitter 및 Facebook과 같은 일반적인 소셜 공급 기업에 대해 고객을 인증합니다.
        푸시 알림을 보냅니다.
      • C# 또는 Node.js에서 사용자 지정 백 엔드 로직을 실행합니다.
      • 모바일 앱의 경우 네이티브 iOS/Android, Xamarin 및 React 네이티브 앱을 위한 SDK 지원이 제공됩니다.

11. Azure Virtual Network 

Azure 가상 네트워크와 가상 서브넷을 사용하면 VM, 웹앱 및 데이터베이스와 같은 Azure 리소스가 서로 통신할 수 있고 인터넷의 사용자 및 온-프레미스 클라이언트 컴퓨터와 통신할 수 있습니다. Azure 네트워크를 다른 Azure 리소스와 연결되는, 리소스가 있는 온-프레미스 네트워크의 확장이라고 생각할 수 있습니다.

 

Azure Virtual Network는 다음과 같은 주요 네트워킹 기능을 제공합니다.

  • 격리 및 구분
  • 인터넷 통신
  • Azure 리소스 간 통신
  • 온-프레미스 리소스와 통신
  • 네트워크 트래픽 라우팅
  • 네트워크 트래픽 필터링
  • 가상 네트워크 연결

Azure 가상 네트워킹은 퍼블릭 엔드포인트와 프라이빗 엔드포인트를 모두 지원하여 내외부의 리소스가 다른 내부 리소스와 통신할 수 있게 합니다.

  • 퍼블릭 엔드포인트 - 공용 IP 주소를 사용하며 전 세계 어디서나 액세스할 수 있습니다.
  • 프라이빗 엔드포인트 - 가상 네트워크 내에 존재하며 해당 가상 네트워크의 주소 공간 내에서 개인 IP 주소를 사용합니다.

격리 및 구분
Azure 가상 네트워크를 사용하면 격리된 여러 가상 네트워크를 만들 수 있습니다. 가상 네트워크를 설정하는 경우 공용 또는 개인 IP 주소 범위를 사용하여 개인 IP 주소 공간을 정의합니다. IP 범위는 가상 네트워크 내에만 존재하며 인터넷 라우팅이 불가능합니다. 이러한 IP 주소 공간을 서브넷으로 분할하고, 정의된 주소 공간의 일부를 명명된 각 서브넷에 할당할 수 있습니다.
이름 확인의 경우 Azure에 기본 제공되는 이름 확인 서비스를 사용할 수 있습니다. 내부 또는 외부 DNS 서버를 사용하도록 가상 네트워크를 구성할 수도 있습니다.

 

 

인터넷 통신
공용 IP 주소를 Azure 리소스에 할당하거나 리소스를 공용 부하 분산 장치 뒤에 배치하여 인터넷에서 들어오는 연결이 가능하도록 설정할 수 있습니다.

 

 

Azure 리소스 간 통신
Azure 리소스를 사용하여 서로 안전하게 통신할 수 있도록 설정하려 합니다. 다음 두 가지 방법 중 하나를 수행할 수 있습니다.

  • 가상 네트워크는 VM뿐만 아니라 Power Apps용 App Service Environment, Azure Kubernetes Service 및 Azure 가상 머신 확장 집합과 같은 다른 Azure 리소스도 연결할 수 있습니다.
  • 서비스 엔드포인트를 Azure SQL Databases 및 스토리지 계정과 같은 다른 Azure 리소스 형식에 연결할 수 있습니다. 이 방식을 사용하면 여러 Azure 리소스를 가상 네트워크에 연결하여 보안을 개선하고 리소스 간에 최적의 라우팅을 제공할 수 있습니다.

 

온-프레미스 리소스와 통신
Azure 가상 네트워크를 사용하면 온-프레미스 환경 및 Azure 구독 내에서 리소스를 함께 연결할 수 있습니다. 실제로 로컬 환경과 클라우드 환경 모두에 걸쳐 있는 네트워크를 만들 수 있습니다. 이 연결을 수행하는 세 가지 메커니즘이 있습니다.

P2S 가상 프라이빗 네트워크 연결은 조직 외부의 컴퓨터에서 기업 네트워크 내부로 연결됩니다. 이 경우에 클라이언트 컴퓨터는 암호화된 VPN 연결을 시작하여 Azure 가상 네트워크에 연결합니다.


S2S VPN(가상 사설망)은 온-프레미스 VPN 디바이스 또는 게이트웨이를 가상 네트워크의 Azure VPN 게이트웨이에 연결합니다. 실제로 Azure의 디바이스는 로컬 네트워크에 있는 것으로 표시될 수 있습니다. 연결은 암호화되고 인터넷에서 작동합니다.


Azure ExpressRoute는 Azure에 대한 전용 프라이빗 연결을 제공합니다. 이 연결은 인터넷을 통해 이동하지 않습니다. 대역폭을 더 키우고 보안 수준을 더 높여야 하는 환경에는 Azure ExpressRoute를 사용하는 것이 가장 좋습니다.

 

 

네트워크 트래픽 라우팅
기본적으로 Azure에서는 연결된 가상 네트워크의 서브넷, 온-프레미스 네트워크 및 인터넷 간에 트래픽을 라우팅합니다. 다음과 같이 라우팅을 제어하고 해당 설정을 재정의할 수도 있습니다.

경로 테이블을 사용하면 트래픽을 전달하는 방식에 대한 규칙을 정의할 수 있습니다. 서브넷 간에 패킷이 라우팅되는 방법을 제어하는 사용자 지정 경로 테이블을 만들 수 있습니다.
BGP(Border Gateway Protocol)는 Azure VPN 게이트웨이, Azure Route Server 또는 Azure ExpressRoute로 작업하여 온-프레미스 BGP 경로를 Azure 가상 네트워크로 전파합니다.

 


네트워크 트래픽 필터링
Azure 가상 네트워크를 사용하면 다음 방법을 사용하여 서브넷 간 트래픽을 필터링할 수 있습니다.

네트워크 보안 그룹은 Azure 리소스로서 여러 인바운드 및 아웃바운드 보안 규칙을 포함할 수 있습니다. 원본 및 대상 IP 주소, 포트 및 프로토콜과 같은 요인에 따라 트래픽을 허용하거나 차단하도록 이러한 규칙을 정의할 수 있습니다.


네트워크 가상 어플라이언스는 강화된 네트워크 어플라이언스와 비교될 수 있는 특수한 VM입니다. 네트워크 가상 어플라이언스는 방화벽 실행 또는 WAN(광역 네트워크) 최적화 수행과 같은 특정 네트워크 기능을 수행합니다.

 


가상 네트워크 연결
가상 네트워크 피어링을 사용하여 가상 네트워크를 함께 연결할 수 있습니다. 피어링을 사용하면 두 가상 네트워크끼리 서로 직접 연결할 수 있습니다. 피어링된 네트워크 간의 네트워크 트래픽은 비공개이며 공용 인터넷에 들어가지 않는 Microsoft 백본 네트워크로 이동합니다. 피어링을 사용하면 각 가상 네트워크의 리소스가 서로 통신할 수 있습니다. 이러한 가상 네트워크는 별도 지역에 위치할 수 있으며, Azure를 통해 상호 연결된 글로벌 네트워크를 만들 수 있습니다.

UDR(사용자 정의 경로)을 사용하면 가상 네트워크 내의 서브넷 간 또는 가상 네트워크 간의 라우팅 테이블을 제어할 수 있습니다. 이렇게 하면 네트워크 트래픽 흐름을 보다 강하게 제어할 수 있습니다.

 

12. 연습 - 네트워크 액세스 구성

a. 웹 서버 액세스

다음 az vm list-ip-addresses 명령을 실행하여 VM의 IP 주소를 가져오고 결과를 Bash 변수로 저장합니다.

만약 샌드박스 시간이 초과된 경우, 가상 머신을 다시 만들고 Nginx를 설치한 후 아래 코드를 실행해야 합니다.

IPADDRESS="$(az vm list-ip-addresses \
  --resource-group learn-e08d7ee6-fcf1-4098-adce-5dd3d4007060 \
  --name my-vm \
  --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
  --output tsv)"

b. 다음 curl 명령을 실행하여 홈페이지를 다운로드합니다. 

curl --connect-timeout 5 http://$IPADDRESS

--connect-timeout 인수는 연결될 때까지 최대 5초를 허용하도록 지정합니다. 5초가 지나면 연결 시간이 초과되었음을 나타내는 오류 메시지가 표시됩니다.

curl: (28) Connection timed out after 5001 milliseconds

해당 메시지는 시간 제한 내에 VM에 액세스할 수 없었음을 의미합니다.

 

 

c. 선택적 단계로 브라우저에서 웹 서버에 액세스를 시도합니다.

다음을 실행하여 VM의 IP 주소를 콘솔로 출력합니다.

echo $IPADDRESS

 

d. 표시된 IP 주소를 복사한 후 브라우저 탭에 붙여넣고 웹 페이지로 이동합니다

 

연결되지 않음!!!!

IP주소는 VM에 따라 상이합니다

아직 해당 IP 주소로는 웹 서버에 액세스 하지 못합니다. 이유는 NSG 보안 규칙을 설정하지 않았기 때문입니다.

 

더보기

NSG란? : "Network Security Group"를 나타냅니다. Network Security Group는 가상 네트워크(Virtual Network) 내에서 네트워크 트래픽을 제어하고 보안 규칙을 적용하는 가상 방화벽입니다. NSG를 사용하여 특정 포트, 프로토콜, IP 주소 범위에 대한 액세스 제어, 인바운드 및 아웃바운드 트래픽 필터링 등을 구성할 수 있습니다. 이를 통해 가상 머신과 가상 네트워크 간의 네트워크 보안을 관리하고 제어할 수 있습니다. 

 

 

현재 네트워크 보안 그룹 규칙 나열

a. 다음 az network nsg list 명령을 실행하여 VM에 연결된 네트워크 보안 그룹을 나열합니다.

az network nsg list \
  --resource-group [sandbox resource group name] \
  --query '[].name' \
  --output tsv

다음과 같은 내용이 표시됩니다

my-vmNSG

Azure의 각 VM은 하나 이상의 네트워크 보안 그룹에 연결됩니다. 해당 사례에서 Azure는 my-vmNSG라는 NSG를 만들었습니다.

 

 

b. 다음 az network nsg rule list 명령을 실행하여 my-vmNSG라는 NSG와 연결된 규칙을 나열합니다.

az network nsg rule list \
  --resource-group [sandbox resource group name] \
  --nsg-name my-vmNSG

출력에 JSON 형식으로 된 많은 양의 텍스트가 표시됩니다. 해당 출력을 깔끔하게 만들어 봅시다. 

 

 

c. az network nsg rule list 명령을 한 번 더 실행합니다. 이번에는 --query 인수를 사용하여 각 규칙의 이름, 우선 순위, 영향을 받는 포트 및 액세스(허용 또는 거부)만 검색합니다. --output 인수는 출력을 읽기 쉬운 표 형식으로 만듭니다.

 

az network nsg rule list \
  --resource-group [sandbox resource group name] \
  --nsg-name my-vmNSG \
  --query '[].{Name:name, Priority:priority, Port:destinationPortRange, Access:access}' \
  --output table

결과는 다음과 같습니다.

Name              Priority    Port    Access
-----------------  ----------  ------  --------
default-allow-ssh  1000        22      Allow
  • 기본 규칙인 default-allow-ssh가 표시됩니다. 
  • 해당 규칙은 포트 22(SSH)를 통한 인바운드 연결을 허용합니다. 
  • 해당 규칙의 우선 순위는 1000입니다. 규칙은 우선 순위에 따라 처리되고 낮은 숫자가 높은 숫자보다 먼저 처리됩니다.
더보기

SSH(Secure Shell) :  관리자가 시스템에 원격으로 액세스할 수 있도록 Linux에서 사용하는 프로토콜

기본적으로 Linux VM의 NSG는 포트 22에서의 네트워크 액세스만 허용합니다. 이렇게 하면 관리자가 시스템에만 액세스할 수 있습니다.

HTTP를 통한 액세스(웹 서버를 통한 액세스를 의미)를 허용하는 포트 80에서 인바운드 연결을 허용해야 합니다.

 

 

 

네트워크 보안 규칙 설정

여기에서는 포트 80(HTTP)에서의 인바운드 액세스를 허용하는 네트워크 보안 규칙을 만듭니다.

a. 다음 az network nsg rule create 명령을 실행하여 포트 80에서의 인바운드 액세스를 허용하는 allow-http라는 규칙을 만듭니다.

az network nsg rule create \
  --resource-group [sandbox resource group name] \
  --nsg-name my-vmNSG \
  --name allow-http \
  --protocol tcp \
  --priority 100 \
  --destination-port-range 80 \
  --access Allow

학습 목적으로 우선 순위를 100으로 설정합니다. 해당 사례에서 우선 순위는 중요하지 않습니다. 포트 범위가 겹치는 경우에는 우선 순위의 숫자가 낮을 수록 먼저 처리됩니다.

 

b. 구성을 검증하려면 az network nsg rule list를 실행하여 업데이트된 규칙 목록을 확인합니다.

az network nsg rule list \
  --resource-group [sandbox resource group name] \
  --nsg-name my-vmNSG \
  --query '[].{Name:name, Priority:priority, Port:destinationPortRange, Access:access}' \
  --output table

default-allow-ssh 규칙과 새 규칙 allow-http에서 모두 확인할 수 있습니다.

Name              Priority    Port    Access
-----------------  ----------  ------  --------
default-allow-ssh  1000        22      Allow
allow-http        100        80      Allow

 

 

웹 서버에 다시 액세스

 

a. 이전에 실행한 것과 동일한 curl 명령을 실행합니다.

curl --connect-timeout 5 http://$IPADDRESS

다음과 같은 내용이 표시됩니다. 

<html><body><h2>Welcome to Azure! My name is my-vm.</h2></body></html>

b. 브라우저를 새로고침합니다.

In browser

allow http를 통해 http 연결을 관장하는 포트 80의 액세스를 허용했습니다. 따라서 우리는 이제 해당 VM 내 웹페이지에 HTTP 액세스가 가능해 졌습니다!

 

13. Azure VPN(가상 사설망)

VPN(가상 사설망)은 다른 네트워크 내에서 암호화된 터널을 사용합니다. 일반적으로 VPN은 둘 이상의 신뢰할 수 있는 사설망을 신뢰할 수 없는 네트워크(일반적으로 공용 인터넷)를 통해 서로 연결하기 위해 배포됩니다. 신뢰할 수 없는 네트워크를 통해 이동하는 동안 도청이나 기타 공격을 방지하기 위해 트래픽이 암호화됩니다. VPN을 사용하면 네트워크에서 중요한 정보를 안전하게 보안을 유지하며 공유할 수 있습니다.

 

VPN 게이트웨이

VPN Gateway는 가상 네트워크 게이트웨이의 유형입니다. Azure VPN Gateway 인스턴스는 가상 네트워크의 전용 서브넷에 배포되며 다음과 같은 연결을 사용합니다.

  • 사이트 간 연결을 통해 온-프레미스 데이터 센터를 가상 네트워크에 연결합니다.
  • 지점 및 사이트 간 연결을 통해 개별 디바이스를 가상 네트워크에 연결합니다.
  • 네트워크 간 연결을 통해 가상 네트워크를 다른 가상 네트워크에 연결합니다.

모든 데이터 전송은 인터넷을 통과할 때 프라이빗 터널 내부에서 암호화됩니다. 각 Azure 가상 네트워크에는 한 개의 VPN Gateway만 배포할 수 있습니다. 하지만 하나의 게이트웨이를 사용하여 다른 가상 네트워크 또는 온-프레미스 데이터 센터를 포함한 여러 위치에 연결할 수 있습니다.

VPN Gateway를 배포할 때 VPN 유형을 정책 기반 또는 경로 기반으로 지정합니다. 이러한 두 가지 VPN 유형의 주된 차이점은 암호화할 트래픽을 지정하는 방식입니다. Azure에서는 두 VPN 게이트웨이 유형 모두 미리 공유한 키를 유일한 인증 방법으로 사용합니다.

 

  • 정책 기반 VPN Gateway는 각 터널을 통해 암호화되어야 하는 패킷의 IP 주소를 정적으로 지정합니다. 이러한 유형의 디바이스는 해당 IP 주소 세트에 대해 모든 데이터 패킷을 평가하여 해당 패킷이 전송될 터널을 선택합니다.

 

  • 경로 기반 게이트웨이에서는 IPSec 터널이 네트워크 인터페이스 또는 가상 터널 인터페이스로 모델링됩니다. IP 라우팅(고정 경로 또는 동적 라우팅 프로토콜)에 따라 각 패킷을 전송할 때 사용할 터널 인터페이스 중 하나가 결정됩니다. 경로 기반 VPN은 온-프레미스 디바이스에서 애용되는 방법입니다. 토폴로지 변경(예: 새 서브넷 생성)에 대한 복원력이 더 좋습니다.

경로 기반 VPN Gateway를 사용 예시

  • 가상 네트워크 간 연결
  • 지점 및 사이트 간 연결
  • 다중 사이트 연결
  • Azure ExpressRoute 게이트웨이와 동시 사용

 

 

고가용성 시나리오
정보를 안전하게 유지하기 위해 VPN을 구성하는 경우 고가용성 및 내결함성 VPN 구성인지도 확인해야 합니다. VPN 게이트웨이의 복원력을 최대화하는 몇 가지 방법이 있습니다.

활성/대기
Azure에서 VPN Gateway 리소스가 하나만 표시되는 경우에도, 기본적으로 VPN Gateway는 활성-대기 구성 상태에 있는 두 인스턴스로 배포됩니다. 계획된 유지 관리 또는 계획되지 않은 중단이 활성 인스턴스에 영향을 줄 경우 대기 인스턴스는 사용자 개입 없이 자동으로 연결 역할을 수행합니다. 이러한 장애 조치(failover) 중에는 연결이 중단되지만, 일반적으로 계획된 유지 관리의 경우 몇 초 이내, 계획되지 않은 중단의 경우 90초 이내에 연결이 복원됩니다.

활성/활성
BGP 라우팅 프로토콜에 대한 지원이 도입되면서 활성/활성 구성에서 VPN 게이트웨이를 배포할 수도 있습니다. 이 구성에서는 각 인스턴스에 고유한 공용 IP 주소를 할당합니다. 그런 다음, 온-프레미스 디바이스에서 각 IP 주소로 연결되는 별도의 터널을 만듭니다. 온-프레미스에 추가 VPN 디바이스를 배포하여 가용성을 높일 수 있습니다.

ExpressRoute 장애 조치(failover)
또 다른 고가용성 옵션은 VPN 게이트웨이를 ExpressRoute 연결의 보안 장애 조치(failover) 경로로 구성하는 것입니다. ExpressRoute 회로에는 복원력이 기본 제공됩니다. 하지만 연결을 제공하는 케이블에 영향을 미치는 물리적 문제나 전체 ExpressRoute 위치에 영향을 주는 정전 등을 피할 수는 없습니다. ExpressRoute 회로의 중단과 관련된 위험이 있는 고가용성 시나리오에서는 인터넷을 대체 연결 방법으로 사용하는 VPN 게이트웨이를 프로비저닝할 수도 있습니다. 이러한 방식으로 가상 네트워크에 항상 연결되어 있는지 확인할 수 있습니다.

영역 중복 게이트웨이
가용성 영역을 지원하는 지역에서는 VPN 게이트웨이 및 ExpressRoute 게이트웨이를 영역 중복 구성으로 배포할 수 있습니다. 이 구성은 가상 네트워크 게이트웨이에 복원력, 확장성 및 고가용성을 제공합니다. Azure 가용성 영역에서 게이트웨이를 배포하면 Azure에 대한 온-프레미스 네트워크 연결을 영역 수준 오류로부터 보호하면서 지역 내에서 물리적 및 논리적으로 게이트웨이를 구분합니다. 이러한 게이트웨이에는 다른 게이트웨이 SKU(Stock Keeping Unit)가 필요하며 기본 공용 IP 주소 대신 표준 공용 IP 주소를 사용합니다.

 

 

14. Azure ExpressRoute

Azure ExpressRoute를 사용하면 연결 공급자의 도움을 받아 프라이빗 연결을 통해 온-프레미스 네트워크를 Microsoft 클라우드로 확장할 수 있습니다. 이 연결을 ExpressRoute 회로라고 합니다. ExpressRoute를 사용하면 Microsoft Azure 및 Microsoft 365와 같은 Microsoft 클라우드 서비스에 대한 연결을 설정할 수 있습니다. 이를 통해 사무실, 데이터 센터 또는 기타 시설을 Microsoft 클라우드에 연결할 수 있습니다. 각 위치에는 자체 ExpressRoute 회로가 있습니다.

연결은 공동 배치 시설의 연결 공급자를 통해 Any-to-Any(IP VPN) 네트워크, 지점 간 이더넷 네트워크 또는 가상 교차 연결에서 수행할 수 있습니다. ExpressRoute 연결은 퍼블릭 인터넷을 통해 이동하지 않습니다. 이 기능을 사용하면 ExpressRoute 연결은 인터넷을 통한 일반 연결보다 안정적이고 속도가 빠르며 대기 시간이 일관되고 보안성이 높습니다.

ExpressRoute의 기능 및 이점
Azure와 온-프레미스 네트워크 간의 연결 서비스로 ExpressRoute를 사용하면 여러 가지 이점이 있습니다.

a. 모든 지정학적 지역에 걸쳐 Microsoft 클라우드 서비스에 연결합니다.
b. ExpressRoute Global Reach로 모든 지역에서 Microsoft 서비스에 글로벌 연결
c. BGP(Border Gateway Protocol)를 통한 네트워크와 Microsoft 간 동적 라우팅
d. 높은 안정성을 위한 모든 피어링 위치의 기본 중복성입니다.

 

 

Microsoft 클라우드 서비스에 연결
ExpressRoute를 사용하면 모든 지역에서 다음 서비스에 직접 액세스할 수 있습니다.
a. Microsoft Office 365
b. Microsoft Dynamics 365
c. Azure 컴퓨팅 서비스(예: Azure Virtual Machines)
d. Azure 클라우드 서비스(예: Azure Cosmos DB 및 Azure Storage)

 

글로벌 연결
ExpressRoute Global Reach를 사용해 ExpressRoute 회로를 연결하면 온-프레미스 사이트 전체에서 데이터를 교환할 수 있습니다. 예를 들어 아시아에 사무실이 있고 유럽에 데이터 센터가 있고 둘 다 ExpressRoute 회로를 사용해 Microsoft 네트워크에 연결된다고 가정해 보겠습니다. ExpressRoute Global Reach를 사용하여 이러한 두 기능을 연결하면 공용 인터넷을 통해 데이터를 전송하지 않고도 통신할 수 있습니다.

동적 라우팅
ExpressRoute는 BGP를 사용합니다. BGP는 Azure에서 실행되는 리소스와 온-프레미스 네트워크 간에 경로를 교환하는 데 사용됩니다. 이 프로토콜을 사용하면 Microsoft 클라우드에서 실행되는 서비스와 온-프레미스 네트워크 간의 동적 라우팅이 가능합니다.

기본 제공 중복
각 연결 공급자는 중복 디바이스를 사용하여 Microsoft와 설정된 고가용성 연결을 유지합니다. 여러 회로를 구성하여 이 기능을 보완할 수 있습니다.

ExpressRoute 연결 모델
ExpressRoute는 온-프레미스 네트워크를 Microsoft 클라우드에 연결하는 데 사용할 수 있는 세 가지 연결 모델을 지원합니다.


a. CloudExchange 공동 배치
b. 지점 간 이더넷 연결
c. 임의 연결
d. ExpressRoute 사이트에서 직접

 

클라우드 교환의 공동 배치
공동 배치란 ISP와 같은 클라우드 교환에 데이터 센터, 사무실 또는 기타 시설이 물리적으로 공동 배치되는 것을 말합니다. 시설이 클라우드 교환에 공동 배치된 경우 Microsoft 클라우드에 대한 가상 교차 연결을 요청할 수 있습니다.

지점 간 이더넷 연결
지점 간 이더넷 연결이란 지점 간 연결을 사용하여 시설을 Microsoft 클라우드에 연결하는 것을 말합니다.

임의 네트워크
임의 연결을 사용하면 사무실과 데이터 센터에 연결을 제공하여 Azure와 WAN(광역 네트워크)을 통합할 수 있습니다. Azure는 WAN 연결과 통합되어 데이터 센터와 모든 지점 사이 간에 연결되듯이 연결을 제공합니다.

ExpressRoute 사이트에서 직접
전 세계에 전략적으로 분산된 피어링 위치에서 Microsoft 글로벌 네트워크에 직접 연결할 수 있습니다. ExpressRoute Direct는 대규모로 활성/활성 연결을 지원하는 이중 100Gbps 또는 10Gbps 연결을 제공합니다.

보안 고려 사항
ExpressRoute를 사용하면 데이터가 퍼블릭 인터넷을 통해 이동하지 않으므로 인터넷 통신과 관련된 잠재적인 위험에 노출되지 않습니다. ExpressRoute는 온-프레미스 인프라와 Azure 인프라 간의 프라이빗 연결입니다. ExpressRoute 연결이 있는 경우에도 DNS 쿼리, 인증서 해지 목록 확인 및 Azure Content Delivery Network 요청은 공용 인터넷을 통해 전송됩니다.

 

14. Azure DNS

Azure DNS는 Microsoft Azure 인프라를 사용하여 이름 분석을 하는 DNS 도메인용 호스팅 서비스입니다. Azure에 도메인을 호스트하면 다른 Azure 서비스와 동일한 자격 증명, API, 도구 및 대금 청구를 사용하여 DNS 레코드를 관리할 수 있습니다.

 

Azure DNS의 이점

안정성 및 성능

Azure DNS의 DNS 도메인은 Azure의 DNS 이름 서버의 글로벌 네트워크에 호스팅되어 복원력과 고가용성을 제공합니다. Azure DNS는 애니케스트 네트워킹을 사용하므로 각 DNS 쿼리에 가장 가까운 가용 DNS 서버가 응답하여 도메인에 대해 빠른 성능과 고가용성을 제공합니다.

 

보안

  • Azure RBAC(Azure 역할 기반 액세스 제어) - 조직에 대한 특정 작업에 액세스하는 사람을 제어할 수 있습니다.
  • 활동 로그 - 문제를 해결할 때 조직의 사용자가 리소스를 수정한 방법을 모니터링하거나 오류를 찾을 수 있습니다.
  • 리소스 잠금 - 구독, 리소스 그룹 또는 리소스를 잠급니다. 잠금은 조직의 다른 사용자가 실수로 중요한 리소스를 삭제하거나 수정하는 것을 방지합니다.

 

사용 편의성

  • Azure DNS는 Azure 서비스에 대한 DNS 레코드를 관리하고, 외부 리소스에 대한 DNS도 제공할 수 있습니다. Azure DNS는 Azure Portal에 통합되며 다른 Azure 서비스와 동일한 자격 증명, 지원 계약 및 청구를 사용합니다.

  • Azure DNS는 Azure에서 실행되므로 Azure Portal, Azure PowerShell cmdlet 및 플랫폼 간 Azure CLI를 사용하여 도메인 및 레코드를 관리할 수 있습니다. 자동 DNS 관리가 필요한 애플리케이션은 REST API 및 SDK를 사용하여 서비스와 통합할 수 있습니다.

 

사용자 지정 가능 가상 network

Azure DNS는 프라이빗 DNS 도메인도 지원합니다. 이 기능을 사용하면 현재 Azure에서 제공하는 이름이 아닌 사용자 고유의 사용자 지정 도메인 이름을 프라이빗 가상 네트워크에 사용할 수 있습니다.

 

별칭 레코드

또한 Azure DNS는 별칭 레코드 집합도 지원합니다. 별칭 레코드 세트를 사용하여 Azure 공용 IP 주소, Azure Traffic Manager 프로필 또는 Azure CDN(Content Delivery Network) 엔드포인트와 같은 Azure 리소스를 참조할 수 있습니다. 기본 리소스의 IP 주소가 변경되면 별칭 레코드 집합도 DNS 확인 중에 자체적으로 원활하게 업데이트됩니다. 별칭 레코드 집합은 서비스 인스턴스를 가리키며 서비스 인스턴스는 IP 주소에 연결됩니다.

 

본 게시글은 Microsoft Azure hackersground 챌린지 자료를 바탕으로 제작되었습니다.

 

댓글