Módulo Terraform das zonas de destino do Azure

O Azure fornece serviços nativos para a criação das suas zonas de destino do Azure. Outras ferramentas também podem ajudar nessa questão. Uma ferramenta que clientes e parceiros costumam usar para implantar zonas de destino é o Terraform da HashiCorp.

A implantação de recursos para zonas de destino do aplicativo está fora do escopo do módulo. As decisões sobre o método de implantação e as ferramentas são para a equipe responsável pelo aplicativo.

O módulo Terraform de zonas de destino do Azure fornece uma implementação rápida dos recursos de plataforma necessários para gerenciar zonas de destino do Azure em escala usando o Terraform. O módulo foi projetado para simplificar a implantação da hierarquia, das políticas e dos recursos do grupo de gerenciamento nas assinaturas de conectividade e gerenciamento.

Pré-requisitos

Se você é novo no Terraform e deseja informações sobre como instalá-lo e usá-lo, consulte o tutorial Instalar o Terraform no HashiCorp Learn.

Para obter informações sobre como configurar o provedor Terraform e autenticar com o Azure, consulte os guias do provedor AzureRM no site do Terraform. Para saber como configurar o provedor para implantação em várias assinaturas, consulte a página wiki Configuração do provedor.

Importância de usar módulos padrão

A reutilização de componentes é um princípio fundamental da infraestrutura como código. Os módulos são instrumentais para definir padrões e consistência em toda a implantação de recursos em e entre ambientes.

O módulo Terraform de zonas de destino do Azure é publicado no Registro oficial do Terraform e é verificado pela HashiCorp.

A implantação do módulo do Registro do Terraform fornece o seguinte:

  • Uma entrega acelerada de zonas de destino do Azure em seu ambiente.
  • Um caminho de atualização testado para a versão mais recente do módulo, além de um controle de versão rigoroso.

Benefícios do uso do módulo

Os benefícios de usar o módulo do Terraform de zonas de destino do Azure incluem o seguinte:

  • Uma hierarquia de recursos principais gerenciada e extensível para a organização de assinaturas por meio de grupos de gerenciamento.
  • Conformidade e governança de segurança escaláveis por meio de controles de IAM (gerenciamento de acesso e identidade) do Azure, com uma extensa biblioteca de definições personalizadas prontas para atribuição.
  • Aplicação da política nas assinaturas por meio da herança do grupo de gerenciamento.
  • Recursos gerenciados para zonas de destino de gerenciamento e conectividade. Esses recursos fornecem:
    • Conformidade de política garantida por meio da integração total de recursos gerenciados pelo módulo e atribuições de política correspondentes.
    • Integração entre recursos para reduzir a sobrecarga de gerenciamento e fornecer uma experiência de usuário aprimorada, como a criação automática de links de rede virtual para o DNS privado do Azure.

Dica

A biblioteca de modelos é atualizada programaticamente do repositório GitHub do Azure/Enterprise-Scale . Para se manter atualizado com a configuração, as políticas e as funções de arquétipo mais recentes, verifique se você está usando a versão mais recente do módulo.

Implantação de recursos

É possível configurar o módulo para implantar conjuntos de recursos alinhados às seguintes áreas de design críticas nas zonas de destino do Azure. Personalize esses recursos para atender aos requisitos de sua organização.

Categoria de recurso Área de design crítica
Recursos principais Organização de recursos
Governança de segurança
Recursos de gerenciamento Gerenciamento e monitoramento
Recursos de conectividade Topologia de rede e conectividade
Recursos de identidade Gerenciamento de identidade e acesso

Empacotar esses recursos em um único módulo do Terraform facilita a criação e a imposição de consistência em toda a plataforma do Azure ao operar em escala.

Esses recursos se alinham à arquitetura conceitual de zonas de destino do Azure:

Diagrama da arquitetura conceitual de zonas de destino do Azure.

Você pode implantar esses recursos, por funcionalidade, em várias assinaturas usando a Configuração do Provedor no bloco de módulos.

As seções a seguir descrevem os tipos de recursos e as opções de configuração.

Recursos principais

A funcionalidade principal deste módulo implanta as bases da arquitetura conceitual para zonas de destino do Azure, com foco na organização central de recursos.

Diagrama da arquitetura conceitual de zonas de destino do Azure, com foco na hierarquia de recursos principais.

Ao habilitar a implantação de recursos principais (habilitada por padrão), o módulo implanta e gerencia os seguintes tipos de recursos:

Recurso Tipo de recurso do Azure Tipo de recurso do Terraform
Grupos de gerenciamento Microsoft.Management/managementGroups azurerm_management_group
Assinaturas do grupo de gerenciamento Microsoft.Management/managementGroups/subscriptions azurerm_management_group
Atribuições de política Microsoft.Authorization/policyAssignments azurerm_management_group_policy_assignment
Definições de política Microsoft.Authorization/policyDefinitions azurerm_policy_definition
Definições do conjunto de políticas Microsoft.Authorization/policySetDefinitions azurerm_policy_set_definition
Atribuições de função Microsoft.Authorization/roleAssignments azurerm_role_assignment
Definições de função Microsoft.Authorization/roleDefinitions azurerm_role_definition

O número exato de recursos que o módulo cria depende da configuração do módulo. Para uma configuração padrão, o módulo provavelmente criará cerca de 180 recursos.

Dica

Nenhum desses recursos é implantado no escopo da assinatura, mas o Terraform ainda requer uma assinatura para estabelecer uma sessão autenticada com o Azure. Para obter mais informações sobre como autenticar com o Azure, consulte a documentação do Provedor do Azure: Autenticando no Azure .

Recursos de gerenciamento

O módulo fornece uma opção para habilitar a implantação de recursos de gerenciamento e monitoramento da arquitetura conceitual para zonas de destino do Azure na assinatura especificada, conforme descrito na página wiki Configuração do Provedor. O módulo também garante que a assinatura especificada seja colocada no grupo de gerenciamento correto.

Diagrama da arquitetura conceitual de zonas de destino do Azure, com foco nos recursos de gerenciamento.

Ao habilitar a implantação de recursos de gerenciamento, o módulo implanta e gerencia os seguintes tipos de recursos (dependendo da configuração):

Recurso Tipo de recurso do Azure Tipo de recurso do Terraform
Grupos de recursos Microsoft.Resources/resourceGroups azurerm_resource_group
Espaço de Trabalho do Log Analytics Microsoft.OperationalInsights/workspaces azurerm_log_analytics_workspace
Soluções do Log Analytics Microsoft.OperationsManagement/solutions azurerm_log_analytics_solution
Conta de automação Microsoft.Automation/automationAccounts azurerm_automation_account
Serviço vinculado ao Log Analytics Microsoft.OperationalInsights/workspaces /linkedServices azurerm_log_analytics_linked_service

Além de implantar os recursos acima, o módulo fornece integração nativa nas atribuições de política correspondentes para garantir a conformidade total da política.

Para obter mais informações sobre como usar esse recurso, consulte a página wiki Implantar recursos de gerenciamento.

Recursos de conectividade

O módulo fornece uma opção para habilitar a implantação de topologia de rede e recursos de conectividade da arquitetura conceitual para zonas de destino do Azure no contexto de assinatura atual. Ele também garante que a assinatura especificada seja colocada no grupo de gerenciamento correto.

Esse recurso permite a implantação de diversas redes de hub com base em qualquer combinação de topologia de rede tradicional do Azure (hub e spoke) e Topologia de rede WAN virtual (gerenciada pela Microsoft).

O módulo também pode criar e vincular a proteção de rede DDoS a redes virtuais e gerenciar zonas DNS públicas e privadas centralizadas.

Observação

No momento, não recomendamos a Proteção de IP contra DDoS nas Zonas de Destino do Azure e recomendamos usar essa opção em circunstâncias específicas. Examine a documentação do produto Sobre a comparação de SKUs da Proteção contra DDoS do Azure

Topologia de rede tradicional do Azure (hub e spoke)

O módulo pode, opcionalmente, implantar uma ou mais redes de hub com base na topologia de rede tradicional do Azure (hub e spoke).

Diagrama da arquitetura conceitual de zonas de destino do Azure, com foco nos recursos de conectividade que usam uma topologia de rede tradicional do Azure (hub e spoke).

Observação

No momento, o módulo só configura o hub de rede e os recursos dependentes para a assinatura de conectividade. Embora haja uma opção para habilitar o emparelhamento de rede virtual de saída de hub para spoke, os usuários ainda precisam iniciar o emparelhamento de spoke para hub. Isso se deve a limitações do provedor AzureRM ao direcionar uma assinatura específica para implantação.

Ao implantar recursos com base em uma topologia de rede tradicional do Azure (hub e spoke), o módulo implanta e gerencia os seguintes tipos de recursos (dependendo da configuração):

Recurso Tipo de recurso do Azure Tipo de recurso do Terraform
Grupos de recursos Microsoft.Resources/resourceGroups azurerm_resource_group
Redes virtuais Microsoft.Network/virtualNetworks azurerm_virtual_network
Sub-redes Microsoft.Network/virtualNetworks/subnets azurerm_subnet
Gateways de rede virtual Microsoft.Network/virtualNetworkGateways azurerm_virtual_network_gateway
Firewalls do Azure Microsoft.Network/azureFirewalls azurerm_firewall
Endereços IP públicos Microsoft.Network/publicIPAddresses azurerm_public_ip
Emparelhamentos de rede virtual Microsoft.Network/virtualNetworks/virtualNetworkPeerings azurerm_virtual_network_peering

Para obter mais informações sobre como usar esse recurso, consulte a página wiki Implantar recursos de conectividade.

Topologia de rede de WAN Virtual (gerenciada pela Microsoft)

O módulo pode, opcionalmente, implantar uma ou mais redes de hub com base na topologia de rede WAN Virtual (gerenciada pela Microsoft).

Diagrama da arquitetura conceitual de zonas de destino do Azure, com foco nos recursos de conectividade que usam uma topologia de rede WAN Virtual (gerenciada pela Microsoft).

Observação

Devido às diferentes capacidades dos recursos de rede WAN Virtual em relação aos tradicionais, o emparelhamento de spokes de WAN Virtual é bidirecional ao usar esse recurso.

Ao implantar recursos com base em uma topologia de rede WAN Virtual (gerenciada pela Microsoft), o módulo implanta e gerencia os seguintes tipos de recursos (dependendo da configuração):

Recurso Tipo de recurso do Azure Tipo de recurso do Terraform
Grupos de Recursos Microsoft.Resources/resourceGroups azurerm_resource_group
WANs Virtuais Microsoft.Network/virtualWans azurerm_virtual_wan
Hubs Virtuais Microsoft.Network/virtualHubs azurerm_virtual_hub
Gateways do Express Route Microsoft.Network/expressRouteGateways azurerm_express_route_gateway
Gateways VPN Microsoft.Network/vpnGateways azurerm_vpn_gateway
Firewalls do Azure Microsoft.Network/azureFirewalls azurerm_firewall
Políticas de Firewall do Azure Microsoft.Network/firewallPolicies azurerm_firewall_policy
Conexões de hub virtual Microsoft.Network/virtualHubs/hubVirtualNetworkConnections azurerm_virtual_hub_connection

Para obter mais informações sobre como usar esse recurso, consulte a página wiki Implantar recursos de WAN virtual.

Plano de Proteção contra DDoS

Opcionalmente, o módulo pode implantar a Proteção de Rede DDoS e vincular Redes Virtuais ao plano, se necessário.

Observação

Devido às limitações da plataforma, os planos de Proteção contra DDoS só podem ser habilitados para redes virtuais tradicionais. O suporte ao hub virtual não está disponível no momento.

Importante

As diretrizes de zonas de destino do Azure recomendam habilitar a Proteção de Rede DDoS para aumentar a proteção de sua plataforma do Azure. Para evitar custos inesperados em implantações que não são de produção e de MVP, esse recurso é desabilitado no módulo do Terraform de zonas de destino do Azure devido ao custo associado a ele.

Para ambientes de produção, é altamente recomendável habilitar esse recurso.

Ao habilitar a implantação de recursos do plano de Proteção contra DDoS, o módulo implanta e gerencia os seguintes tipos de recursos (dependendo da configuração):

Recurso Tipo de recurso do Azure Tipo de recurso do Terraform
Grupos de recursos Microsoft.Resources/resourceGroups azurerm_resource_group
Planos de Proteção contra DDoS Microsoft.Network/ddosProtectionPlans azurerm_network_ddos_protection_plan

DNS

O módulo pode, opcionalmente, implantar zonas DNS privadas para dar suporte a pontos de extremidade privados e vinculá-las a redes virtuais hub e/ou spoke. As zonas DNS públicas e privadas especificadas pelo usuário também podem ser implantadas e vinculadas conforme necessário.

Ao habilitar a implantação de recursos de DNS, o módulo implanta e gerencia os seguintes tipos de recursos (dependendo da configuração):

Recurso Tipo de recurso do Azure Tipo de recurso do Terraform
Grupos de Recursos Microsoft.Resources/resourceGroups azurerm_resource_group
Zonas DNS Microsoft.Network/dnsZones azurerm_dns_zone
Zonas DNS Privadas Microsoft.Network/privateDnsZones azurerm_private_dns_zone
Link de rede virtual de zona DNS privada Microsoft.Network/privatednszones/virtualnetworklinks azurerm_private_dns_zone_virtual_network_link

Recursos de identidade

O módulo fornece uma opção para configurar políticas relacionadas à zona de destino de gerenciamento de identidade e acesso. Ele também garante que a assinatura especificada seja colocada no grupo de gerenciamento correto.

Diagrama da arquitetura conceitual de zonas de destino do Azure, com foco nos recursos de identidade.

Observação

Essa capacidade não implanta nenhum recurso. Para atualizar as configurações de política relacionadas ao grupo de gerenciamento de identidades, use a variável de entrada configure_identity_resources.

Para obter mais informações sobre como usar esse recurso, consulte a página wiki Implantar recursos de identidade.

Introdução

Os requisitos para começar a usar o módulo estão documentados na página Wiki de introdução .

Para simplificar o início, o módulo foi publicado no Terraform Registry. É possível referenciá-lo diretamente em seu código, conforme mostrado no exemplo simples mais adiante neste artigo. A execução do terraform init baixará automaticamente o módulo e todas as dependências.

Você pode exibir as dependências mais recentes do módulo e do provedor na guia Dependências no Registro do Terraform.

Importante

Há problemas conhecidos com algumas combinações de versão do provedor do Terraform e do AzureRM. Você pode resolver alguns problemas conhecidos atualizando para as versões mais recentes do provedor do Terraform e do AzureRM. Outros problemas conhecidos são erros temporários que normalmente podem ser corrigidos executando novamente a implantação.

Geralmente, é recomendável marcar versões específicas e testar minuciosamente antes de atualizar.

Novas versões do módulo serão lançadas quando alterações forem necessárias. Os novos lançamentos garantirão a compatibilidade com as versões mais recentes do Terraform e do provedor AzureRM. Consulte nossas diretrizes de versões de módulos para obter mais informações.

Para obter os recursos mais recentes, verifique se a versão do módulo está configurada como a mais recente. Se você estiver atualizando para uma versão posterior do módulo, execute terraform init -upgrade.

Versão do GitHub (SemVer mais recente)

Exemplo simples

Este código de exemplo implanta o grupo de gerenciamento mínimo recomendado e a organização de assinatura da arquitetura de referência de escala empresarial. Depois de colocar esse exemplo simples em execução, será possível começar a personalizar sua implantação.

Dica

Apesar de root_parent_id ser a única variável obrigatória do módulo, também recomendamos a configuração do root_id. Alterar o valor root_id iniciará uma reimplantação completa de todos os recursos que o módulo gerencia, incluindo dependências downstream.

O código a seguir é uma configuração inicial simples para o módulo raiz 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

}

Próximas etapas

O módulo Terraform para Cloud Adoption Framework em escala empresarial fornece um caminho acelerado para criar suas zonas de destino em escala empresarial. Ele também fornece a flexibilidade para expandir e personalizar sua implantação, mantendo uma abordagem simplificada para gerenciar a configuração de cada zona de destino.

Para saber mais, revise o módulo no Terraform Registry e explore a documentação do módulo no GitHub. Na documentação, você encontra mais exemplos e tutoriais sobre como personalizar sua implantação.

Saiba como implantar o módulo Terraform de zonas de destino do Azure por meio do HashiCorp Learn. Lá, também é possível descobrir como algumas partes do módulo funcionam.