greenbutterfly - stock.adobe.com

Active-Directory-Konfigurationen mit Terraform automatisieren

Die Open-Source-Lösung Terraform unterstützt nicht nur bei der Verwaltung in der Cloud, sondern automatisiert auch Active-Directory-Prozesse. Der Beitrag zeigt das Vorgehen.

Mit Terraform können Administratoren die Konfiguration von Cloud-Umgebungen automatisieren. Das Programm unterstützt aber nicht nur Cloud-Umgebungen, sondern auch die Automatisierung von Active-Directory-Konfigurationen.

Mit der Infrastructure-as-Code-Lösung (IaC) von Hashicorp können Admins deklarativ eine Umgebung beschreiben. Auf Basis der Beschreibung baut Terraform die Umgebung so auf wie gefordert. Dabei ist es möglich, einen Standard zu definieren, den Terraform bei Bedarf wiederherstellt. Admins legen in einer Datei fest, wie die AD-Struktur aussehen soll und Terraform legt diese genauso an, ohne das manuelle Eingriffe notwendig sind. Das minimiert fehlerhafte Konfigurationen, sorgt für eine standardisierte Konfiguration und beschleunigt die Bereitstellung von Objekten.

Terraform lässt sich in diesem Zusammenhang mit Entwicklungsumgebungen wie Visual Studio integrieren. In der Dokumentation von Terraform sind verschiedene Beispiele zu finden, wie sich Konfigurationsdateien aufbauen lassen.

Skripten von Einstellungen in Cloud-Umgebungen und Active-Directory-Konfigurationen
Abbildung 1: Terraform ermöglicht das Skripten von Einstellungen in Cloud-Umgebungen und Active-Directory-Konfigurationen.

Terraform steht kostenlos als Community-Edition für bis zu 500 Ressourcen zur Verfügung. Wer das Produkt in größeren Umgebungen einsetzt, kann die Enterprise-Version nutzen. Ebenfalls verfügbar sind die Cloud-Editionen Standard und Plus.

Die beiden wichtigsten HashiCorp-Tools Terraform und Vagrant stehen in Zukunft unter der Business Source License (BSL). Bisher wurden die Produkte nach der Mozilla Public License (MPL) lizenziert. Damit handelt es sich bei Terraform nicht mehr um eine reine Open-Source-Lizenz. Der Quellcode ist zwar weiterhin frei verfügbar, in Zukunft muss man aber mit Einschränkungen bei der kommerziellen Nutzung rechnen.

Einstieg in Terraform

Terraform kann parallel für die Automatisierung in der Cloud, in Container-Umgebungen und in lokalen Netzwerken zum Einsatz kommen. Dadurch lassen sich komplexe Umgebungen mit wenigen Mausklicks erstellen. Der Einstieg in das Tool ist nicht schwer.

IaC gehört mittlerweile zu den Standards in Cloud-Umgebungen, um viele verschiedene Ressourcen mit deklarativem Programmcode zu erstellen. Daher kommt Terraform oft für die automatisierte Konfiguration von Container-Umgebungen wie Kubernetes in Frage. Die Erstellung der Konfigurationsdateien erfolgt mit der Hashicorp Configuration Language (HCL) und JSON. Die damit erstellten Konfigurationsdateien stellen die Baupläne einer Cloud-Infrastruktur, eines hybriden Netzwerks oder von Active-Directory-Umgebungen dar. Terraform kann ebenso in privaten Clouds verwendet werden und zum Beispiel VMs mit VMware vSphere oder Ressourcen in OpenStack zu erstellen. Dabei ist es möglich, Multi-Cloud-Umgebungen, hybride Netzwerke und einen Mischbetrieb von verschiedenen Infrastrukturen mit Terraform zu steuern.

Terraform kann Umgebungen erstellen, aber auch Änderungen in vorhandenen Umgebungen automatisieren. Auf Anforderungen kann Terraform Objekte und Ressourcen löschen und neu erstellen, wenn diese nicht dem vordefinierten Standard entsprechen. Fehlen in einer Umgebung Objekte und Ressourcen, die in den Beschreibungsdaten hinterlegt sind, fügt Terraform diese hinzu, ohne die vorhandenen Objekte zu ändern. Nicht konforme Objekte lassen sich löschen, wenn das notwendig ist.

Terraform für Active Directory nutzen

Terraform lässt sich mit Windows, Linux und macOS einsetzen. Dazu steht der Befehl terraform.exe für Befehlszeile/Terminal und Shell zur Verfügung. Die Enterprise-Version bietet eine grafische Oberfläche. Die Terraform-Version lässt sich mit terraform -v anzeigen. Durch die Eingabe von terraform oder terraform -help zeigt das Tool alle zur Verfügung stehenden Optionen an.

Außerdem ist in Terraform eine Hilfe für die verschiedenen Parameter integriert. Anwender können sich für jeden Parameter eine Hilfe anzeigen, zum Beispiel mit terrafrom -help plan. Skriptdateien für Terraform lassen sich zunächst mit terraform init initialisieren. Der Befehl terraform plan überprüft die Syntax der angegebenen Skriptdateien zum Erstellen auf Plausibilität. Passt alles, lässt sich dies mit terraform apply umsetzen. Ist eine Umgebung bereits vorhanden und soll auf Basis der Skriptdateien nur aktualisiert werden, geht das mit terraform refresh. Der Befehl terraform destroy macht Änderungen rückgängig und löscht gegebenenfalls die darauf erstellten Objekten.

Initialisierung von Terraform
Abbildung 2: Terraform wird initialisiert.

Terraform bietet ebenfalls eine Erweiterung für Active Directory. Mit dem AD-Provider können Admins die Erstellung, Anpassung und Verwaltung von Benutzern, Gruppen, Organisationseinheiten (OUs) oder Gruppenrichtlinien automatisieren. Zum Einsatz kommt hier WinRM, mit dem Terraform eine Verbindung zu AD aufbaut. Beispiele sind das automatisierte Anlegen von OUs, inklusive Benutzer und Gruppen sowie Gruppenrichtlinien. GPOs lassen sich zudem mit OUs verknüpfen. Dadurch lassen sich umfangreiche Umgebungen aufbauen, auch für Test- und Entwicklungsinfrastrukturen. Mit der Konfigurationsdatei provider.tf lässt sich die Verbindung zwischen AD und Terraform konfigurieren. Eine Beispieldatei kann folgendermaßen aussehen:

variable "user" { default = "user" }
variable "password" { default = "password" }
provider "ad" {
  winrm_hostname         = "DC1.JOOS.LAB"
  winrm_username         = var.user
  winrm_password         = var.password
  winrm_use_ntlm     = true
  }

In der Datei ist festgelegt, wie sich Terraform mit Active Directory verbinden und mit welchem Benutzer das geschehen soll. Bei winrm_username nutzt Terraform in diesem Fall den Wert der Variable user. Generell lässt sich Terraform mit NTLM und Kerberos verwenden. In produktiven Umgebungen ist Kerberos sicherer, für einen schnellen Einstieg in die AD-Verwaltung eignet sich NTLM. Ein Beispiel sieht so aus:

provider "ad" {
  winrm_hostname         = "DC1.JOOS.INT"
  winrm_username         = var.user
  winrm_password         = var.password
  winrm_port             = 5986
  winrm_proto            = "https"
  winrm_pass_credentials = true
  krb_realm              = "JOOS.INT"
  krb_conf               = "krb5.conf"
  krb_spn                = "DC1.JOOS.INT"
  winrm_insecure         = true
}

Damit Terraform in diesem Beispiel eine Verbindung mit Active Directory aufbauen kann, muss der Port 5986 offen sein. Das lässt sich zum Beispiel mit folgendem Befehl erreichen:

winrm quickconfig -transport:https

Zahlreiche weitere Beispiele für die Konfiguration von AD mit Terraform sind im GitHub-Repository von HashiCorp zu finden. In diesem Beispiel erfolgt die Verbindung mit Kerberos über die Datei krb5.conf:

[libdefaults]
   default_realm = JOOS.INT
   dns_lookup_realm = false
   dns_lookup_kdc = false
 [realms]
    JOOS.INT = {
        kdc     =   DC1.JOOS.INT
        admin_server = DC1.JOOS.INT
        default_domain = JOOS.INT
        master_kdc = DC1.JOOS.INT
    }
 [domain_realm]
    .kerberos.server = JOOS.INT
    .joos.int = JOOS.INT
     joos.int = JOOS.INT

Neben der Verbindung mit dem AD spielt die deklarative Datei eine Rolle, in der festgelegt wird, was Terraform in der konfigurierten Umgebung durchführen soll. Hier ein Beispiel:

resource "ad_gpo" "g" {
    name            = "TFTestGPO"
    domain          = "joos.lab"
    description     = "gpo for gplink tests"
    status          = "AllSettingsEnabled"
}
resource "ad_gpo_security" "gpo_sec" {
  gpo_container = ad_gpo.g.id
  password_policies {
    minimum_password_length = 11
  }
  system_services {
    service_name = "TapiSrv"
    startup_mode = "2"
    acl          = "D:AR(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;LA)"
  }
}
resource "ad_ou" "o" {
    name        = "TF Test OU"
    path        = "dc=joos,dc=lab"
    description = "OU for gplink tests"
}
resource "ad_gplink" "og" {
    gpo_guid  = ad_gpo.g.id
    target_dn = ad_ou.o.dn
}

Der Befehl erstellt eine neue OU und ein neues GPO. In der GPO werden daneben Einstellungen geändert. Mit terraform init wird die Datei initialisiert, was den Zugriff auf die Terraform-Registry erfordert, um den AD-Provider anzubinden. Die erfolgreiche Verbindung mit dem AD-Provider kann man mit terraform providers testen. Danach nutzt man terraform plan und setzt die Konfiguration um, zum Beispiel mit:

terraform apply -var user=administrator -var password=supergeheim123

Die Ausführung muss bestätigt werden. Danach legt Terraform die Objekte gemäß der Konfigurationsdatei an.

Erfahren Sie mehr über Cloud Computing