Feed abonnieren

Wenn Sie Windows-Hosts mit Red Hat Ansible Automation Platform verwalten, dann ist dieser Blog genau das Richtige für Sie! Ich möchte das Active Directory Inventory-Plugin hervorheben, mit dem Active Directory als Source of Truth für Ansible Automation Platform genutzt werden kann. Gehen wir zunächst einen Schritt zurück, und betrachten wir die Frage, warum Inventory-Management so wichtig ist.

Ansible Automation Platform wurde als Automatisierungstool entwickelt, das einfach, leistungsstark und agentenlos ist.

introducing microsoft active directory inventory plug ansible

Die agentenlose Architektur bietet eine Vielzahl an Automatisierungsmöglichkeiten, da wir nicht nur die Geräte verwalten, auf denen wir Agents installieren können. In dieser agentenlosen Welt wird Inventory-Management zu einem Eckpfeiler für den Erfolg. In der Regel müssen wir Folgendes wissen:

  • Welche Geräte müssen wir verwalten? Woher erhalten wir eine aktuelle und korrekte Liste unserer Infrastruktur?
  • Wie klassifizieren wir Knoten, damit wir wissen, wie wir sie automatisieren können? Beispielsweise werden für einen Datenbankserver andere Automatisierungsprozesse ausgeführt wie für einen Webserver.

Inventory-Plugins sind eine praktische Lösung für diese Probleme. In ihrer einfachsten Form sind es Skripte, mit denen wir auf eine Source of Truth verweisen können, um eine Liste von Servern und mit allen Merkmalen zu erstellen, die uns helfen könnten, besser zu verstehen, wie sie entsprechend automatisiert werden.

Für das Management einer Microsoft Windows-Umgebung ist Active Directory eine sehr interessante Source of Truth, da Server normalerweise bei einer Domain registriert sind. Dank der Red Hat Ansible Certified Content Collection für Microsoft AD verfügen wir jetzt über zahlreiche Module, die mit Microsoft Active Directory interagieren können, und – was noch wichtiger ist – über ein Inventory-Plugin, das  Active Directory als Source of Truth nutzen kann. Mit diesem Inventory-Plugin können Sie Hosts auf Grundlage ihrer Active Directory-Attribute und Gruppenmitgliedschaften filtern und gruppieren.

Sehen wir uns das Plugin in Aktion an.

Mit der Befehlszeile beginnen

Beginnen wir mit der Befehlszeile, indem wir Automation Content Navigator und Ausführungsumgebungen für die Automatisierung verwenden. Anweisungen zur Installation und Konfiguration von Automation Content Navigator finden Sie in der Dokumentation zur Inhaltserstellung. Die unterstützte Ausführungsumgebung von Ansible Automation Platform ab Version 2.4 enthält bereits alles, was wir für eine Integration mit Microsoft Active Directory benötigen: die microsoft.ad- Collection sowie die notwendigen Python-Abhängigkeiten. Bei älteren Releases müssen Sie möglicherweise Ihre  Ausführungsumgebung anpassen, um diese Voraussetzungen zu erfüllen.

Glücklicherweise kann das Modul debug_ldap_client verwendet werden, um die erforderlichen Python-Abhängigkeiten sowie die DNS- und Kerberos-Konfiguration zu überprüfen. Da wir eine Ausführungsumgebung für die Automatisierung verwenden, führen wir diese innerhalb des Images aus, um zu überprüfen, ob die erforderlichen Abhängigkeiten für das Inventory-Plugin vorhanden sind. Wir können die Traceback-Fehler ignorieren, da wir nur sicherstellen möchten, dass die Python-Abhängigkeiten für unseren Use Case vorhanden sind.

$ ansible-navigator exec -- ansible localhost -m microsoft.ad.debug_ldap_client
  < Output Truncated >
"packages": {
    "dnspython": "2.3.0",
    "krb5": "0.5.0",
    "pyspnego": "0.9.0",
    "sansldap": "0.1.0"

Um eine Inventory-Definition für die Abfrage unseres Active Directory-Servers zu erstellen, muss unsere Inventory-Datei auf „microsoft.ad.ldap.yml“ oder „microsoft.ad.ldap.yaml“ enden. Nennen wir sie also einfach microsoft.ad.ldap.yml. Zum Testen verwende ich die folgende Konfiguration. Bevor Sie jetzt schreien –  ich weiß, dass der Benutzername und das Passwort in Klartext vorliegen. Dieser Vorgang dient lediglich dazu, einige anfängliche Verbindungstests durchzuführen, damit wir einige der gewünschten Attribute ausprobieren können. Die Zugangsdaten werden später korrigiert.

plugin: microsoft.ad.ldap
server: ms-ad.demolab.local
username: svc-aap-ldap
password: Redhat123
tls_mode: ldaps

Jetzt können Sie das Plugin über die Befehlszeile mit dem Unterbefehl „inventory“ von Ansible Automation Platform Navigator testen. Da wir ldaps verwenden, ordnen wir den CA Trust Store von unserem RHEL-Host der Ausführungsumgebung unter Verwendung des Pfads /etc/pki/ca-trust zu.

Die Ausgabe zeigt, dass wir einen Host namens MS-AD ermittelt haben, bei dem es sich um unseren Domain Controller handelt. 

$ ansible-navigator inventory -i microsoft.ad.ldap.yml --list -m stdout --eev /etc/pki/ca-trust:/etc/pki/ca-trust:O
{
"_meta": {
    "hostvars": {
        "MS-AD": {
            "ansible_host": "ms-ad.demolab.local",
            "microsoft_ad_distinguished_name": "CN=MS-AD,OU=Domain Controllers,DC=demolab,DC=local"
        }
    }
},
"all": {
    "children": [
        "ungrouped"
    ]
},
"ungrouped": {
    "hosts": [
        "MS-AD"
    ]
}
}

Die Konnektivität ist gut, aber die zurückgegebenen Informationen sind etwas spärlich. Außerdem konnten wir den Host keinen Gruppen hinzufügen. Es gibt zahlreiche dokumentierte Parameter, die wir für das Inventory-Plugin bereitstellen können, um es nach Bedarf anzupassen.

Tatsächlich können alle Computerattribute aus Active Directory zum Filtern, Festlegen von Variablen oder Gruppieren von Hosts verwendet werden. Um alle verfügbaren Attribute für unseren MS-AD -Host anzuzeigen, können wir den folgenden PowerShell-Befehl auf einem Windows-Host mit dem installierten Active Directory-PowerShell-Modul verwenden.

Get-ADComputer -Identity "MS-AD" -Properties *

Beziehen wir einige zusätzliche Parameter ein, und beginnen wir mit der Gruppierung von Hosts. Aktualisieren Sie die Inventory-Konfigurationsdatei microsoft.ad.ldap.yml, und schließen Sie zusätzliche Attribute ein, die aus Active Directory abgerufen werden. In unserem aktualisierten Beispiel erhalten wir Attribute für „OperatingSystem“ und „location“ sowie eine Liste aller Gruppen, in denen der Computer Mitglied ist. Machen Sie sich keine Sorgen über die Zeile „regex_search“ – ich habe sie aus der Dokumentation kopiert und eingefügt.

Im letzten Abschnitt der Konfiguration werden unsere Ansible Automation Platform-Gruppen definiert, damit wir Knoten klassifizieren können. Alle Rechner werden automatisch einer Gruppe namens „windows“ hinzugefügt. Außerdem fügen wir alle Hosts, die Mitglieder der Domain-Gruppe „Production“ sind, der entsprechenden Gruppe namens „production“ hinzu. Zum Schluss fügen wir Hosts basierend auf den Attributen „OperatingSystem“ und „location“ zu Gruppen hinzu. Hier ist die endgültige Konfigurationsdatei.

plugin: microsoft.ad.ldap
server: ms-ad.demolab.local
username: svc-aap-ldap
password: Redhat123
tls_mode: ldaps
attributes:
  OperatingSystem:
operating_system:
  location:
  memberOf:
computer_membership: this | map("regex_search", '^CN=(?P<name>.+?)((?<!\\),)', '\g<name>') | flatten
groups:
  windows: true
  production: '"Production" in computer_membership'
keyed_groups:
- key: operating_system | lower
  prefix: os
  default_value: unknown
- key: location | lower
  default_value: unknown
  prefix: location

Ein letzter Test über die Befehlszeile. Sehen wir uns einmal die Attribute an, die von Active Directory zurückgegeben werden. Die Werte mit „__ansible_unsafe“ bedeuten einfach, dass sie für das jinja2-Templating blockiert sind.

$ ansible-navigator inventory -i microsoft.ad.ldap.yml -m stdout --host MS-AD --eev /etc/pki/ca-trust:/etc/pki/ca-trust:O
{
    "ansible_host": "ms-ad.demolab.local",
    "computer_membership": [
    {
        "__ansible_unsafe": "Production"
    }
    ],
    "location": {
    "__ansible_unsafe": "london-dc1"
    },
    "microsoft_ad_distinguished_name": "CN=MS-AD,OU=Domain Controllers,DC=demolab,DC=local",
    "operating_system": {
    "__ansible_unsafe": "Windows Server 2019 Standard Evaluation"
    }
}

Sehen wir uns als Nächstes die Gruppenmitgliedschaft an. Unser Server ist jetzt Mitglied von 4 Ansible Automation Platform-Gruppen, die wir nutzen können, um ihn nach Bedarf einzusetzen.

$ ansible-navigator inventory -i microsoft.ad.ldap.yml -m stdout --graph --eev /etc/pki/ca-trust:/etc/pki/ca-trust:O
@all:
  |--@_london_dc1:
  |  |--MS-AD
  |--@os_windows_server_2019_standard_evaluation:
  |  |--MS-AD
  |--@production:
  |  |--MS-AD
  |--@windows:
  |  |--MS-AD

Test abgeschlossen! Sehen wir uns an, wie wir dies in einer Unternehmensumgebung mit Automation Controller verwenden können.

Automation Controller konfigurieren

Automation Controller ermöglicht es Unternehmen zu standardisieren, wie Automatisierung eingesetzt, initiiert, delegiert und auditiert wird. Nun sollten wir unsere Klartext-Zugangsdaten korrigieren und unsere Inventory-Konfiguration kontrollieren.

  1. Erstellen eines Zugangsdatentyps: Mit Automation Controller können wir benutzerdefinierte Zugangsdatentypen festlegen, sodass wir mit verschiedenen Systemen interagieren und gleichzeitig unsere Sicherheitslage beibehalten können. Dadurch können wir Umgebungsvariablen zur Laufzeit injizieren, anstatt sie im Klartext zu verwenden. Wenn Sie einen Blick in die Dokumentation für das Inventory-Plugin werfen, werden Sie feststellen, dass es verschiedene Umgebungsvariablen für die Authentifizierung akzeptiert. Wir verwenden diese Variablen mit Automation Controller.

    Gehen Sie in der Automation Controller-Benutzeroberfläche zu „Credential Types“, und klicken Sie auf „Add“. Geben Sie dem Zugangsdatentyp einen Namen. Wir nennen ihn „Microsoft AD Inventory“. Für die „Input-Konfiguration“ können wir diese Felder verwenden, um die Felder zu definieren, die wir für unseren Benutzernamen, unser Passwort und unseren AD-Server erwarten.

    fields:
      - id: MICROSOFT_AD_LDAP_USERNAME
    type: string
    label: Username
      - id: MICROSOFT_AD_LDAP_PASSWORD
    type: string
    label: Password
    secret: true
      - id: MICROSOFT_AD_LDAP_SERVER
    type: string
    label: AD Server
    required:
      - MICROSOFT_AD_LDAP_USERNAME
      - MICROSOFT_AD_LDAP_PASSWORD
      - MICROSOFT_AD_LDAP_SERVER

    Die „Injektor-Konfiguration“ definiert die Variablen, die wir in die Inventory-Synchronisierung injizieren. Verwenden Sie Folgendes:

    env:
      MICROSOFT_AD_LDAP_SERVER: '{{ MICROSOFT_AD_LDAP_SERVER }}'
      MICROSOFT_AD_LDAP_PASSWORD: '{{ MICROSOFT_AD_LDAP_PASSWORD }}'
      MICROSOFT_AD_LDAP_USERNAME: '{{ MICROSOFT_AD_LDAP_USERNAME }}'

 

  1. Erstellen von Zugangsdaten : Da wir nun einen neuen Zugangsdatentyp haben, können wir entsprechende Zugangsdaten erstellen. Gehen Sie zu „Credentials“, und klicken Sie auf „Add“. Wählen Sie „Microsoft AD Inventory“ als neuen Zugangsdatentyp, und geben Sie wie in der Befehlszeile den Benutzernamen, das Passwort und den Active Directory-Server ein.

  1. Erstellen eines Projekts: Wir möchten die Konfiguration unseres Active Directory Inventorys in der Versionskontrolle verwalten, damit Änderungen die relevanten Peer-Reviews und Genehmigungen durchlaufen. Ein Projekt in Automation Controller ermöglicht die Zuordnung zu einem Repository für die Quellcodeverwaltung. Ich habe die Konfiguration, die wir für die Befehlszeile geschrieben haben, in ein GitHub Repository übertragen:  https://github.com/phirriso/ansible_microsoft_ad_inventory.

    WICHTIG:  Wir haben Benutzernamen, Passwort oder Active Directory-Server nicht an die Versionskontrolle übergeben. Diese werden jetzt von unseren Zugangsdaten in Automation Controller verwaltet. Entfernen Sie die Parameter aus der Inventory-Konfiguration.

    Navigieren Sie in der Automation Controller-Benutzeroberfläche zu „Projects“, und klicken Sie auf „Add“. Hier sehen Sie die Details zu unserem Projekt mit der entsprechenden URL für die Quellcodeverwaltung. Weitere Informationen zu den zusätzlichen Projektfeldern finden Sie in der Dokumentation.

  1. Erstellen eines Inventorys : Wir können das Inventory jetzt erstellen. Navigieren Sie zu „Inventories“, und klicken Sie auf „Add“ und dann auf „Add Inventory“. Geben Sie dem Inventory einen geeigneten Namen.

    Sobald Sie auf „Speichern“ geklickt haben, sind zusätzliche Optionen für das Inventory verfügbar. Wählen Sie „Sources“ aus, und klicken Sie auf „Add“. Hier stellen wir unsere Konfiguration zusammen, indem wir die Inventory-Konfigurationsdatei und die Zugangsdaten auswählen. Hier ist unsere vollständige Inventory-Quelle.

    HINWEIS: Das einzig mögliche Problem ist, dass Sie den Namen der Inventory-Datei manuell eingeben und die Eingabetaste drücken müssen, um dieses Feld auszufüllen.

Wenn Sie auf „Save“ klicken, wird am unteren Bildschirmrand die Schaltfläche „Sync“ angezeigt. Wenn Sie darauf klicken, wird unser Inventory-Plugin ausgeführt. Wir können den Fortschritt verfolgen, indem wir uns den „Last job status“ ansehen oder zum Menüeintrag „Jobs“ navigieren. Ich hoffe, dass die Meldung „Success“ angezeigt wird.

Wir können unsere Plugin-Konfiguration validieren, indem wir zu „Inventories“, „Demolab AD Inventory“ gehen und dann die Registerkarte „Hosts“ auswählen. Es sollte angezeigt werden, dass unsere Hosts importiert wurden:

Wenn wir auf den Host klicken, können wir auch die Variablen (Attribute) anzeigen, die wir in Active Directory erfasst haben. Und dann können wir auf die Registerkarte „Groups“ klicken, um zu überprüfen, ob wir den Host richtig gruppiert haben.

 

Nächste Schritte

Inventory-Management ist der Schlüssel zur Optimierung und Skalierung der Automatisierung mit Ansible Automation Platform. Das Microsoft AD Inventory-Plugin ist nur ein weiteres Beispiel dafür, wie Ansible Automation Platform das Leben von Nutzenden wie uns vereinfachen kann. Wenn Sie Active Directory als Source of Truth nutzen, können Sie Ihren Automatisierungsprozess mit Ansible Automation Platform for Windows beschleunigen.


Über den Autor

Pat Harrison works for Red Hat in the UK as an Associate Principal Specialist Solution Architect focused on Ansible automation. Prior to this, Pat worked as a Red Hat Consultant helping to deliver solutions across various Red Hat products.
Read full bio
UI_Icon-Red_Hat-Close-A-Black-RGB

Nach Thema durchsuchen

automation icon

Automatisierung

Das Neueste zum Thema IT-Automatisierung für Technologien, Teams und Umgebungen

AI icon

Künstliche Intelligenz

Erfahren Sie das Neueste von den Plattformen, die es Kunden ermöglichen, KI-Workloads beliebig auszuführen

open hybrid cloud icon

Open Hybrid Cloud

Erfahren Sie, wie wir eine flexiblere Zukunft mit Hybrid Clouds schaffen.

security icon

Sicherheit

Erfahren Sie, wie wir Risiken in verschiedenen Umgebungen und Technologien reduzieren

edge icon

Edge Computing

Erfahren Sie das Neueste von den Plattformen, die die Operations am Edge vereinfachen

Infrastructure icon

Infrastruktur

Erfahren Sie das Neueste von der weltweit führenden Linux-Plattform für Unternehmen

application development icon

Anwendungen

Entdecken Sie unsere Lösungen für komplexe Herausforderungen bei Anwendungen

Original series icon

Original Shows

Interessantes von den Experten, die die Technologien in Unternehmen mitgestalten