Linux 및 PostgreSQL 인프라 배포

완료됨

이 단원에서는 Azure 내에서 애플리케이션을 호스팅하는 컴퓨팅 리소스를 만드는 방법을 안내합니다.

Azure Portal, Azure CLI 및 Bicep 및 Terraform을 비롯한 코드형 인프라 템플릿을 포함하여 Azure에서 인프라를 배포하는 여러 가지 방법이 있습니다. 이 단원에서는 애플리케이션에 필요한 컴퓨팅 리소스를 캡슐화하는 미리 구성된 Bicep 템플릿을 배포합니다. 주요 리소스는 다음과 같습니다.

  • Linux(Ubuntu 24.04 LTS)를 실행하는 가상 머신
  • Postgres 16 이상을 실행하는 Azure Database for Postgres.
  • VM에서 데이터베이스로의 보안 액세스를 사용하도록 설정하는 관리 ID.
  • 데이터베이스에 관리자 권한으로 액세스하는 역할과 애플리케이션 자체에 대한 보다 제한적인 역할을 포함하는 RBAC
  • VM과 데이터베이스 모두를 위한 가상 네트워크

이 예는 개발/테스트 워크로드이고 비용 효율성과 성능을 모두 유지하고자 하므로 다음 구성을 선택했습니다.

  • VM은 표준 D2s_v4(vCPU 2개, 메모리 8GB)입니다. Azure 프리미엄 SSD는 초당 최대 3,200개의 IOPS(I/O 작업 수)와 128GB의 스토리지를 갖추고 있습니다. OS 디스크에는 500 IOPS의 P10 128GB 프리미엄 SSD 디스크가 연결되어 있습니다. 필요에 따라 VM의 IOPS와 일치하도록 OS 디스크를 업그레이드할 수 있습니다.

  • 데이터베이스는 최대 3,200 IOPS의 범용 D2ds_v4(2개의 vCore, 8GB RAM)입니다. 이 제품에는 500 IOPS의 P10 128GB 프리미엄 SSD 디스크가 장착되어 있습니다. 필요에 따라 컴퓨팅 IOPS와 일치하도록 이 디스크를 업그레이드할 수 있습니다.

모듈이 완료되면 이러한 리소스를 삭제하여 비용을 절감합니다. 하지만 사용하지 않을 때 VM과 데이터베이스를 꺼두면 컴퓨팅 비용을 절약하고 사용한 스토리지 비용만 지불하면 됩니다. 필요에 따라 이 워크로드를 스케일 업할 수도 있습니다.

이 모듈의 Bicep 템플릿은 AVM(Azure Verified Modules)을 활용합니다. AVM은 코드형 인프라 모듈을 표준화하기 위한 이니셔티브입니다. Microsoft는 이러한 모듈을 유지 관리하며 Azure에서 리소스를 배포하기 위한 많은 모범 사례를 캡슐화합니다.

Azure 구독과 Azure CLI가 있는지 확인합니다.

Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.

이 모듈에는 Azure CLI 버전 2.0.30 이상이 필요합니다. 다음 명령을 사용하여 버전을 찾습니다.

az --version

설치하거나 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

Azure CLI를 사용하여 Azure에 로그인

Azure CLI를 사용하여 Azure에서 명령을 실행하려면 먼저 로그인해야 합니다. az login 명령을 사용하여 로그인합니다.

az login

리소스 그룹 만들기

리소스 그룹은 관련 리소스에 대한 컨테이너입니다. 모든 리소스는 리소스 그룹에 배치되어야 합니다. az group create를 사용하여 리소스 그룹을 만듭니다.

az group create \
    --name 240900-linux-postgres \
    --location westus2

Azure CLI를 사용하여 Bicep 템플릿 배포

Bicep은 선언적 구문을 사용하여 Azure 리소스를 배포하는 DSL(도메인 특정 언어)입니다. Bicep 파일에서 Azure에 배포할 인프라를 정의합니다. 그런 다음, 개발 수명 주기 동안 해당 파일을 사용하여 인프라를 반복적으로 배포합니다. 리소스는 일관된 방식으로 배포됩니다.

이 단위의 컴퓨팅 리소스를 배포하는 데 사용하는 Bicep 파일은 deploy/vm-postgres.bicep GitHub 리포지토리에 있습니다. 여기에는 가상 머신, 가상 네트워크, 관리 ID, VM에 대한 NSG(네트워크 보안 그룹)가 포함되어 있습니다. Bicep에 대해 더 자세히 알아보려면 Bicep이란 무엇인가요?를 참조합니다.

  1. 예제 리포지토리를 로컬 컴퓨터에 복제:

    git clone https://github.com/Azure-Samples/linux-postgres-migration.git
    
  2. linux-postgres-migration 디렉터리로 이동:

    cd linux-postgres-migration
    
  3. Bicep 템플릿 배포:

    az deployment group create \
        --resource-group 240900-linux-postgres \
        --template-file deploy/vm-postgres.bicep
    

배포가 완료되면 JSON 출력을 통해 리소스가 배포되었음을 확인할 수 있습니다.

다음 섹션에서는 Azure Portal을 사용하여 배포된 인프라에서 RBAC 역할 및 네트워크 보안 규칙을 구성하고 살펴보겠습니다. Azure Portal을 사용하면 역할과 규칙을 Bicep 템플릿에 인코딩할 수 있습니다. Azure Portal은 리소스와 리소스에 할당된 권한 간의 관계를 더 쉽게 이해할 수 있는 시각적 인터페이스를 제공합니다.

Azure Portal에서 리소스 그룹 열기

  1. Azure Portal을 엽니다.

  2. 서비스 메뉴에서 리소스 그룹을 선택합니다.

  3. 리소스 그룹 창에서 리소스 그룹 240900-linux-postgres를 선택합니다.

창의 오른쪽 상단에 있는 배포 영역에는 Bicep 템플릿 배포 상태가 표시됩니다. 배포가 성공하면 성공이 표시됩니다.

가상 머신의 네트워크 보안 그룹 보기

  1. 가상 머신 vm-1을 선택합니다.

  2. 네트워킹 섹션에서 네트워크 설정을 선택합니다.

네트워크 설정에 따르면 네트워크 보안 그룹(240900-linux-postgres-nsg)이 가상 머신과 동일한 가상 네트워크(240900-linux-postgres-vnet)의 서브넷에 연결되어 있습니다.

NSG는 리소스 그룹 내에서도 표시됩니다. 여기에는 가상 머신으로 오가는 트래픽을 제어하는 인바운드 및 아웃바운드 보안 규칙 집합이 포함되어 있습니다.

리소스 그룹으로 돌아가기

페이지 맨 위에서 이동 경로 링크를 선택하여 리소스 그룹(Home > Resource groups > 240900-linux-postgres)으로 돌아갑니다.

240900-linux-postgres-identity 사용자가 할당한 관리 ID가 리소스 그룹에 나열됩니다.

Azure 리소스용 관리 ID란 무엇인가요?에서 시스템이 할당한 관리 ID와 사용자가 할당한 관리 ID에 대해 자세히 알아볼 수 있습니다.

네트워크 보안 그룹에 인바운드 보안 규칙 추가

NSG에 인바운드 보안 규칙을 추가하여 현재 IP 주소에서 가상 머신으로의 SSH 트래픽을 허용합니다.

프로덕션 시나리오에서는 종종 Just-in-Time 액세스, Azure Bastion 또는 VPN(Azure 또는 메시 VPN 등)을 사용하여 가상 머신에 대한 액세스를 제한합니다.

  1. 240900-linux-postgres-nsg를 선택합니다.

  2. 설정>인바운드 보안 규칙을 선택합니다.

  3. 추가를 선택합니다.

  4. 원본에서 내 IP 주소를 선택합니다.

  5. 서비스에서 SSH를 선택합니다.

  6. 추가를 선택합니다.

Azure Database for PostgreSQL 유연한 서버에 대한 관리자 보기

  1. Azure Database for PostgreSQL 유연한 서버를 찾아 선택합니다. 이름은 postgres-xxxxx이고, 여기서 xxxxx는 Bicep 템플릿에서 정의한 고유한 문자열입니다. 해당 문자열은 구독 및 리소스 그룹에 대한 배포 전체에서 일관성을 유지합니다.

  2. 보안>인증을 선택합니다.

이 시나리오에서는 Microsoft Entra 인증만을 사용하고 있습니다. 240900-linux-postgres-identity 사용자가 할당한 관리 ID는 Microsoft Entra Admins에 나열되어 있습니다.

240900-linux-postgres-identity 관리 ID는 현재 서버의 유일한 관리자입니다. 선택적으로 고유의 사용자 계정을 관리자 권한으로 추가할 수 있습니다. 하지만 이 시나리오에서는 이미 존재하는 관리 ID를 사용합니다.

다음 섹션에서는 Azure CLI를 통해 가상 머신의 ID를 사용하여 서버를 관리하는 방법을 설명합니다. 또한 해당 ID를 사용하여 애플리케이션의 서버에 대한 액세스를 제공합니다.

프로덕션 시나리오에서는 관리 ID, Microsoft Entra ID, 세분화된 RBAC를 조합하여 사용해 애플리케이션 워크로드가 Azure에서 안전하게 데이터에 액세스하고 리소스를 관리할 수 있도록 할 수 있습니다. 최소 권한 원칙을 따릅니다.

Azure Database for PostgreSQL - 유연한 서버를 사용한 Microsoft Entra 인증Azure Database for PostgreSQL - 유연한 서버를 사용하여 인증에 Microsoft Entra ID 사용을 통해 이러한 시나리오에 대해 자세히 읽어봅니다.

Azure Database for PostgreSQL - 유연한 서버 방화벽 규칙 검토

설정>네트워킹을 선택합니다.

가상 머신이 아닌 로컬 컴퓨터에서 서버를 관리하는 경우 방화벽 규칙에 IP 주소를 추가해야 합니다.

현재 클라이언트 IP 주소(xxx.xxx.xxx.xxx) 추가>저장을 선택하여 현재 IP 주소에 대한 방화벽 규칙을 만들 수 있습니다. 이 규칙을 사용하면 로컬 컴퓨터의 도구를 사용하여 개발/테스트 서버에 액세스할 수 있습니다. 하지만 가상 머신을 사용하여 데이터베이스에 액세스하고 있으므로 지금은 방화벽 규칙을 만들지 않습니다.

운영 환경에서는 공용 IP 주소를 사용하여 인터넷을 통해 이 리소스에 대한 공용 액세스 허용 옵션을 선택 취소하여 이 서버를 공용 인터넷에서 완전히 격리할 수 있습니다.

가상 머신과 달리 Azure Database for PostgreSQL은 어떤 가상 네트워크와도 연결되지 않았습니다. 개발/테스트 시나리오에 유용한 공용 인터넷을 통해 Azure Database for PostgreSQL에 액세스하는 옵션도 보존됩니다.

보안과 유연성을 모두 제공하려면 프라이빗 엔드포인트를 사용하여 가상 네트워크를 통해 가상 머신에서 액세스를 사용하도록 설정해야 합니다. 프라이빗 엔드포인트를 사용하면 가상 머신이 공용 인터넷에 노출하지 않고 데이터베이스에 액세스할 수 있습니다. Private Link를 사용한 Azure Database for PostgreSQL - 유연한 서버 네트워킹에서 프라이빗 엔드포인트에 대해 자세히 읽어보세요.

여기서는 Bicep을 사용하여 프라이빗 엔드포인트를 만들었습니다.

가상 머신의 시스템 할당 관리 ID에 대한 역할 할당을 검토합니다.

  1. 240900-linux-postgres 리소스 그룹으로 돌아가서 vm-1을 선택합니다.

  2. 서비스 메뉴에서 보안>ID를 선택합니다.

    여기에서 시스템이 할당한 관리 ID가 가상 머신에 연결되었는지 확인할 수 있습니다.

  3. 시스템 할당에서 Azure 역할 할당을 선택합니다.

    여기서는 읽기 권한자 역할이 시스템에서 할당한 관리 ID에 할당되었는지 확인할 수 있습니다. 역할 범위는 240900-linux-postgres 리소스 그룹으로 지정됩니다.

이 ID의 사용 권한을 통해 VM 내에서 Azure CLI를 사용하여 리소스 그룹의 리소스를 나열할 수 있습니다. 이 기능을 사용하면 스크립트에 특정 리소스 세부 정보를 하드 코딩할 필요가 없습니다.

이후 단계에서는 VM의 관리 ID에 추가 역할을 할당하여 VM이 Azure Blob Storage 계정에 직접 액세스할 수 있도록 합니다.

다음으로, 배포된 인프라를 살펴보고 구성해 보겠습니다.

리소스