Delen via


Terraform-module voor Azure-landingszones

Azure biedt systeemeigen services voor het bouwen van uw Azure-landingszones. Andere hulpprogramma's kunnen ook helpen met deze inspanning. Een hulpprogramma dat klanten en partners vaak gebruiken om landingszones te implementeren, is Terraform by HashiCorp.

De implementatie van resources naar landingszones van toepassingen valt buiten het bereik van de module. Beslissingen over de implementatiemethode en hulpprogramma's zijn voor het team dat verantwoordelijk is voor de toepassing.

De Terraform-module voor Azure-landingszones biedt een snelle implementatie van de platformbronnen die u nodig hebt om Azure-landingszones op schaal te beheren met behulp van Terraform. De module is ontworpen om de implementatie van de beheergroephiërarchie, beleidsregels en resources in de connectiviteits- en beheerabonnementen te vereenvoudigen.

Vereisten

Zie de zelfstudie Terraform installeren op HashiCorp Learn als u geen kennis hebt van Terraform en u informatie wilt over het installeren en gebruiken ervan.

Zie de handleidingen van de AzureRM-provider op de Terraform-website voor informatie over het instellen van de Terraform-provider en verificatie met Azure. Zie de wikipagina providerconfiguratie voor informatie over het instellen van de provider voor implementatie in meerdere abonnementen.

Belang van het gebruik van standaardmodules

Hergebruik van onderdelen is een fundamenteel principe van infrastructuur als code. Modules zijn van groot belang bij het definiëren van standaarden en consistentie voor de implementatie van resources binnen en in omgevingen.

De Terraform-module van Azure-landingszones wordt gepubliceerd naar het officiële Terraform Registry en wordt geverifieerd door HashiCorp.

Het implementeren van de module vanuit het Terraform-register biedt:

  • Een versnelde levering van Azure-landingszones in uw omgeving.
  • Een getest upgradepad naar de nieuwste versie van de module, samen met strikt versiebeheer.

Voordelen van het gebruik van de module

De voordelen van het gebruik van de Terraform-module voor Azure-landingszones zijn onder andere:

  • Een beheerde en uitbreidbare kernresourcehiërarchie voor abonnementsorganisatie via beheergroepen.
  • Schaalbare beveiligingsgovernance en naleving via IAM-besturingselementen (Identity and Access Management) van Azure, met een uitgebreide bibliotheek met aangepaste definities die klaar zijn om toe te wijzen.
  • Het afdwingen van beleid voor abonnementen via overname van beheergroepen.
  • Beheerde resources voor beheer- en connectiviteitslandingszones. Deze resources bieden:
    • Verzekerde beleidsnaleving door een nauwe integratie van resources die worden beheerd door de module en bijbehorende beleidstoewijzingen.
    • Integratie tussen resources om de beheeroverhead te verminderen en een verbeterde gebruikerservaring te bieden, zoals het automatisch maken van virtuele netwerkkoppelingen voor Azure Privé-DNS.

Tip

De sjabloonbibliotheek wordt programmatisch bijgewerkt vanuit de GitHub-opslagplaats voor Azure/Enterprise-Scale . Als u op de hoogte wilt blijven van de nieuwste archetypeconfiguratie, beleidsregels en rollen, moet u ervoor zorgen dat u de nieuwste versie van de module gebruikt.

Resource-implementatie

U kunt de module configureren voor het implementeren van sets resources die overeenkomen met de volgende kritieke ontwerpgebieden in Azure-landingszones. Pas deze resources aan om te voldoen aan de vereisten van uw organisatie.

Resourcecategorie Kritiek ontwerpgebied
Kernresources Beveiligingsgovernance van
resourceorganisatie
Beheerbronnen Beheer en controle
Connectiviteitsbronnen Netwerktopologie en -connectiviteit
Identiteitsbronnen Identiteits- en toegangsbeheer

Als u deze mogelijkheden in één Terraform-module verpakt, kunt u eenvoudiger consistentie bouwen en afdwingen op het Azure-platform wanneer u op schaal werkt.

Deze resources zijn afgestemd op de conceptuele architectuur van azure-landingszones:

Diagram van de conceptuele architectuur van de Azure-landingszone.

U kunt deze resources per mogelijkheid implementeren voor meerdere abonnementen met behulp van providerconfiguratie in het moduleblok.

In de volgende secties worden de resourcetypen en configuratieopties beschreven.

Kernresources

De kernmogelijkheid van deze module implementeert de basisbeginselen van de conceptuele architectuur voor Azure-landingszones, met een focus op de centrale resourceorganisatie.

Diagram van de conceptuele architectuur van de Azure-landingszone, gericht op de kernresourcehiërarchie.

Wanneer u de implementatie van kernresources inschakelt (standaard ingeschakeld), implementeert en beheert de module de volgende resourcetypen:

Bron Azure-resourcetype Terraform-resourcetype
Beheergroepen Microsoft.Management/managementGroups azurerm_management_group
Abonnementen voor beheergroepen Microsoft.Management/managementGroups/subscriptions azurerm_management_group
Beleidstoewijzingen Microsoft.Authorization/policyAssignments azurerm_management_group_policy_assignment
Beleidsdefinities Microsoft.Authorization/policyDefinitions azurerm_policy_definition
Definities van beleidssets Microsoft.Authorization/policySetDefinitions azurerm_policy_set_definition
Roltoewijzingen Microsoft.Authorization/roleAssignments azurerm_role_assignment
Roldefinities Microsoft.Authorization/roleDefinitions azurerm_role_definition

Het exacte aantal resources dat door de module wordt gemaakt, is afhankelijk van de moduleconfiguratie. Voor een standaardconfiguratie kunt u verwachten dat de module ongeveer 180 resources maakt.

Tip

Geen van deze resources wordt geïmplementeerd binnen het abonnementsbereik, maar Terraform vereist nog steeds een abonnement om een geverifieerde sessie met Azure tot stand te brengen. Zie de Azure-provider: Verifiëren bij Azure-documentatie voor meer informatie over verificatie met Azure .

Beheerbronnen

De module biedt een optie voor het inschakelen van de implementatie van beheer- en bewakingsbronnen van de conceptuele architectuur voor Azure-landingszones in het opgegeven abonnement, zoals beschreven op de wikipagina Providerconfiguratie . De module zorgt er ook voor dat het opgegeven abonnement in de juiste beheergroep wordt geplaatst.

Diagram van de conceptuele architectuur van de Azure-landingszone, gericht op de beheerbronnen.

Wanneer u de implementatie van beheerresources inschakelt, implementeert en beheert de module de volgende resourcetypen (afhankelijk van de configuratie):

Bron Azure-resourcetype Terraform-resourcetype
Resourcegroepen Microsoft.Resources/resourceGroups azurerm_resource_group
Log Analytics-werkruimte Microsoft.OperationalInsights/workspaces azurerm_log_analytics_workspace
Log Analytics-oplossingen Microsoft.OperationsManagement/solutions azurerm_log_analytics_solution
Automation-account Microsoft.Automation/automationAccounts azurerm_automation_account
Gekoppelde Log Analytics-service Microsoft.OperationalInsights/workspaces /linkedServices azurerm_log_analytics_linked_service

Naast het implementeren van de bovenstaande resources biedt de module systeemeigen integratie in de bijbehorende beleidstoewijzingen om volledige beleidsnaleving te garanderen.

Zie de wikipagina Beheerresources implementeren voor meer informatie over het gebruik van deze mogelijkheid.

Connectiviteitsbronnen

De module biedt een optie voor het inschakelen van implementatie van netwerktopologie- en connectiviteitsresources vanuit de conceptuele architectuur voor Azure-landingszones in de huidige abonnementscontext. Het zorgt er ook voor dat het opgegeven abonnement in de juiste beheergroep wordt geplaatst.

Met deze mogelijkheid kunt u meerdere hubnetwerken implementeren op basis van elke combinatie van traditionele Azure-netwerktopologie (hub en spoke) en Virtual WAN-netwerktopologie (door Microsoft beheerd).

De module kan ook DDoS-netwerkbeveiliging maken en koppelen aan virtuele netwerken en gecentraliseerde openbare en privé-DNS-zones beheren.

Notitie

We raden momenteel DDoS IP Protection niet aan in Azure Landing Zones en raden u aan deze optie in specifieke omstandigheden te gebruiken. Raadpleeg de productdocumentatie over de vergelijking van de Azure DDoS Protection-SKU

Traditionele Azure-netwerktopologie (hub en spoke)

De module kan eventueel een of meer hubnetwerken implementeren op basis van de traditionele Azure-netwerktopologie (hub en spoke).

Diagram van de conceptuele architectuur van de Azure-landingszone, waarbij u zich richt op de connectiviteitsresources met behulp van een traditionele Azure-netwerktopologie (hub en spoke).

Notitie

De module configureert momenteel alleen de netwerkhub en afhankelijke resources voor het connectiviteitsabonnement. Hoewel er een optie is om uitgaande peering van virtuele netwerken van hub naar spoke in te schakelen, moeten gebruikers nog steeds peering van spoke naar hub initiëren. Dit komt door beperkingen in de wijze waarop de AzureRM-provider zich richt op een specifiek abonnement voor implementatie.

Wanneer u resources implementeert op basis van een traditionele Azure-netwerktopologie (hub en spoke), implementeert en beheert de module de volgende resourcetypen (afhankelijk van de configuratie):

Bron Azure-resourcetype Terraform-resourcetype
Resourcegroepen Microsoft.Resources/resourceGroups azurerm_resource_group
Virtuele netwerken Microsoft.Network/virtualNetworks azurerm_virtual_network
Subnetten Microsoft.Network/virtualNetworks/subnets azurerm_subnet
Virtuele netwerkgateways Microsoft.Network/virtualNetworkGateways azurerm_virtual_network_gateway
Azure-firewalls Microsoft.Network/azureFirewalls azurerm_firewall
Openbare IP-adressen Microsoft.Network/publicIPAddresses azurerm_public_ip
Peerings voor virtuele netwerken Microsoft.Network/virtualNetworks/virtualNetworkPeerings azurerm_virtual_network_peering

Zie de wikipagina Connectiviteitsresources implementeren voor meer informatie over het gebruik van deze mogelijkheid.

Virtual WAN-netwerktopologie (door Microsoft beheerd)

De module kan eventueel een of meer hubnetwerken implementeren op basis van de Virtual WAN-netwerktopologie (door Microsoft beheerd).

Diagram van de conceptuele architectuur van de Azure-landingszone, waarbij u zich richt op de connectiviteitsresources met behulp van een Virtual WAN-netwerktopologie (door Microsoft beheerd).

Notitie

Vanwege de verschillende mogelijkheden van Virtual WAN-netwerkbronnen via traditionele, is peering voor Virtual WAN-spokes bidirectioneel wanneer u deze mogelijkheid gebruikt.

Wanneer u resources implementeert op basis van een Virtual WAN-netwerktopologie (door Microsoft beheerd), implementeert en beheert de module de volgende resourcetypen (afhankelijk van de configuratie):

Bron Azure-resourcetype Terraform-resourcetype
Resourcegroepen Microsoft.Resources/resourceGroups azurerm_resource_group
Virtuele WAN's Microsoft.Network/virtualWans azurerm_virtual_wan
Virtuele hubs Microsoft.Network/virtualHubs azurerm_virtual_hub
ExpressRoute-gateways Microsoft.Network/expressRouteGateways azurerm_express_route_gateway
VPN-gateways Microsoft.Network/vpnGateways azurerm_vpn_gateway
Azure-firewalls Microsoft.Network/azureFirewalls azurerm_firewall
Azure Firewall-beleid Microsoft.Network/firewallPolicies azurerm_firewall_policy
Virtuele hubverbindingen Microsoft.Network/virtualHubs/hubVirtualNetworkConnections azurerm_virtual_hub_connection

Zie de wikipagina Virtual WAN-resources implementeren voor meer informatie over het gebruik van deze mogelijkheid.

DDoS Protection-plan

De module kan eventueel DDoS-netwerkbeveiliging implementeren en virtuele netwerken zo nodig koppelen aan het plan.

Notitie

Vanwege platformbeperkingen kunnen DDoS Protection-abonnementen alleen worden ingeschakeld voor traditionele virtuele netwerken. Ondersteuning voor virtuele hubs is momenteel niet beschikbaar.

Belangrijk

De richtlijnen voor Azure-landingszones raden u aan DDoS-netwerkbeveiliging in te schakelen om de beveiliging van uw Azure-platform te verbeteren. Om onverwachte kosten in niet-productie- en MVP-implementaties te voorkomen, wordt deze mogelijkheid uitgeschakeld in de Terraform-module van Azure-landingszones vanwege de kosten die zijn gekoppeld aan deze resource.

Voor productieomgevingen raden we u ten zeerste aan deze mogelijkheid in te schakelen.

Wanneer u de implementatie van DDoS Protection-planresources inschakelt, implementeert en beheert de module de volgende resourcetypen (afhankelijk van de configuratie):

Bron Azure-resourcetype Terraform-resourcetype
Resourcegroepen Microsoft.Resources/resourceGroups azurerm_resource_group
DDoS Protection-abonnementen Microsoft.Network/ddosProtectionPlans azurerm_network_ddos_protection_plan

DNS

De module kan eventueel Privé-DNS zones implementeren ter ondersteuning van privé-eindpunten en deze koppelen aan hub- en/of spoke-virtuele netwerken. Door de gebruiker opgegeven openbare en privé-DNS-zones kunnen indien nodig ook worden geïmplementeerd en gekoppeld.

Wanneer u de implementatie van DNS-resources inschakelt, implementeert en beheert de module de volgende resourcetypen (afhankelijk van de configuratie):

Bron Azure-resourcetype Terraform-resourcetype
Resourcegroepen Microsoft.Resources/resourceGroups azurerm_resource_group
DNS-zones Microsoft.Network/dnsZones azurerm_dns_zone
Privé-DNS-zones Microsoft.Network/privateDnsZones azurerm_private_dns_zone
Privé-DNS Zone Virtual Network Link Microsoft.Network/privatednszones/virtualnetworklinks azurerm_private_dns_zone_virtual_network_link

Identiteitsbronnen

De module biedt een optie voor het configureren van beleidsregels met betrekking tot de landingszone voor identiteits- en toegangsbeheer . Het zorgt er ook voor dat het opgegeven abonnement in de juiste beheergroep wordt geplaatst.

Diagram van de conceptuele architectuur van de Azure-landingszone, waarbij u zich richt op de identiteitsbronnen.

Notitie

Met deze mogelijkheid worden geen resources geïmplementeerd. Als u beleidsinstellingen met betrekking tot de identiteitsbeheergroep wilt bijwerken, gebruikt u de configure_identity_resources invoervariabele.

Zie de wikipagina Identity Resources implementeren voor meer informatie over het gebruik van deze mogelijkheid.

Aan de slag

Vereisten voor het aan de slag gaan met de module worden beschreven op de pagina Aan de slag-wiki .

Ter vereenvoudiging van de introductie is de module gepubliceerd naar het Terraform-register. U kunt er rechtstreeks in uw code naar verwijzen, zoals wordt weergegeven in het eenvoudige voorbeeld verderop in dit artikel. Als deze wordt uitgevoerd terraform init , worden de module en alle afhankelijkheden automatisch gedownload.

U kunt de meest recente module- en providerafhankelijkheden bekijken op het tabblad Afhankelijkheden in het Terraform-register.

Belangrijk

Er zijn bekende problemen met sommige combinaties van Terraform- en AzureRM-providerversies. U kunt enkele bekende problemen oplossen door een upgrade uit te voeren naar de nieuwste versies van Terraform en AzureRM-providers. Andere bekende problemen zijn tijdelijke fouten die u doorgaans kunt oplossen door uw implementatie opnieuw uit te voeren.

Over het algemeen raden we u aan om specifieke versies vast te maken en grondig te testen voordat u een upgrade uitvoert.

Er worden nieuwe versies van de module uitgebracht wanneer er wijzigingen nodig zijn. Nieuwe releases zorgen voor compatibiliteit met de nieuwste versies van Terraform en AzureRM-providers. Raadpleeg onze richtlijnen voor modulereleases voor meer informatie.

Als u de nieuwste functies wilt ophalen, moet u ervoor zorgen dat de moduleversie is ingesteld op de nieuwste versie. Als u een upgrade uitvoert naar een latere versie van de module, voert u deze uit terraform init -upgrade.

GitHub-release (nieuwste SemVer)

Eenvoudig voorbeeld

Met deze voorbeeldcode wordt de minimaal aanbevolen beheergroep en abonnementsorganisatie geïmplementeerd vanuit de referentiearchitectuur op ondernemingsniveau. Nadat u dit eenvoudige voorbeeld hebt uitgevoerd, kunt u beginnen met het aanpassen van uw implementatie.

Tip

root_parent_id Hoewel de module de enige verplichte variabele is, raden we u ook aan de instelling in te stellenroot_id. Als u de root_id waarde wijzigt, wordt een volledige herverdeling gestart van alle resources die door de module worden beheerd, inclusief downstreamafhankelijkheden.

De volgende code is een eenvoudige beginconfiguratie voor uw main.tf hoofdmodule:

# 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

}

Volgende stappen

De Terraform-module voor Cloud Adoption Framework Enterprise-scale biedt een versneld pad om uw landingszones op ondernemingsniveau uit te bouwen. Het biedt ook de flexibiliteit om uw implementatie uit te breiden en aan te passen, met behoud van een vereenvoudigde benadering voor het beheren van de configuratie van elke landingszone.

Raadpleeg de module in terraform Registry en bekijk de documentatie over de module op GitHub voor meer informatie. In de documentatie vindt u meer voorbeelden en zelfstudies over het aanpassen van uw implementatie.

Meer informatie over het implementeren van de Terraform-module van Azure-landingszones via HashiCorp Learn. Hier kunt u ook ontdekken hoe sommige onderdelen van de module werken.