Bootstrap-play voor PHX-domein
Categories:
Projects: c2platform/phx/ansible , c2platform.wincore
Overzicht
In het PHX-domein zijn Windows-hosts niet onmiddellijk voorbereid op Ansible automatisering. Standaard is alleen WinRM over HTTP geconfigureerd, wat Ansible kan gebruiken in combinatie met Kerberos voor authenticatie. Hoewel deze setup enige beveiliging biedt via Kerberos, worden inloggegevens onversleuteld over het netwerk verzonden, wat mogelijke risico’s met zich meebrengt in bepaalde scenario’s.
Om de beveiliging te verbeteren, configureert de bootstrap-play WinRM over HTTPS met de
aangepaste module c2platform.wincore.winrm_https_config. Dit maakt het mogelijk voor volgende
Ansible-plays om veilig via HTTPS te verbinden.
De bootstrap-play in het PHX-domein omvat aanvullende taken naast de WinRM-configuratie. In de open-source PHX-referentie-implementatie (PXD ontwikkelomgeving) richt deze zich echter momenteel alleen op het beheren van WinRM HTTPS.
In de PXD
ontwikkelomgeving gebruikt Vagrant standaard WinRM HTTPS, dus het simuleert niet volledig
de initiële setup met alleen HTTP in het PHX-domein. Om het configuratieproces van WinRM HTTPS te testen
en te simuleren, gebruiken we de node pxd-ubuntu-devtop als domeingebruiker tony. Deze gebruiker
gebruikt standaard SSH voor
Ansible-verbindingen, wat het mogelijk maakt om de WinRM HTTPS-setup
te beheren (bijv. wijzigen of verwijderen) via SSH en vervolgens de functionaliteit van de module te verifiëren
door over te schakelen naar WinRM.
Deze handleiding biedt een stapsgewijs proces om de bootstrap-play uit te voeren en te verifiëren, waarbij veilige Ansible-operaties in een gesimuleerde PHX-achtige omgeving worden gewaarborgd.
Randvoorwaarden
Voordat je begint, zorg ervoor dat je het volgende hebt voltooid:
- Ansible met Kerberos opzetten op een PHX-ontwikkeldesktop: In het air-gapped PHX-domein maakt Kerberos veilige authenticatie mogelijk in de Ansible-ontwikkelomgeving op een op Ubuntu 24 gebaseerde desktop, wat zowel het gemak als de beveiliging verbetert.
Zorg ervoor dat de benodigde nodes draaien; start ze indien nodig eerst:
vagrant up pxd-rproxy1 pxd-ad pxd-win1 pxd-ubuntu-devtop
Stap 1: Inloggen als Tony
Verbind met het ontwikkel-desktop:
vagrant ssh pxd-ubuntu-devtop
Schakel over naar gebruiker tony:
sudo su - tony
Creëer een forwardable TGT (Ticket-Granting Ticket) voor Kerberos-authenticatie. Dit maakt het mogelijk om het ticket door te geven aan andere services of hosts, waardoor naadloze multi-hop authenticatie mogelijk is zonder opnieuw inloggegevens in te voeren:
echo 'Supersecret!' | kinit -f
Verifieer het ticket met klist om te bevestigen dat het forwardable is (kijk naar de
“forwardable”-vlag).
Stap 2: Opslaan en beoordelen van huidig certificaat
Voordat je de bootstrap-play uitvoert en de WinRM HTTPS-configuratie vervangt, sla het TLS/SSL-certificaat op en beoordeel het. Dit maakt het mogelijk om te verifiëren dat de module het certificaat daadwerkelijk vervangt door een nieuw exemplaar.
Open een ander terminal op je hostmachine en verbind als gebruiker vagrant met de
node pxd-ubuntu-devtop:
phx
vagrant ssh pxd-ubuntu-devtop
Sla het certificaat op in een bestand:
echo -n | openssl s_client -connect pxd-win1.c2.org:5986 | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /vagrant/winrm.pem
Beoordeel de certificaatdetails, inclusief subject, issuer, geldigheidsdata, subject alternative names en SHA-256-fingerprint:
echo -n | openssl s_client -connect pxd-win1.c2.org:5986 -servername pxd-win1.c2.org 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates -ext subjectAltName -fingerprint -sha256
Deze opdracht verbindt met het WinRM HTTPS-eindpunt, extraheert het certificaat en toont belangrijke metadata zonder het volledige certificaat op te slaan. De output ziet er ongeveer zo uit (werkelijke waarden kunnen variëren):
subject=CN = WIN-EI2VV283LJN
issuer=CN = WIN-EI2VV283LJN
notBefore=Sep 4 05:52:57 2023 GMT
notAfter=Sep 3 05:52:57 2026 GMT
X509v3 Subject Alternative Name:
DNS:WIN-EI2VV283LJN, DNS:WIN-EI2VV283LJN
sha256 Fingerprint=FD:26:43:A2:4B:36:FB:5D:8F:E9:F6:94:30:A9:A6:E1:AE:01:F6:F5:3F:F6:8A:DB:D3:A7:03:48:93:BE:5C:59
Noteer de fingerprint en data voor vergelijking na het uitvoeren van de bootstrap-play.
Stap 3: Uitvoeren van bootstrap-play
Gebruiker tony gebruikt een aangepaste
inventaris via de omgevingsvariabele
ANSIBLE_INVENTORY, die standaard SSH-verbindingen gebruikt. Voor meer details, zie:
Activeer de Python virtuele omgeving (die Ansible bevat) en navigeer naar de inventaris projectmap:
phx
Stel het Ansible Vault-wachtwoordbestand in:
export ANSIBLE_VAULT_PASSWORD_FILE=/usr/local/bin/vault-client.sh
Voer de bootstrap-play uit. Dit zou de WinRM HTTPS taak als “changed” moeten tonen, wat aangeeft dat de standaard WinRM HTTPS-configuratie van de Vagrant-box is gewijzigd:
ansible-playbook plays/mgmt/bootstrap.yml
Toon output
Stap 4: Verificatie van WinRM HTTPS-configuratie
Om WinRM HTTPS te testen, schakel over naar een Kerberos-ingeschakelde WinRM inventaris:
export ANSIBLE_INVENTORY="Vagrantfile.yml,hosts.ini,hosts-kerberos-override.ini,hosts-kerberos-winrm-override.ini"
Voer de bootstrap-play opnieuw uit. De WinRM HTTPS taak zou nu als “ok” moeten worden getoond (niet veranderd), wat bevestigt dat de configuratie al aanwezig is:
ansible-playbook plays/mgmt/bootstrap.yml
Om te bevestigen dat WinRM wordt gebruikt, voer uit met verbose output en controleer op WinRM-verbindingen:
ansible-playbook plays/mgmt/bootstrap.yml -vvv | grep WINRM
Toon output
Deze verificatie zorgt ervoor dat de WinRM HTTPS-setup functioneel en veilig is voor Ansible-operaties.
Review
Bootstrap playbook
---
- name: Windows
hosts: pxd-win1
tasks:
- name: WinRM HTTPS
c2platform.wincore.winrm_https_config:
computer_name: "{{ inventory_hostname }}"
dns_name: "{{ inventory_hostname }}.c2.org"
state: present
plugins/modules/winrm_https_config.ps1
Review nieuw/gewijzigd certificaat
Na het uitvoeren van de bootstrap-play, beoordeel het nieuwe certificaat om te bevestigen dat het is bijgewerkt.
Als gebruiker vagrant op pxd-ubuntu-devtop, sla het nieuwe certificaat op:
echo -n | openssl s_client -connect pxd-win1.c2.org:5986 | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /vagrant/winrm-new.pem
Vergelijk het met het oorspronkelijke opgeslagen certificaat indien nodig (bijv. met diff /vagrant/winrm.pem /vagrant/winrm-new.pem).
Beoordeel de details van het nieuwe certificaat:
echo -n | openssl s_client -connect pxd-win1.c2.org:5986 -servername pxd-win1.c2.org 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates -ext subjectAltName -fingerprint -sha256
Vergelijk de output met het oorspronkelijke uit Stap 2. Kijk naar wijzigingen in de fingerprint, data of andere details die aangeven dat een nieuw certificaat is gegenereerd en toegepast.
Review WinRM-listeners
Daarnaast, op de Windows-host (pxd-win1), gebruik PowerShell om de WinRM-listeners op te sommen en te verifiëren dat de HTTPS-listener actief is met de nieuwe certificaat-thumbprint:
winrm enumerate winrm/config/listener
Voorbeeldoutput (werkelijke thumbprint en details zullen variëren):
Listener
Address = *
Transport = HTTP
Port = 5985
Hostname
Enabled = true
URLPrefix = wsman
CertificateThumbprint
ListeningOn = 10.0.2.15, 127.0.0.1, 192.168.61.12, ::1, fe80::6d9c:c6e5:e15e:a485%4, fe80::e861:af06:658a:d7a7%7
Listener
Address = *
Transport = HTTPS
Port = 5986
Hostname
Enabled = true
URLPrefix = wsman
CertificateThumbprint = 6DCA065A5A29EFAD9BF136828270558324340BC1
ListeningOn = 10.0.2.15, 127.0.0.1, 192.168.61.12, ::1, fe80::6d9c:c6e5:e15e:a485%4, fe80::e861:af06:658a:d7a7%7
Dit bevestigt dat de HTTPS-listener is geconfigureerd met het nieuwe certificaat.
Aanvullende opmerkingen
- De bootstrap-play is cruciaal voor de overgang van onveilige HTTP naar veilige HTTPS WinRM in productie-achtige omgevingen.
- In echte PHX-domeinen kunnen aanvullende taken certificaatbeheer, firewall-aanpassingen of integratie met enterprise CA’s omvatten.
- Voor troubleshooting, controleer de WinRM-listenerstatus op de Windows-host met
winrm enumerate winrm/config/listenervia PowerShell. - Behandel Kerberos-tickets altijd veilig om ongeautoriseerde toegang te voorkomen.
Feedback
Was deze pagina nuttig?
Fijn om te horen! Vertel ons alstublieft hoe we kunnen verbeteren.
Jammer om dat te horen. Vertel ons alstublieft hoe we kunnen verbeteren.