Ein tieferer Blick in vSphere Rollen und Berechtigungen

Ursprünglich sollte dieser Artikel „Das Rollen Paradoxon“ lauten. Bei längerer Betrachtung kam ich zu dem Schluss, dass es sich hier um kein Paradoxon im eigentlichen Sinne handelt. Das vCenter macht hier nur seine ihm aufgetragene Arbeit.

Berechtigungen unter vSphere sind prinzipiell simpel (so lange wir keine eingeschränkten Berechtigungen verwenden möchten). Wenn wir Mitglied der Administratorengruppe sind und uneingeschränkt auf alle Objekte im Datacenter zugreifen dürfen, sind Privilegien und Rollen schnell erklärt.

Begriffs-Definition

Ein Privileg ist die kleinste Einheit. Es erlaubt die Ausführung einer ganz bestimmten Aktion.

Eine Rolle ist eine Sammlung von Privillegien. Die Administrator-Rolle enthält alle verfügbaren Privilegien. Die No-Access-Rolle enthält dagegen keinerlei Privilegien. „No-Access“ ist hierbei nicht als explizites Verbot zu verstehen, sondern als Fehlen von Berechtigungen. Was zunächst nach einer semantischen Spitzfindigkeit aussehen mag, ist ein wichtiger Unterschied zu anderen Berechtigungskonzepten wie beispielsweise Active-Directory.

Fehlendes Privilleg != Verbot

Eine Berechtigung (Permission) setzt sich immer aus drei Komponenten zusammen: Einem vSphere-Objekt, einer Rolle und einem Benutzer bzw. einer Benutzergruppe. Ein Benutzer (oder eine Gruppe) kann auf unterschiedlichen Objekten unterschiedliche Rollen haben. Berechtigungen auf Objekten können in der Hierarchie optional nach unten vererbt werden.

Das Problem

Interessant wird die Sache wenn ich Rechte global vergebe, diese dann aber auf bestimmten Objekten einschränken möchte.

Beispiel: Die Gruppe der Administratoren soll auf alle Objekte Zugriff haben, mit Ausnahme einiger VMs in einem definierten VM-Ordner. Klingt simpel – ist es aber nicht.

Aufmerksam wurde ich auf die hier beschriebene Problematik durch meinen Kollegen Alexej Prozorov, der in einem Kundeprojekt auf dieses Phänomen stiess. Das Thema war so interessant, dass ich es im Labor nachstellen musste.

„Ein tieferer Blick in vSphere Rollen und Berechtigungen“ weiterlesen

ESXi Config-Backup mit PowerCLI benötigt HTTP

Es gibt einen wirklich nützlichen und komfortablen PowerCLI One-Liner zur Sicherung der Hostkonfiguration. Ich verwende ihn seit Jahren und hatte diesen auch in einem alten Blogpost im Detail erklärt.

Get-Cluster -Name myCluster | Get-VMHost | Get-VMHostFirmware -BackupConfiguration -DestinationPath 'C:\myPath'

Im Rahmen meiner VMware Kurse ist dies ein Befehl, den ich meinen Studenten immer mit auf den Weg gebe. Die Sicherung der Host-Konfiguration ist geradezu Pflicht vor Änderungen am Host, Installation von Patches und Treibern, oder Host-Updates. Nur ein paar Sekunden mehr Aufwand, aber diese Konfigurations-Backups haben mir schon mehr als einmal größeren Ärger und viele Stunden Arbeit erspart.

Kürzlich war ich in einem größeren Datacenter mit der Sicherung der Host-Konfigurationen beschäftigt. Überraschenderweise funktionierte der Befehl auf einigen der vCenter-Instanzen nicht und brach mit einer Fehlermeldung ab.

Get-VMHostFirmware : 18.08.2023 12:05:49 Get-VMHostFirmware An error occurred while sending the request.
At line:1 char:28
+… et-VMHost | Get-VMHostFirmware -BackupConfiguration -DestinationPath …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-VMHostFirmware], ViError
+ FullyQualifiedErrorId : Client20_SystemManagementServiceImpl_BackupVmHostFirmware_DownloadError,VMware.VimAutomation.ViCore.Cmdlets.Commands.Host.GetVMHostFirmware

Um den Fehler zu verstehen muss man zunächst verstehen, wie das PowerCLI Kommando arbeitet. Zunächst wird über vCenter auf dem Host ein Backup der Host-Konfiguration getriggert. Diese legt der Host lokal als gezipptes TAR Archiv (.tgz) ab. Der Name lautet configBundle-HostFQDN.tgz (Beispiel: configBundle-esx01.lab.local.tgz). Das Archiv wird dann in einem zweiten Schritt vom Host geladen. Die URL hierfür lautet:

http://[HostFQDN]/downloads/[Host-UUID]/configBundle-HostFQDN.tgz

Liest man die obige Fehlermeldung, gab es ganz offensichtlich ein Problem beim Download des TGZ-Files. Mit Hilfe der Netzwerk Admins wurde schnell klar, was hier passierte. Meine Arbeitsstation, von der ich den PowerCLI Befehl absendete, versuchte erfolglos eine HTTP Verbindung zum ESXi-Host aufzubauen. Dies wurde jedoch durch eine Firewall Regel geblockt.

Ich fragte mich, warum der Transfer über unverschlüsseltes HTTP abgewickelt wird. Im Log der Firewall sieht man einen Verbindungsversuch zum ESXi-Host mit HTTP und HTTPS.

Gibt es eine Möglichkeit, den Transfer über HTTPS zu erzwingen?

Der erste Gedanke war, dass es vielleicht einen Parameter zum Kommando gibt, der das HTTPS Protokoll erzwingt. Eine Anfrage im VMTN-Forum brachte leider Ernüchterung.

Es ist etwas erstaunlich, dass VMware für diese durchaus sensitiven Daten ein unverschlüsseltes Protokoll verwendet. Umso mehr da die PowerCLI Session zum vCenter ohnehin schon über HTTPS läuft. Die plausibelste Erklärung wäre, dass schlicht ‚vergessen‘ wurde bei diesem doch recht alten Befehl, den Transfer über SSL abzusichern.

Es bleibt derzeit also keine andere Wahl, als eine Firewall-Regel zu erzeugen, die den Download über HTTP erlaubt.

ESXi Coredump Files verwalten

Zugegeben, das ist kein neues Thema, aber es kostete mich etwas Zeit in einem Kundenprojekt. Da dieser Blog auch als Swap-Partition meines Gehirns fungiert, habe ich es für die Zukunft niedergeschrieben. Wichtig ist die korrekte Abfolge der Schritte, damit die Änderung auch nach einem Bootvorgang erhalten bleibt.

Wofür wird ein Coredump-File benötigt?

Moderne ESXi Installationen ab Version 7 verwenden ein neues Partitions-Layout des Bootdevices. Darin werden auch Coredumps abgelegt. Jedoch nur wenn das Bootmedium kein USB-Flashmedium und keine SD-Card ist. In solchen Fällen wird der Coredump ausgelagert auf einen VMFS-Datenspeicher mit mindestens 32GB Kapazität.

Genau einen solchen Fall fand ich in einer Kundenumgebung vor. Das System wurde von vSphere 6.7 migriert und hatte daher noch das alte Boot-Layout auf einem (damals noch voll unterstützten) SD-Card RAID1. Wir fanden einen Ordner vmkdump mit Files für jeden Host auf einem der gemeinsamen VMFS-Datenspeicher. Dieser (VMFS5) Datenspeicher sollte aufgelöst und durch einen VMFS6 Datenspeicher ersetzt werden. (Randbemerkung des VCI: Es gibt keinen online Migrationspfad von VMFS5 nach VMFS6). 😉 Also mussten die vmkdump Files von dort weg.

Ablauf

Zunächst verschaffen wir uns eine Übersicht der Coredump-Files.

esxcli system coredump file list

Hier werden alle Coredump-Files aller ESXi-Hosts gelistet. Jede Zeile enthält neben dem Pfad auch die Stati Active und Configured (true oder false). Active bedeutet, dass dies das aktuelle Coredumpfile dieses Hosts ist. Wichtig ist, dass der Wert bei Configured ebenfalls den Status ‚true‘ hat. Ansonsten übersteht die Einstellung keinen Reboot. Nur das Coredump-File des aktuellen Hosts hat den Status ‚active‘. Alle anderen Files gehören zu anderen Hosts und sind daher active=false.

Im Standard wählt der Host den ersten passenden VMFS-Datenspeicher. Das ist nicht unbedingt der erwünschte.

Aktuelles Coredump-File entfernen

Zunächst löschen wir das aktive Coredump-File des Hosts. Wir müssen die Löschung erzwingen, da es als active=true gesetzt ist.

esxcli system coredump file remove --force

Führen wir das list Kommando von oben nochmals aus, so sollte eine Zeile weniger erscheinen.

Neues Coredump File erzeugen

Der folgende Befehl legt ein neues Coredump-File am Zielort an. Falls noch nicht vorhanden wird ein Ordner vmkdump erzeugt und darin das Dumpfile. Wir übergeben den gewünschten Filenamen ohne Endung, da diese (.dumpfile) automatisch erzeugt wird.

esxcli system coredump file add -d <Name | UUID> -f <filename>

Beispiel: Name des Hosts ist „ESX-01“ und der VMFS-Datenspeicher hat den Namen „Service“. Der Datenspeicher darf entweder als Anzeigename oder Datastore_UUID übergeben werden.

esxcli system coredump file add -d Service -f ESX-01

Auf dem benannten Datenspeicher wird nun ein Ordner vmkdump erzeugt und darin ein File namens ESX-01.dumpfile. Wir können dies prüfen über das list Kommando.

esxcli system coredump file list

Es erscheint eine neue Zeile mit dem vollen Pfad zum neuen Dumpfile. Der Status ist jedoch noch active=false und configured=false. Es ist sinnvoll diesen kompletten Pfad in die Zwischenablage zu kopieren, denn wir benötigen ihn im nächsten Schritt.

Dumpfile aktivieren

Wir setzen im folgenden Schritt das neu erzeugte Dumpfile aktiv. Somit bleibt die Einstellung auch nach einen Host-Reboot erhalten. Wir übergeben dabei den vollständigen Pfad zum Dumpfile. Hier eignet sich die Kopie aus der Zwischenablage und vermeidet Tippfehler.

esxcli system coredump file set -p <path_to_dumpfile>

Beispiel:

esxcli system coredump file set -p /vmfs/volumes/<UUID>/vmkdump/ESX-01.dumpfile

Ein abschließender List Befehl bestätigt das Ergebnis.

Links