DIgilife - stock.adobe.com

Domänenbeitritte für Azure-VMs mit Terraform automatisieren

Optimieren Sie die Bereitstellung von Windows-VMs in Azure und verbinden Sie diese dann mithilfe von Terraform in Kombination mit Azure Key Vault sicher mit der lokalen AD-Domäne.

Mit dem Wachstum der Infrastruktur steigt auch die Komplexität. Die Automatisierung mit Tools wie Terraform bietet IT-Teams die Möglichkeit, effizienter zu skalieren, ohne den Betriebsaufwand zu erhöhen.

Das Ziel jedes automatisierten Bereitstellungsprozesses, wie beispielsweise der Verwendung von Terraform zur Konfiguration eines Windows-Servers in Azure, besteht darin, so viele Konfigurationsaufgaben wie möglich zu automatisieren, um die Einrichtung der Infrastruktur zu optimieren. In einer Active Directory-Umgebung (AD) ist die Einbindung dieser neuen Server in die Domäne ein entscheidender Schritt, um die Verwaltung mit zentralisierten Tools zu ermöglichen, die Sicherheit zu gewährleisten und die Governance zu aktivieren.

In diesem Artikel wird erläutert, wie Sie mit Terraform nicht nur eine Windows-VM (virtuelle Maschine) in Azure bereitstellen, sondern diese auch automatisch in eine lokale AD-Domäne einbinden können, um sicherzustellen, dass die VM sofort einsatzbereit ist. Dieser Automatisierungsprozess umfasst auch die Verwendung von Azure Key Vault, um die Serverkonfiguration sicher durchzuführen.

So funktioniert die Automatisierung der Domänenanbindung mit Terraform

Der Prozess des Domänenbeitritts wird häufig mit einem Konfigurationsmanagement-Tool wie Ansible, Puppet, Saltstack oder Chef abgewickelt. Als beliebtes Infrastructure-as-Code-Tool (IaC) ermöglicht Ihnen Terraform jedoch, die Infrastruktur in einem deklarativen Format zu beschreiben und sie dann mit minimalem manuellem Aufwand bereitzustellen. Dies wirft die Frage auf: Sollte Ihr Konfigurationsmanagement-Tool die Domänenanbindung übernehmen oder sollte Ihr IaC-Tool dies während der Bereitstellung übernehmen?

Obwohl Terraform nicht für detaillierte Konfigurationsaufgaben wie die Domänenbeitritt konzipiert ist, kann es zu diesem Zweck Azure VM-Erweiterungen verwenden. Insbesondere kann JsonADDomainExtension verwendet werden, um die VM nach der Bereitstellung automatisch in die AD-Domäne einzubinden. Mit diesem Ansatz können Sie sowohl die Bereitstellung der VM als auch die Ausführung des Domänenbeitritts mit Terraform statt mit mehreren Tools durchführen, um den Prozess zu vereinfachen und die Konsistenz zwischen den Umgebungen zu gewährleisten.

Bereitstellung einer Windows-VM in Azure mit Terraform

Bevor wir die Azure-VM-Erweiterung für die Domänenbeitritt konfigurieren, stellen wir die VM mit Terraform bereit. Beginnen Sie mit der Definition des Azure-Anbieters.

provider „azurerm“ {
  features {}
}

Als Nächstes verbinden Sie die VM mit einem Subnetz mit DNS-Einstellungen, die auf den Domänencontroller und die richtigen offenen Ports verweisen. Für dieses Tutorial gehen wir davon aus, dass das konfigurierte Subnetz vorhanden ist, sodass wir es mit einem Datenblock importieren.

data „azurerm_subnet“ ‚example‘ {
  name                 = „Subnet Name“
  virtual_network_name = „vNet Name“
  resource_group_name  = var.resource_group_name
}

Erstellen Sie als Nächstes eine Netzwerkkarte (Network Interface Card, NIC) und verbinden Sie sie mit dem Azure-Subnetz. Stellen Sie dann eine Windows Server-VM in Azure bereit. Der Code verbindet die VM mit der Netzwerkkarte, damit sie im privaten Netzwerk mit dem Domänencontroller kommunizieren kann.

resource „azurerm_network_interface“ ‚example‘ {
  name                = „${var.name}-nic“
  location            = var.location
  resource_group_name = var.resource_group_name
ip_configuration {
    name                          = „internal“
    subnet_id                     = data.azurerm_subnet.example.id
    private_ip_address_allocation = „Dynamic“
  }
}

resource ‚azurerm_windows_virtual_machine‘ „example“ {
  name                = var.name
resource_group_name = var.resource_group_name
  location            = var.location
  size                = „Standard_F2“
  admin_username      = „adminuser“
  admin_password      = var.admin_password
network_interface_ids = [
    azurerm_network_interface.example.id,
  ]
os_disk {
    caching              = „ReadWrite“
    storage_account_type = „Standard_LRS“
  }

  source_image_reference {
    publisher = „MicrosoftWindowsServer“
    offer     = ‚WindowsServer‘
    sku       = „2025-Datacenter“
    version   = „latest“
  }
}

Die Netzwerkkarte erhält ihren Namen vom Namen der VM. Diese Namenskonvention verdeutlicht die Zuordnung zwischen der Netzwerkkarte und ihrer VM und reduziert die Anzahl der Variablen in der Terraform-Konfiguration.

Verwenden Sie als Nächstes den folgenden Terraform-Code, um die Azure-VM-Erweiterung JsonADDomainExtension hinzuzufügen, die eine Windows-VM in Azure automatisch mit der AD-Domäne verbindet:

resource „azurerm_virtual_machine_extension“ „example“ {
name                 = „DomainJoin“
  virtual_machine_id   = azurerm_windows_virtual_machine.example.id
publisher            = „Microsoft.Compute“
type                 = ‚JsonADDomainExtension‘
type_handler_version = „1.3“



settings = <<SETTINGS
{
„Name”: „domain.com”,
      „OUPath”: „OU=Servers,DC=domain,DC=com”,
      „User”: „domain\${var.domain_join_user}”,
      „Restart”: „true”,
      „Options”: „3”
    }
SETTINGS
  protected_settings = <<PROTECTED_SETTINGS
    {
      „Password”: „${var.domain_join_password}”
    }
  PROTECTED_SETTINGS
}

Diese Erweiterung ist über die Eigenschaft virtual_machine_id mit der VM verknüpft, die auf die ID der bereitgestellten VM verweist.

Die domänenbezogenen Einstellungen befinden sich in den Abschnitten settings und protected_settings. Für Ihre Domäne müssen Sie die folgenden Einstellungen ersetzen oder Variablen verwenden:

  • domain.com: Ersetzen Sie dies durch den AD-Domänennamen.
  • OU=Servers, DC=domain, DC=com: Ersetzen Sie dies durch die Organisationseinheit (OU), zu der Sie den Server hinzufügen möchten.
  • Ersetzen Sie in der Zeile User domain durch den Kurznamen der Anmeldedomäne.

Sichere Verwaltung von Anmeldeinformationen für die Domänenbeitritt mit Azure Key Vault

Es ist wichtig zu verstehen, dass bei der vorherigen Konfiguration das Kennwort als Variable übergeben werden muss. Dieser Wert muss entweder in einer .tfvars-Datei enthalten sein oder als Parameter an die ausführbare Terraform-Datei übergeben werden.

Es gibt mehrere Möglichkeiten, beide Ansätze zu realisieren, aber bei der Arbeit in Azure wird empfohlen, das Kennwort in Azure Key Vault zu verwalten. Angenommen, die Identität, die zum Bereitstellen der Konfiguration verwendet wird, hat Lesezugriff auf Geheimnisse in Azure Key Vault, rufen Sie das Passwort mithilfe von Terraform-Datenblöcken ab und übergeben Sie es an die Erweiterung domain-join.

data „azurerm_key_vault“ ‚example‘ {
name                = „example-keyvault“
resource_group_name = var.resource_group_name
}

data „azurerm_key_vault_secret“ „domain-join-pw“ {
  name         = „domain-join-pw“
  key_vault_id = data.azurerm_key_vault.example.id
}

resource ‚azurerm_virtual_machine_extension‘ „example“ {
name                 = „DomainJoin“
  virtual_machine_id   = azurerm_windows_virtual_machine.example.id
publisher            = „Microsoft.Compute“
type                 = ‚JsonADDomainExtension‘
type_handler_version = „1.3“

settings = <<SETTINGS
    {
„Name“: „domain.com“,
      „OUPath“: „OU=Servers,DC=domain,DC=com“,
      „User“: „domain\${var.domain_join_user}“,
      „Restart“: „true“,
      ‚Options‘: „3“
    }
SETTINGS

  protected_settings = <<PROTECTED_SETTINGS
    {
      „Password“: „${data.azurerm_key_vault_secret.domain-join-pw.value}“|
    }
  PROTECTED_SETTINGS
}

Im Skript verweist die Erweiterung auf einen geheimen Schlüssel namens domain-join-pw im Azure Key Vault mit dem Namen example-keyvault. Der Code ruft das Passwort sicher ab und übergibt es mithilfe des Blocks protected_settings an die VM-Erweiterung, um die Verschlüsselung während der Bereitstellung sicherzustellen.

So testen Sie die Domänenbeitritt der Azure-VM

Nachdem Sie die Terraform-Konfiguration ausgeführt und die VM bereitgestellt haben, überprüfen Sie den Domänenbeitrittsstatus im Azure-Portal.

  • Navigieren Sie zur VM.
  • Erweitern Sie den Bereich Settings.
  • Klicken Sie auf Extensions + applications.
Mit Terraform VM in Azure bereitstellen
Abbildung 1: Überprüfen Sie im entsprechenden Abschnitt des Azure-Portals, ob die VM erfolgreich der Active Directory-Domäne beigetreten ist.

Klicken Sie auf die Erweiterung DomainJoin, um ein modales Fenster zu öffnen und den Status zu überprüfen.

Wenn die Meldung Join completed nicht angezeigt wird, wird empfohlen, eine Verbindung zur VM herzustellen und den Fehler bei der Anbindung zur Domäne mithilfe der Standard-Windows-Diagnose zu beheben. Nachdem Sie die Ursache ermittelt haben, müssen Sie möglicherweise DNS oder Netzwerksicherheitsgruppen anpassen, wenn Sie Netzwerksicherheitsregeln eingerichtet haben.

Windows-VM-Bereitstellungen mit Domänenbeitritten skalieren

Es ist ganz einfach, mehrere domänengebundene Windows-VMs mithilfe von Terraform-Modulen bereitzustellen.

Die in früheren Beispielen verwendete Konfiguration kann in ein Terraform-Modul konvertiert werden, indem Parameter hinzugefügt werden, um fest codierte Werte zu reduzieren. Nachdem Sie das Modul definiert haben, erstellen Sie eine neue VM, indem Sie das Modul aufrufen. Das folgende Beispiel zeigt, wie Sie das Modul aufrufen.

module „windowsvm-01“ {
  source               = „./modules/windowsvm“
  name                 = „windowsvm-01“
resource_group_name  = „rg-01“
  location             = „East US“
  admin_pw_secret_name = „admin-pw“
  domain_join_user     = ‚domainuser‘
  size                 = „Standard_F2“
}

Um eine weitere VM zu erstellen, kopieren Sie den Modulblock und aktualisieren Sie die entsprechenden Werte, zum Beispiel den Namen der VM, die Ressourcengruppe oder die Größe.

Sichere Skalierung der Infrastruktur durch Automatisierung

Die automatisierte Bereitstellung von Windows-VMs und die Domänenanbindung sparen Administratoren nicht nur viel Zeit und Aufwand, sondern gewährleisten auch die Konsistenz der Konfigurationen in der gesamten Domäne. Durch die Kombination von Terraform-Modulen und Azure Key Vault zur Verwaltung sensibler Anmeldeinformationen lässt sich dieser Prozess sicher skalieren. Dieser Ansatz reduziert den manuellen Aufwand, der zu Fehlern führen kann, und trägt zur Durchsetzung von IaC-Best Practices bei.

Erfahren Sie mehr über Cloud Computing