Azure 랜딩 존 Terraform 모듈
Azure는 Azure 랜딩 존을 빌드하기 위한 네이티브 서비스를 제공합니다. 다른 도구도 이 활동에 도움이 될 수 있습니다. 고객과 파트너가 랜딩 존을 배포하는 데 자주 사용하는 도구 중 하나는 HashiCorp의 Terraform입니다.
애플리케이션 랜딩 존에 리소스를 배포하는 것은 모듈의 범위를 벗어납니다. 배포 방법 및 도구에 대한 결정은 애플리케이션을 담당하는 팀을 위한 것입니다.
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/Enterprise-Scale GitHub 리포지토리에서 프로그래밍 방식으로 업데이트됩니다. 최신 원형 구성, 정책 및 역할을 최신 상태로 유지하려면 최신 버전의 모듈을 사용합니다.
리소스 배포
Azure 랜딩 존에서 다음과 같은 중요 디자인 영역에 맞는 리소스 집합을 배포하도록 모듈을 구성할 수 있습니다. 조직의 요구 사항을 충족하도록 이러한 리소스를 사용자 지정합니다.
리소스 범주 | 중요 디자인 영역 |
---|---|
핵심 리소스 | 리소스 조직 보안 거버넌스 |
관리 리소스 | 관리 및 모니터링 |
연결 리소스 | 네트워크 토폴로지 및 연결 |
ID 리소스 | ID 및 액세스 관리 |
이러한 기능을 단일 Terraform 모듈로 패키징하면 대규모로 운영할 때 Azure 플랫폼에서 더 쉽게 일관성을 구현하고 적용할 수 있습니다.
이러한 리소스는 Azure 랜딩 존 개념 아키텍처에 맞춰 조정합니다.
모듈 블록의 공급자 구성을 사용하여 여러 구독에서 이러한 리소스를 기능별로 배포할 수 있습니다.
다음 시나리오에는 리소스 종류와 구성 옵션이 간략히 나와 있습니다.
핵심 리소스
이 모듈의 핵심 기능은 중앙 리소스 조직에 중점을 두고 Azure 랜딩 존에 대한 개념적 아키텍처의 기반을 배포합니다.
핵심 리소스의 배포를 사용하면(기본적으로 사용됨) 모듈에서 다음 리소스 종류를 배포하고 관리합니다.
모듈이 만들어진 리소스의 정확한 수는 모듈 구성에 따라 달라집니다. 기본 구성의 경우 모듈에서 대략적인 180
리소스를 만들 것으로 예상할 수 있습니다.
팁
이러한 리소스 중 어느 것도 구독 범위에서 배포되지 않지만, Terraform에서 Azure로 인증된 세션을 설정하려면 여전히 구독이 필요합니다. Azure를 사용하여 인증하는 방법에 대한 자세한 내용은 Azure 공급자: Azure에 인증 설명서를 참조하세요.
관리 리소스
이 모듈은 공급자 구성 wiki 페이지에 설명된 대로 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 |
이 모듈은 위의 리소스를 배포할 뿐만 아니라 해당 정책 할당에 네이티브 통합을 제공하여 전체 정책 준수를 보장합니다.
이 기능을 사용하는 방법에 대한 자세한 내용은 관리 리소스 배포 위키 페이지를 참조하세요.
연결 리소스
이 모듈은 Azure 랜딩 존에 대한 개념적 아키텍처에서 현재 구독 컨텍스트로 네트워크 토폴로지 및 연결 리소스를 배포할 수 있는 옵션을 제공합니다. 또한 지정된 구독이 올바른 관리 그룹에 배치되도록 합니다.
이 기능을 사용하면 기존 Azure 네트워킹 토폴로지(허브 및 스포크)와 Virtual WAN 네트워크 토폴로지(Microsoft 관리형)의 조합에 따라 여러 허브 네트워크를 배포할 수 있습니다.
또한 이 모듈은 DDoS 네트워크 보호를 만들어 Virtual Network에 연결하고, 중앙 집중식 퍼블릭/프라이빗 DNS 영역을 관리할 수 있습니다.
참고 항목
현재 Azure 랜딩 존에서 DDoS IP 보호를 권장하지 않으며 특정 상황에서 이 옵션을 사용하는 것이 좋습니다. 제품 설명서 Azure DDoS Protection SKU 비교 정보 검토
기존 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 |
이 기능을 사용하는 방법에 대한 자세한 내용은 연결 리소스 배포 위키 페이지를 참조하세요.
Virtual WAN 네트워크 토폴로지(Microsoft에서 관리)
이 모듈에서는 원하는 경우 Virtual WAN 네트워크 토폴로지(Microsoft 관리형)를 기반으로 하나 이상의 허브 네트워크를 배포할 수 있습니다.
참고 항목
기존과 다른 Virtual WAN 네트워크 리소스 기능을 갖추었기 때문에 이 기능을 사용하는 경우 Virtual WAN 스포크에 대한 피어링은 양방향입니다.
Virtual WAN 네트워크 토폴로지(Microsoft 관리형)를 기반으로 리소스를 배포하는 경우 모듈은 다음 리소스 종류(구성에 따라 다름)를 배포하고 관리합니다.
리소스 | Azure 리소스 종류 | Terraform 리소스 종류 |
---|---|---|
리소스 그룹 | Microsoft.Resources/resourceGroups |
azurerm_resource_group |
가상 WAN | Microsoft.Network/virtualWans |
azurerm_virtual_wan |
Virtual Hubs | 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 계획은 기존 가상 네트워크에서만 사용할 수 있습니다. 가상 허브 지원은 현재 사용할 수 없습니다.
Important
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 관리 그룹과 관련된 정책 설정을 업데이트하려면 configure_identity_resources
입력 변수를 사용합니다.
이 기능을 사용하는 방법에 대한 자세한 내용은 ID 리소스 배포 위키 페이지를 참조하세요.
시작
모듈을 시작하기 위한 요구 사항은 시작 Wiki 페이지에 설명되어 있습니다.
시작을 간소화하기 위해 모듈이 Terraform 레지스트리에 게시되었습니다. 이 문서 뒷부분의 간단한 예제에 나와 있는 것처럼 코드 내에서 직접 참조할 수 있습니다. terraform init
를 실행하면 모듈 및 모든 종속성이 자동으로 다운로드됩니다.
Terraform 레지스트리의 종속성 탭에서 최신 모듈 및 공급자 종속성을 볼 수 있습니다.
Important
일부 Terraform 및 AzureRM 공급자 버전 조합에는 알려진 문제가 있습니다. 최신 Terraform 및 AzureRM 공급자 버전으로 업그레이드하여 알려진 몇 가지 문제를 해결할 수 있습니다. 알려진 다른 문제는 일반적으로 배포를 다시 실행하면 해결할 수 있는 일시적인 오류입니다.
일반적으로 특정 버전에 고정하고, 업그레이드하기 전에 철저히 테스트하는 것이 좋습니다.
변경이 필요한 경우 모듈의 새 버전이 릴리스됩니다. 새로운 릴리스는 최신 Terraform 및 AzureRM 공급자 버전과의 호환성을 보장합니다. 자세한 내용은 모듈 릴리스 지침을 참조하세요.
최신 기능을 다운로드하려면 모듈 버전이 최신 버전으로 설정되어 있는지 확인합니다. 최신 버전의 모듈로 업그레이드하려면 terraform init -upgrade
를 실행합니다.
간단한 예
이 예제 코드는 엔터프라이즈 규모 참조 아키텍처에서 권장되는 최소 관리 그룹 및 구독 조직을 배포합니다. 이 간단한 예제를 실행하고 나면 배포를 사용자 지정할 수 있습니다.
팁
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 모듈을 배포하는 방법을 알아봅니다. 여기에서 모듈의 일부 파트가 어떻게 작동하는지도 알아볼 수 있습니다.