Terraform-modul för Azure-landningszoner
Azure tillhandahåller interna tjänster för att skapa dina Azure-landningszoner. Andra verktyg kan också hjälpa dig med det här arbetet. Ett verktyg som kunder och partner ofta använder för att distribuera landningszoner är Terraform av HashiCorp.
Distributionen av resurser till programlandningszoner ligger utanför modulens omfång. Beslut om distributionsmetoden och verktygen är till för det team som ansvarar för programmet.
Terraform-modulen Azure-landningszoner ger en snabb implementering av de plattformsresurser som du behöver för att hantera Azure-landningszoner i stor skala med hjälp av Terraform. Modulen är utformad för att förenkla distributionen av hanteringsgruppens hierarki, principer och resurser i anslutnings- och hanteringsprenumerationerna.
Förutsättningar
Om terraform är nytt för dig och du vill ha information om hur du installerar och använder det kan du läsa självstudien Installera Terraform på HashiCorp Learn.
Information om hur du konfigurerar Terraform-providern och autentiserar med Azure finns i AzureRM-providerguiderna på Terraform-webbplatsen. Mer information om hur du konfigurerar providern för distribution över flera prenumerationer finns på wiki-sidan Providerkonfiguration .
Vikten av att använda standardmoduler
Återanvändning av komponenter är en grundläggande princip för infrastruktur som kod. Moduler är avgörande för att definiera standarder och konsekvens för resursdistribution i och mellan miljöer.
Terraform-modulen för Azure-landningszoner publiceras till det officiella Terraform-registret och verifieras av HashiCorp.
När du distribuerar modulen från Terraform Registry får du:
- En snabbare leverans av Azure-landningszoner i din miljö.
- En testad uppgraderingssökväg till den senaste versionen av modulen, tillsammans med strikt versionskontroll.
Fördelar med att använda modulen
Fördelarna med att använda Terraform-modulen Azure-landningszoner är:
- En hanterad och utökningsbar kärnresurshierarki för prenumerationsorganisationen via hanteringsgrupper.
- Skalbar säkerhetsstyrning och efterlevnad via IAM-kontroller (Identitets- och åtkomsthantering i Azure) med ett omfattande bibliotek med anpassade definitioner som är redo att tilldelas.
- Tillämpning av principer mellan prenumerationer via arv av hanteringsgrupp.
- Hanterade resurser för hanterings- och anslutningslandningszoner. Dessa resurser tillhandahåller:
- Garanterad principefterlevnad genom nära integrering av resurser som hanteras av modulen och motsvarande principtilldelningar.
- Integrering mellan resurser för att minska hanteringskostnaderna och ge en förbättrad användarupplevelse, till exempel automatisk skapande av virtuella nätverkslänkar för Azure Private DNS.
Dricks
Mallbiblioteket uppdateras programmatiskt från GitHub-lagringsplatsen i Azure/Enterprise-skala . Om du vill hålla dig uppdaterad med den senaste arketypskonfigurationen, principerna och rollerna kontrollerar du att du använder den senaste versionen av modulen.
Resursdistribution
Du kan konfigurera modulen för att distribuera uppsättningar med resurser som överensstämmer med följande kritiska designområden i Azure-landningszoner. Anpassa dessa resurser så att de uppfyller organisationens krav.
Resurskategori | Kritiskt designområde |
---|---|
Kärnresurser | Säkerhetsstyrning för resursorganisation |
Hanteringsresurser | Hantering och övervakning |
Anslutningsresurser | Nätverkstopologi och anslutning |
Identitetsresurser | Identitets- och åtkomsthantering |
Genom att paketera dessa funktioner i en enda Terraform-modul blir det enklare att skapa och tillämpa konsekvens på Azure-plattformen när du arbetar i stor skala.
Dessa resurser överensstämmer med den konceptuella arkitekturen för Azure-landningszoner:
Du kan distribuera dessa resurser, efter funktion, över flera prenumerationer med hjälp av providerkonfigurationen i modulblocket.
I följande avsnitt beskrivs resurstyper och konfigurationsalternativ.
Kärnresurser
Kärnfunktionen i den här modulen distribuerar grunderna i den konceptuella arkitekturen för Azure-landningszoner, med fokus på den centrala resursorganisationen.
När du aktiverar distribution av kärnresurser (aktiverad som standard) distribuerar och hanterar modulen följande resurstyper:
Resurs | Azure-resurstyp | Terraform-resurstyp |
---|---|---|
Hanteringsgrupper | Microsoft.Management/managementGroups |
azurerm_management_group |
Prenumerationer på hanteringsgrupp | Microsoft.Management/managementGroups/subscriptions |
azurerm_management_group |
Principtilldelningar | Microsoft.Authorization/policyAssignments |
azurerm_management_group_policy_assignment |
Principdefinitioner | Microsoft.Authorization/policyDefinitions |
azurerm_policy_definition |
Definitioner för principuppsättningar | Microsoft.Authorization/policySetDefinitions |
azurerm_policy_set_definition |
Rolltilldelningar | Microsoft.Authorization/roleAssignments |
azurerm_role_assignment |
Rolldefinitioner | Microsoft.Authorization/roleDefinitions |
azurerm_role_definition |
Det exakta antalet resurser som modulen skapar beror på modulkonfigurationen. För en standardkonfiguration kan du förvänta dig att modulen skapar ungefär resurser 180
.
Dricks
Ingen av dessa resurser distribueras i prenumerationsomfånget, men Terraform kräver fortfarande en prenumeration för att upprätta en autentiserad session med Azure. Mer information om hur du autentiserar med Azure finns i dokumentationen om Azure-providern: Autentisera till Azure .
Hanteringsresurser
Modulen innehåller ett alternativ för att aktivera distribution av hanterings- och övervakningsresurser från den konceptuella arkitekturen för Azure-landningszoner till den angivna prenumerationen, enligt beskrivningen på wiki-sidan Providerkonfiguration. Modulen säkerställer också att den angivna prenumerationen placeras i rätt hanteringsgrupp.
När du aktiverar distribution av hanteringsresurser distribuerar och hanterar modulen följande resurstyper (beroende på konfiguration):
Resurs | Azure-resurstyp | Terraform-resurstyp |
---|---|---|
Resursgrupper | Microsoft.Resources/resourceGroups |
azurerm_resource_group |
Log Analytics-arbetsyta | Microsoft.OperationalInsights/workspaces |
azurerm_log_analytics_workspace |
Log Analytics-lösningar | Microsoft.OperationsManagement/solutions |
azurerm_log_analytics_solution |
Automation-konto | Microsoft.Automation/automationAccounts |
azurerm_automation_account |
Länkad Log Analytics-tjänst | Microsoft.OperationalInsights/workspaces /linkedServices |
azurerm_log_analytics_linked_service |
Förutom att distribuera ovanstående resurser tillhandahåller modulen intern integrering i motsvarande principtilldelningar för att säkerställa fullständig principefterlevnad.
Mer information om hur du använder den här funktionen finns på wiki-sidan Distribuera hanteringsresurser .
Anslutningsresurser
Modulen innehåller ett alternativ för att aktivera distribution av nätverkstopologi och anslutningsresurser från den konceptuella arkitekturen för Azure-landningszoner till den aktuella prenumerationskontexten. Det säkerställer också att den angivna prenumerationen placeras i rätt hanteringsgrupp.
Den här funktionen möjliggör distribution av flera hubbnätverk baserat på valfri kombination av traditionell Azure-nätverkstopologi (hubb och eker) och Virtual WAN-nätverkstopologi (Microsoft-hanterad).
Modulen kan också skapa och länka DDoS Network Protection till virtuella nätverk och hantera centraliserade offentliga och privata DNS-zoner.
Kommentar
Vi rekommenderar för närvarande inte DDoS IP Protection i Azure-landningszoner och rekommenderar att du använder det här alternativet under specifika omständigheter. Läs produktdokumentationen om jämförelse av Azure DDoS Protection SKU
Traditionell Azure-nätverkstopologi (hubb och eker)
Modulen kan eventuellt distribuera ett eller flera hubbnätverk baserat på den traditionella Azure-nätverkstopologin (hubb och eker).
Kommentar
Modulen konfigurerar för närvarande endast nätverkshubben och beroende resurser för anslutningsprenumerationen. Även om det finns ett alternativ för att aktivera utgående peering för virtuella nätverk från hubb till eker, måste användarna fortfarande initiera peering från eker till hubb. Detta beror på begränsningar i hur AzureRM-providern riktar in sig på en specifik prenumeration för distribution.
När du distribuerar resurser baserat på en traditionell Azure-nätverkstopologi (hubb och eker) distribuerar och hanterar modulen följande resurstyper (beroende på konfiguration):
Resurs | Azure-resurstyp | Terraform-resurstyp |
---|---|---|
Resursgrupper | Microsoft.Resources/resourceGroups |
azurerm_resource_group |
Virtuella nätverk | Microsoft.Network/virtualNetworks |
azurerm_virtual_network |
Undernät | Microsoft.Network/virtualNetworks/subnets |
azurerm_subnet |
Virtuella nätverksgatewayer | Microsoft.Network/virtualNetworkGateways |
azurerm_virtual_network_gateway |
Azure-brandväggar | Microsoft.Network/azureFirewalls |
azurerm_firewall |
Offentliga IP-adresser | Microsoft.Network/publicIPAddresses |
azurerm_public_ip |
Peering för virtuella nätverk | Microsoft.Network/virtualNetworks/virtualNetworkPeerings |
azurerm_virtual_network_peering |
Mer information om hur du använder den här funktionen finns på wikisidan Distribuera anslutningsresurser .
Virtual WAN-nätverkstopologi (Microsoft-hanterad)
Modulen kan eventuellt distribuera ett eller flera hubbnätverk baserat på den virtuella WAN-nätverkstopologin (Microsoft-hanterad).
Kommentar
På grund av de olika funktionerna i Virtual WAN-nätverksresurser jämfört med traditionella är peering för Virtual WAN-ekrar dubbelriktad när du använder den här funktionen.
När du distribuerar resurser baserat på en Virtuell WAN-nätverkstopologi (Microsoft-hanterad) distribuerar och hanterar modulen följande resurstyper (beroende på konfiguration):
Resurs | Azure-resurstyp | Terraform-resurstyp |
---|---|---|
Resursgrupper | Microsoft.Resources/resourceGroups |
azurerm_resource_group |
Virtuella WAN-nätverk | Microsoft.Network/virtualWans |
azurerm_virtual_wan |
Virtuella hubbar | Microsoft.Network/virtualHubs |
azurerm_virtual_hub |
Express Route-gatewayer | Microsoft.Network/expressRouteGateways |
azurerm_express_route_gateway |
VPN-gatewayer | Microsoft.Network/vpnGateways |
azurerm_vpn_gateway |
Azure Firewall-brandväggar | Microsoft.Network/azureFirewalls |
azurerm_firewall |
Azure Firewall-principer | Microsoft.Network/firewallPolicies |
azurerm_firewall_policy |
Virtual Hub-anslutningar | Microsoft.Network/virtualHubs/hubVirtualNetworkConnections |
azurerm_virtual_hub_connection |
Mer information om hur du använder den här funktionen finns på wikisidan Distribuera virtuella WAN-resurser .
DDoS Protection-plan
Modulen kan eventuellt distribuera DDoS Network Protection och länka virtuella nätverk till planen om det behövs.
Kommentar
På grund av plattformsbegränsningar kan DDoS Protection-planer endast aktiveras för traditionella virtuella nätverk. Stöd för virtuell hubb är inte tillgängligt för närvarande.
Viktigt!
Vägledningen för Azure-landningszoner rekommenderar att du aktiverar DDoS Network Protection för att öka skyddet för din Azure-plattform. För att förhindra oväntade kostnader i icke-produktions- och MVP-distributioner inaktiveras den här funktionen i Terraform-modulen Azure-landningszoner på grund av kostnaden för den här resursen.
För produktionsmiljöer rekommenderar vi starkt att du aktiverar den här funktionen.
När du aktiverar distribution av DDoS Protection-planresurser distribuerar och hanterar modulen följande resurstyper (beroende på konfiguration):
Resurs | Azure-resurstyp | Terraform-resurstyp |
---|---|---|
Resursgrupper | Microsoft.Resources/resourceGroups |
azurerm_resource_group |
DDoS Protection-planer | Microsoft.Network/ddosProtectionPlans |
azurerm_network_ddos_protection_plan |
DNS
Modulen kan eventuellt distribuera privata DNS-zoner för att stödja privata slutpunkter och länka dem till virtuella nav- och/eller ekernätverk. Användardefinierade offentliga och privata DNS-zoner kan också distribueras och länkas efter behov.
När du aktiverar distribution av DNS-resurser distribuerar och hanterar modulen följande resurstyper (beroende på konfiguration):
Resurs | Azure-resurstyp | Terraform-resurstyp |
---|---|---|
Resursgrupper | Microsoft.Resources/resourceGroups |
azurerm_resource_group |
DNS-zoner | Microsoft.Network/dnsZones |
azurerm_dns_zone |
Privata DNS-zoner | Microsoft.Network/privateDnsZones |
azurerm_private_dns_zone |
Länk till privat DNS-zon för virtuellt nätverk | Microsoft.Network/privatednszones/virtualnetworklinks |
azurerm_private_dns_zone_virtual_network_link |
Identitetsresurser
Modulen innehåller ett alternativ för att konfigurera principer som rör landningszonen för identitets- och åtkomsthantering . Det säkerställer också att den angivna prenumerationen placeras i rätt hanteringsgrupp.
Kommentar
Den här funktionen distribuerar inga resurser. Om du vill uppdatera principinställningar relaterade till identitetshanteringsgruppen använder du configure_identity_resources
indatavariabeln.
Mer information om hur du använder den här funktionen finns på wikisidan Distribuera identitetsresurser .
Komma igång
Kraven för att komma igång med modulen finns dokumenterade på wikisidan Komma igång .
För att förenkla kom igång har modulen publicerats till Terraform Registry. Du kan referera till den direkt i koden, som du ser i det enkla exemplet senare i den här artikeln. Om du kör terraform init
laddas modulen och alla beroenden ned automatiskt.
Du kan visa de senaste modul- och providerberoendena på fliken Beroenden i Terraform-registret.
Viktigt!
Det finns kända problem med vissa kombinationer av Terraform- och AzureRM-providerversioner. Du kan lösa några kända problem genom att uppgradera till de senaste Terraform- och AzureRM-providerversionerna. Andra kända problem är tillfälliga fel som du vanligtvis kan åtgärda genom att köra distributionen igen.
Vi rekommenderar vanligtvis att du fäster specifika versioner och testar noggrant innan du uppgraderar.
Vi släpper nya versioner av modulen när ändringar behövs. Nya versioner säkerställer kompatibilitet med de senaste Terraform- och AzureRM-providerversionerna. Mer information finns i vår vägledning för modulversioner .
Om du vill hämta de senaste funktionerna kontrollerar du att modulversionen är inställd på den senaste versionen. Om du uppgraderar till en senare version av modulen kör du terraform init -upgrade
.
Enkelt exempel
Den här exempelkoden distribuerar den minsta rekommenderade hanteringsgruppen och prenumerationsorganisationen från referensarkitekturen i företagsskala. När du har det här enkla exemplet igång kan du börja anpassa distributionen.
Dricks
Även om root_parent_id
är modulens enda obligatoriska variabel rekommenderar vi även att du anger root_id
. root_id
Om du ändrar värdet startas en fullständig omdistribution av alla resurser som modulen hanterar, inklusive underordnade beroenden.
Följande kod är en enkel startkonfiguration för rotmodulen 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
}
Nästa steg
Terraform-modulen för Cloud Adoption Framework Enterprise-skala ger en snabbare väg för att skapa landningszoner i företagsskala. Det ger också flexibiliteten att expandera och anpassa distributionen samtidigt som du har en förenklad metod för att hantera konfigurationen av varje landningszon.
Mer information finns i modulen i Terraform Registry och utforskar moduldokumentationen på GitHub. I dokumentationen hittar du fler exempel och självstudier om hur du anpassar distributionen.
Lär dig hur du distribuerar Terraform-modulen för Azure-landningszoner via HashiCorp Learn. Därifrån kan du också se hur vissa delar av modulen fungerar.