
PoC Azure Landing Zone I – Subscription 단일 구성
PoC Azure Landing Zone 은 엔터프라이즈급 전체 구성을 다 하기보다는, 핵심 컴포넌트만 빠르게 배치해서 클라우드 거버넌스·네트워크·보안 구조를 검증하는 목적에 맞춰야 합니다.
PoC Azure Landing Zone I
PoC(Proof of Concept) Azure Landing Zone 이라도 Policy & RBAC까지 포함하면 훨씬 “거버넌스 체감”이 됩니다.
아래 예시는 Subscription 내 단일 PoC 버전 으로 구성된 네트워크·보안·모니터링에 더해, 정책(Policy) + RBAC(Role Assignment)까지 적용된 PoC Landing Zone Terraform 코드입니다.

📊 구성 내용
- Resource Groups:
network-rg
,security-rg
,management-rg
- Hub VNET + Subnet
- Log Analytics Workspace (모니터링)
- Defender for Cloud Security Contact
- Policy:
Environment
태그가 없는 리소스 그룹 생성 차단 - RBAC: 특정 사용자/그룹(Object ID)에게
Owner
역할 부여
terraform {
required_version = ">= 1.5.0"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 3.100"
}
}
}
provider "azurerm" {
features {}
}
# ======================
# Variables
# ======================
variable "prefix" {
type = string
default = "poclz"
description = "Landing Zone prefix"
}
variable "location" {
type = string
default = "koreacentral"
description = "Azure region"
}
variable "owner_object_id" {
type = string
description = "RBAC 할당 대상 사용자/그룹의 AAD Object ID"
}
# ======================
# Resource Groups
# ======================
resource "azurerm_resource_group" "network_rg" {
name = "${var.prefix}-network-rg"
location = var.location
}
resource "azurerm_resource_group" "security_rg" {
name = "${var.prefix}-security-rg"
location = var.location
}
resource "azurerm_resource_group" "management_rg" {
name = "${var.prefix}-management-rg"
location = var.location
}
# ======================
# Networking (Hub VNET + Subnet)
# ======================
resource "azurerm_virtual_network" "hub_vnet" {
name = "${var.prefix}-hub-vnet"
location = var.location
resource_group_name = azurerm_resource_group.network_rg.name
address_space = ["10.10.0.0/16"]
}
resource "azurerm_subnet" "hub_subnet" {
name = "hub-subnet"
resource_group_name = azurerm_resource_group.network_rg.name
virtual_network_name = azurerm_virtual_network.hub_vnet.name
address_prefixes = ["10.10.1.0/24"]
}
# ======================
# Monitoring
# ======================
resource "azurerm_log_analytics_workspace" "log" {
name = "${var.prefix}-law"
location = var.location
resource_group_name = azurerm_resource_group.management_rg.name
sku = "PerGB2018"
retention_in_days = 30
}
# ======================
# Security Center
# ======================
resource "azurerm_security_center_contact" "security_contact" {
email = "security@example.com"
phone = "+821012345678"
alert_notifications = true
alerts_to_admins = true
}
# ======================
# Azure Policy (예: 리소스 그룹에 태그 강제)
# =================
🚀 실행 예시
terraform init
terraform plan -var 'owner_object_id=00000000-1111-2222-3333-444444444444'
terraform apply -auto-approve