Azure 랜딩 존 Terraform 모듈

Azure는 Azure 랜딩 존을 빌드하기 위한 네이티브 서비스를 제공합니다. 다른 도구도 이 활동에 도움이 될 수 있습니다. 고객과 파트너가 랜딩 존을 배포하는 데 자주 사용하는 도구 중 하나는 Terraform by HashiCorp입니다.

애플리케이션 랜딩 존에 리소스를 배포하는 것은 모듈의 범위를 벗어납니다. 배포 방법 및 도구에 대한 결정은 애플리케이션을 담당하는 팀을 위한 것입니다.

Azure 랜딩 존 Terraform 모듈은 Terraform을 사용하여 대규모 Azure 랜딩 존을 관리하는 데 필요한 플랫폼 리소스를 빠르게 구현해 줍니다. 이 모듈은 연결 및 관리 구독에서 관리 그룹 계층 구조, 정책 및 리소스의 배포를 간소화하도록 설계되었습니다.

사전 요구 사항

Terraform을 처음 사용하여 Terraform 설치 및 사용에 대한 정보를 원하는 경우 HashiCorp Learn에서 Terraform 설치 자습서를 참조하세요.

Terraform 공급자를 설정하고 Azure에서 인증을 받는 방법에 대한 정보는 Terraform 웹 사이트에서 AzureRM 공급자 가이드를 참조하세요. 여러 구독에 배포하기 위해 공급자를 설정하는 방법을 알아보려면 공급자 구성 Wiki 페이지를 참조하세요.

표준 모듈 사용의 중요성

구성 요소 재사용은 Infrastructure as Code의 기본 원칙입니다. 모듈은 환경 내에서 그리고 환경 전체에서 리소스 배포 전체의 표준과 일관성을 정의하는 데 중요한 역할을 합니다.

Azure 랜딩 존 Terraform 모듈은 공식 Terraform 레지스트리에 게시되어 있으며 HashiCorp의 검증을 마쳤습니다.

Terraform 레지스트리에서 모듈을 배포하면 다음이 제공됩니다.

  • 사용자 환경에서 Azure 랜딩 존을 빠르게 제공
  • 엄격한 버전 제어와 함께 최신 버전의 모듈로 테스트된 업그레이드 경로

모듈 사용 시 이점

Azure 랜딩 존 Terraform 모듈을 사용하는 경우의 이점은 다음과 같습니다.

  • 관리 그룹을 통해 구독 조직용으로 관리되고 확장 가능한 핵심 리소스 계층 구조
  • 즉시 할당할 수 있는 광범위한 사용자 지정 정의 라이브러리와 함께 Azure IAM(ID 및 액세스 관리) 컨트롤을 통해 확장성 있는 보안 거버넌스 및 규정 준수
  • 관리 그룹 상속을 통해 구독 전반에 걸쳐 정책 적용
  • 관리 및 연결 랜딩 존용으로 관리되는 리소스. 이러한 리소스에서는 다음을 제공합니다.
    • 모듈 및 해당 정책 할당에서 관리하는 리소스의 긴밀한 통합을 통해 정책 준수를 보장합니다.
    • 리소스 간의 통합을 통해 관리 오버헤드를 줄이고, Azure 프라이빗 DNS에 대한 가상 네트워크 링크를 자동으로 만드는 등의 향상된 최종 사용자 환경을 제공합니다.

템플릿 라이브러리는 Azure/엔터프라이즈 규모 GitHub 리포지토리에서 프로그래밍 방식으로 업데이트됩니다. 최신 원형 구성, 정책 및 역할을 최신 상태로 유지하려면 최신 버전의 모듈을 사용합니다.

리소스 배포

Azure 랜딩 존에서 다음과 같은 중요 디자인 영역에 맞는 리소스 집합을 배포하도록 모듈을 구성할 수 있습니다. 조직의 요구 사항을 충족하도록 이러한 리소스를 사용자 지정합니다.

리소스 범주 중요 디자인 영역
핵심 리소스 리소스 구성
보안
거버넌스
관리 리소스 관리 및 모니터링
연결 리소스 네트워크 토폴로지 및 연결
ID 리소스 ID 및 액세스 관리

이러한 기능을 단일 Terraform 모듈로 패키징하면 대규모로 운영할 때 Azure 플랫폼에서 더 쉽게 일관성을 구현하고 적용할 수 있습니다.

이러한 리소스는 Azure 랜딩 존 개념 아키텍처에 맞춰 조정합니다.

Azure 랜딩 존 개념 아키텍처 다이어그램.

모듈 블록의 공급자 구성을 사용하여 여러 구독에서 이러한 리소스를 기능별로 배포할 수 있습니다.

다음 시나리오에는 리소스 종류와 구성 옵션이 간략히 나와 있습니다.

핵심 리소스

이 모듈의 핵심 기능은 Azure 랜딩 존 개념 아키텍처의 기반을 배포하며, 중앙 리소스 구성에 중점을 둡니다.

핵심 리소스 계층 구조에 중점을 둔 Azure 랜딩 존 개념 아키텍처의 다이어그램.

핵심 리소스의 배포를 사용하면(기본적으로 사용됨) 모듈에서 다음 리소스 종류를 배포하고 관리합니다.

리소스 Azure 리소스 종류 Terraform 리소스 종류
관리 그룹 Microsoft.Management/managementGroups azurerm_management_group
관리 그룹 구독 Microsoft.Management/managementGroups/subscriptions azurerm_management_group
정책 할당 Microsoft.Authorization/policyAssignments azurerm_management_group_policy_assignment
정책 정의 Microsoft.Authorization/policyDefinitions azurerm_policy_definition
정책 세트 정의 Microsoft.Authorization/policySetDefinitions azurerm_policy_set_definition
역할 할당 Microsoft.Authorization/roleAssignments azurerm_role_assignment
역할 정의 Microsoft.Authorization/roleDefinitions azurerm_role_definition

모듈이 만들어진 리소스의 정확한 수는 모듈 구성에 따라 달라집니다. 기본 구성의 경우 모듈에서 대략적인 180 리소스를 만들 것으로 예상할 수 있습니다.

이러한 리소스 중 어느 것도 구독 범위에서 배포되지 않지만, Terraform에서 Azure로 인증된 세션을 설정하려면 여전히 구독이 필요합니다. Azure를 사용하여 인증하는 방법에 대한 자세한 내용은 Azure 공급자: Azure 설명서에 인증 .

관리 리소스

이 모듈은 공급자 구성 Wiki 페이지에 설명된 바와 같이, 관리 및 모니터링 리소스를 Azure 랜딩 존 개념 아키텍처에서 지정된 구독으로 배포할 수 있는 옵션을 제공합니다. 또한 이 모듈은 지정된 구독이 올바른 관리 그룹에 배치되도록 합니다.

관리 리소스에 중점을 둔 Azure 랜딩 존 개념 아키텍처의 다이어그램.

관리 리소스 배포를 사용하면 모듈에서 다음 리소스 종류(구성에 따라 다름)를 배포하고 관리합니다.

리소스 Azure 리소스 종류 Terraform 리소스 종류
리소스 그룹 Microsoft.Resources/resourceGroups azurerm_resource_group
Log Analytics 작업 영역 Microsoft.OperationalInsights/workspaces azurerm_log_analytics_workspace
Log Analytics 솔루션 Microsoft.OperationsManagement/solutions azurerm_log_analytics_solution
Automation 계정 Microsoft.Automation/automationAccounts azurerm_automation_account
Log Analytics 연결된 서비스 Microsoft.OperationalInsights/workspaces /linkedServices azurerm_log_analytics_linked_service

이 모듈은 위의 리소스를 배포할 뿐만 아니라 해당 정책 할당에 네이티브 통합을 제공하여 전체 정책 준수를 보장합니다.

이 기능을 사용하는 방법에 대한 자세한 내용은 관리 리소스 배포 Wiki 페이지를 참조하세요.

연결 리소스

이 모듈은 네트워크 토폴로지 및 연결 리소스를 Azure 랜딩 존 개념 아키텍처에서 현재 구독 컨텐스트로 배포할 수 있는 옵션을 제공합니다. 또한 지정된 구독이 올바른 관리 그룹에 배치되도록 합니다.

이 기능을 사용하면 기존 Azure 네트워킹 토폴로지(허브 및 스포크)Virtual WAN 네트워크 토폴로지(Microsoft 관리형)의 조합에 따라 여러 허브 네트워크를 배포할 수 있습니다.

또한 이 모듈은 DDoS 네트워크 보호를 만들어 Virtual Network에 연결하고, 중앙 집중식 퍼블릭/프라이빗 DNS 영역을 관리할 수 있습니다.

참고

현재 Azure 랜딩 존에서 DDoS IP 보호를 권장하지 않으며 특정 상황에서 이 옵션을 사용하는 것이 좋습니다. 제품 설명서 Azure DDoS Protection SKU 비교 정보 검토

기존 Azure 네트워킹 토폴로지(허브 및 스포크)

이 모듈에서는 원하는 경우 기존 Azure 네트워킹 토폴로지(허브 및 스포크)를 기반으로 하나 이상의 허브 네트워크를 배포할 수 있습니다.

기존 Azure 네트워킹 토폴로지(허브 및 스포크)를 사용하는 연결 리소스에 중점을 둔 Azure 랜딩 존 개념 아키텍처의 다이어그램.

참고

이 모듈은 현재 연결 구독에 대한 네트워킹 허브와 종속 리소스만 구성합니다. 허브에서 스포크로 아웃바운드 가상 네트워크 피어링을 사용할 수 있는 옵션을 제공하지만, 사용자는 여전히 스포크에서 허브로 피어링을 시작해야 합니다. 이는 AzureRM 공급자가 특정 구독을 배포 대상으로 지정하는 방식의 제한 때문입니다.

기존 Azure 네트워킹 토폴로지(허브 및 스포크)를 기반으로 리소스를 배포하는 경우 모듈은 다음 리소스 종류(구성에 따라 다름)를 배포하고 관리합니다.

리소스 Azure 리소스 종류 Terraform 리소스 종류
리소스 그룹 Microsoft.Resources/resourceGroups azurerm_resource_group
가상 네트워크 Microsoft.Network/virtualNetworks azurerm_virtual_network
서브넷 Microsoft.Network/virtualNetworks/subnets azurerm_subnet
가상 네트워크 게이트웨이 Microsoft.Network/virtualNetworkGateways azurerm_virtual_network_gateway
Azure Firewall Microsoft.Network/azureFirewalls azurerm_firewall
퍼블릿 IP 주소 Microsoft.Network/publicIPAddresses azurerm_public_ip
가상 네트워크 피어링 Microsoft.Network/virtualNetworks/virtualNetworkPeerings azurerm_virtual_network_peering

이 기능을 사용하는 방법에 대한 자세한 내용은 연결 리소스 배포 Wiki 페이지를 참조하세요.

Virtual WAN 네트워크 토폴로지(Microsoft에서 관리)

이 모듈에서는 원하는 경우 Virtual WAN 네트워크 토폴로지(Microsoft 관리형)를 기반으로 하나 이상의 허브 네트워크를 배포할 수 있습니다.

Virtual WAN 네트워킹 토폴로지(Microsoft 관리형)를 사용하는 연결 리소스에 중점을 둔 Azure 랜딩 존 개념 아키텍처의 다이어그램.

참고

기존과 다른 Virtual WAN 네트워크 리소스 기능을 갖추었기 때문에 이 기능을 사용하는 경우 Virtual WAN 스포크에 대한 피어링은 양방향입니다.

Virtual WAN 네트워크 토폴로지(Microsoft 관리형)를 기반으로 리소스를 배포하는 경우 모듈은 다음 리소스 종류(구성에 따라 다름)를 배포하고 관리합니다.

리소스 Azure 리소스 종류 Terraform 리소스 종류
리소스 그룹 Microsoft.Resources/resourceGroups azurerm_resource_group
가상 WAN Microsoft.Network/virtualWans azurerm_virtual_wan
가상 허브 Microsoft.Network/virtualHubs azurerm_virtual_hub
ExpressRoute 게이트웨이 Microsoft.Network/expressRouteGateways azurerm_express_route_gateway
VPN Gateway Microsoft.Network/vpnGateways azurerm_vpn_gateway
Azure Firewall Microsoft.Network/azureFirewalls azurerm_firewall
Azure Firewall 정책 Microsoft.Network/firewallPolicies azurerm_firewall_policy
가상 허브 연결 Microsoft.Network/virtualHubs/hubVirtualNetworkConnections azurerm_virtual_hub_connection

이 기능을 사용하는 방법에 대한 자세한 내용은 Virtual WAN 리소스 배포 Wiki 페이지를 참조하세요.

DDoS Protection 계획

이 모듈은 필요에 따라 DDoS 네트워크 보호를 배포하고 필요한 경우 가상 네트워크를 계획에 연결할 수 있습니다.

참고

플랫폼 제한으로 인해 DDoS Protection 계획은 기존 가상 네트워크에서만 사용할 수 있습니다. 가상 허브 지원은 현재 사용할 수 없습니다.

중요

Azure 랜딩 존 참고 자료에서는 DDoS 네트워크 보호를 사용하여 Azure 플랫폼의 보호를 강화할 것을 권장합니다. 비프로덕션 및 MVP 배포에서 예기치 않은 비용이 발생하지 않도록 하기 위해 Azure 랜딩 존 Terraform 모듈에서는 이 기능을 사용하지 않습니다. 이 기능과 관련된 비용이 있기 때문입니다.

프로덕션 환경의 경우 이 기능을 사용하는 것이 좋습니다.

DDoS Protection 계획 리소스 배포를 사용하면 모듈에서 다음 리소스 종류(구성에 따라 다름)를 배포하고 관리합니다.

리소스 Azure 리소스 종류 Terraform 리소스 종류
리소스 그룹 Microsoft.Resources/resourceGroups azurerm_resource_group
DDoS Protection 계획 Microsoft.Network/ddosProtectionPlans azurerm_network_ddos_protection_plan

DNS

모듈에서는 원하는 경우 프라이빗 DNS 영역을 배포하여 프라이빗 엔드포인트를 지원하고 허브 및/또는 스포크 Virtual Network에 연결할 수 있습니다. 또한 필요한 경우 사용자 지정 퍼블릭/프라이빗 DNS 영역을 배포하고 연결할 수 있습니다.

DNS 리소스 배포를 사용하면 모듈에서 다음 리소스 종류(구성에 따라 다름)를 배포하고 관리합니다.

리소스 Azure 리소스 종류 Terraform 리소스 종류
리소스 그룹 Microsoft.Resources/resourceGroups azurerm_resource_group
DNS 영역 Microsoft.Network/dnsZones azurerm_dns_zone
프라이빗 DNS 영역 Microsoft.Network/privateDnsZones azurerm_private_dns_zone
프라이빗 DNS 영역 Virtual Network 링크 Microsoft.Network/privatednszones/virtualnetworklinks azurerm_private_dns_zone_virtual_network_link

ID 리소스

이 모듈은 ID 및 액세스 관리 랜딩 존과 관련된 정책을 구성할 수 있는 옵션을 제공합니다. 또한 지정된 구독이 올바른 관리 그룹에 배치되도록 합니다.

ID 리소스에 중점을 둔 Azure 랜딩 존 개념 아키텍처의 다이어그램.

참고

이 기능은 리소스를 배포하지 않습니다. ID 관리 그룹과 관련된 정책 설정을 업데이트하려면 configure_identity_resources 입력 변수를 사용합니다.

이 기능을 사용하는 방법에 대한 자세한 내용은 ID 리소스 배포 Wiki 페이지를 참조하세요.

시작

모듈을 시작하기 위한 요구 사항은 시작 Wiki 페이지에 설명되어 있습니다.

고객이 간단하게 시작할 수 있도록 이 모듈은 Terraform 레지스트리에 게시되었습니다. 이 문서 뒷부분의 간단한 예제에 나와 있는 것처럼 코드 내에서 직접 참조할 수 있습니다. terraform init를 실행하면 모듈 및 모든 종속성이 자동으로 다운로드됩니다.

Terraform 레지스트리의 종속성 탭에서 최신 모듈과 공급자 종속성을 볼 수 있습니다.

중요

일부 Terraform 및 AzureRM 공급자 버전 조합에는 알려진 문제가 있습니다. 최신 Terraform 및 AzureRM 공급자 버전으로 업그레이드하여 알려진 몇 가지 문제를 해결할 수 있습니다. 알려진 다른 문제는 일반적으로 배포를 다시 실행하면 해결할 수 있는 일시적인 오류입니다.

일반적으로 특정 버전에 고정하고, 업그레이드하기 전에 철저히 테스트하는 것이 좋습니다.

변경이 필요한 경우 모듈의 새 버전이 릴리스됩니다. 새로운 릴리스는 최신 Terraform 및 AzureRM 공급자 버전과의 호환성을 보장합니다. 자세한 내용은 모듈 릴리스 참고 자료를 참조하세요.

최신 기능을 다운로드하려면 모듈 버전이 최신 버전으로 설정되어 있는지 확인합니다. 최신 버전의 모듈로 업그레이드하려면 terraform init -upgrade를 실행합니다.

GitHub 릴리스(최신 SemVer)

간단한 예

이 예제 코드는 엔터프라이즈 규모 참조 아키텍처에서 권장되는 최소 관리 그룹 및 구독 organization 배포합니다. 이 간단한 예제를 실행하고 나면 배포를 사용자 지정할 수 있습니다.

root_parent_id가 모듈의 유일한 필수 변수인 경우에도 root_id를 설정하는 것이 좋습니다. root_id 값을 변경하면 다운스트림 종속성을 포함하여 모듈에서 관리하는 모든 리소스의 전체 재배포 작업이 시작됩니다.

다음 코드는 main.tf 루트 모듈에 대한 간단한 시작 구성입니다.

# Configure Terraform to set the required AzureRM provider
# version and features{} block.

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 2.77.0"
    }
  }
}

provider "azurerm" {
  features {}
}

# Get the current client configuration from the AzureRM provider.
# This configuration is used to populate the root_parent_id variable with the
# current tenant ID used as the ID for the "Tenant Root Group"
# management group.

data "azurerm_client_config" "core" {}

# Use variables to customize the deployment

variable "root_id" {
  type    = string
  default = "es"
}

variable "root_name" {
  type    = string
  default = "Enterprise-Scale"
}

# Declare the Terraform Module for Cloud Adoption Framework
# Enterprise-scale and provide a base configuration.

module "enterprise_scale" {
  source  = "Azure/caf-enterprise-scale/azurerm"
  version = ">= 1.0.0"

  providers = {
    azurerm              = azurerm
    azurerm.connectivity = azurerm
    azurerm.management   = azurerm
  }

  root_parent_id = data.azurerm_client_config.core.tenant_id
  root_id        = var.root_id
  root_name      = var.root_name

}

다음 단계

클라우드 채택 프레임워크 엔터프라이즈 규모용 Terraform 모듈은 엔터프라이즈 규모 랜딩 존을 빠르게 만들 수 있는 경로를 제공합니다. 또한 각 랜딩 존의 구성을 관리하는 간단한 접근 방식을 유지하면서도 배포를 확장하고 사용자 지정할 수 있는 유연성을 제공합니다.

자세한 내용을 알아보려면 Terraform 레지스트리에서 모듈을 검토하고, GitHub에서 모듈 설명서를 살펴보세요. 설명서에서는 배포를 사용자 지정하는 방법에 대한 더 많은 예제와 자습서를 찾을 수 있습니다.

HashiCorp Learn을 통해 Azure 랜딩 존 Terraform 모듈을 배포하는 방법을 알아보세요. 여기에서 모듈의 일부 파트가 어떻게 작동하는지도 알아볼 수 있습니다.