Um eine Security Baseline in der vSphere Infrastruktur zu etablieren ist es initial notwendig einige erweiterte Optionen an allen VMs zu setzen. Dieses Vorgehen wird im allgemeinen als VM Hardening bezeichnet. Später können dann z.B. DMZ VMs besonders geschützt werden.
Die hier aufgeführten Optionen sind meine persönliche Auswahl aus dem VMware Security Hardening Guide für vSphere 5.5 Update 1 VMs (Download).
Die Optionen sind kein Best Practice, nur meines erachtens nach ein gutes Maß an Sicherheit für die unterliegende Infrastruktur ohne Funktionen einzubüßen.
Hier die gewählten Optionen:
Option | Wert |
---|---|
isolation.tools.diskShrink.disable | true |
isolation.tools.diskWiper.disable | true |
isolation.tools.copy.disable | true |
isolation.tools.paste.disable | true |
isolation.tools.dnd.disable | true |
isolation.tools.setGUIOptions.enable | false |
log.keepOld | 10 |
log.rotateSize | 100000 |
RemoteDisplay.maxConnections | 2 |
RemoteDisplay.vnc.enabled | false |
Für die automatisierte Anwendung der Optionen auf die VMs möchte ich hier zwei Wege aufzeigen:
- PowerCLI Script
- vRealize Orchestrator Workflow
VM Hardening – Script bzw. Workflow
VMware PowerCLI
GitHub Gist:
GitHub Project:
https://github.com/mycloudrevolution/vm-hardening-ps
In dem Project ist das aktuelle VM-Hardening Script als JavaScript oder PowerShell zu finden.
vRealize Orchestrator
VM Hardening Workflow
Workflow Attibute

vRO Workflow Attribute

Inhalt des „Composite Type“
vRealize Orchestrator Scriptable Task
var VcVMConfigSpec = new VcVirtualMachineConfigSpec(); var changeValue = new Array(); System.log ("Config From Array:"); for (var i = 0; i < VcVmConfig.length; i++) { System.log ("Name: " + VcVmConfig[i].key + " - " + "Value: " + VcVmConfig[i].value); changeValue[i] = new VcOptionValue(); changeValue[i].key = VcVmConfig[i].key; changeValue[i].value = VcVmConfig[i].value; } VcVMConfigSpec.extraConfig = changeValue; System.log ("Number of VM to Process:" + VcVmS.length); for (var j = 0; j < VcVmS.length; j++) { System.log ("VM to Set Options:" + VcVmS[j].Name); ConfigTask = VcVmS[j].reconfigVM_Task(VcVMConfigSpec); try { var actionResult = System.getModule("com.vmware.library.vc.basic").vim3WaitTaskEnd(ConfigTask,progress,pollrate); System.log("Config performed for VM : " + VcVmS[j].name); Server.log("Config performed for VM : " + VcVmS[j].name); } catch (e) { System.error("Config failed for VM : " + VcVmS[j].name + ". Reason: " + e); Server.error("Config failed for VM : " + VcVmS[j].name + ". Reason: " + e); } MoveTask = VcVmS[j].relocateVM_Task(relocateSpec); try { var actionResult = System.getModule("com.vmware.library.vc.basic").vim3WaitTaskEnd(MoveTask,progress,pollrate); System.log("vMotion/storage vMotion performed for VM : " + VcVmS[j].name); Server.log("vMotion/storage vMotion performed for VM : " + VcVmS[j].name); } catch (e) { System.error("vMotion/storage vMotion failed for VM : " + VcVmS[j].name + ". Reason: " + e); Server.error("vMotion/storage vMotion failed for VM : " + VcVmS[j].name + ". Reason: " + e); } }
What is the point of the following line?
$TaskMig = $vmv.MigrateVM_Task($null, $_.Runtime.Host, ‚highPriority‘, $null)
That is a vMotion to the same host to force a config reload.