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:
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.
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.
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).
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).
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.
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
.
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.