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 22/24 gebaseerde desktop, wat zowel het gemak als de beveiliging verbetert.

Projects:  c2platform/phx/ansible


Overzicht

De Ansible-ontwikkelomgeving in het air-gapped PHX-domein verschilt van de open-source PHX ontwikkelomgeving (PXD). De PXD is volledig open-source en maakt deel uit van het C2 Platform-initiatief. Het gebruikt Vagrant en Ansible zonder Kerberos, wat het eenvoudiger maakt voor snelle installatie en testen. In tegenstelling daarmee vertrouwt de PHX-omgeving op Kerberos voor authenticatie en vRA voor infrastructuurvoorziening, zonder Vagrant. Deze opzet is minder geschikt voor snelle Ansible-ontwikkeling, omdat functies zoals eenvoudige VM-creatie, snapshots en geautomatiseerd omgevingsbeheer ontbreken. Om deze reden wordt het vaak aangeduid als een pseudo-ontwikkelomgeving, met meer handmatige stappen.

Deze handleiding legt uit hoe je de PHX Ansible-ontwikkelomgeving kunt simuleren. Je zet een Ubuntu 22.04 desktop-VM genaamd pxd-ubuntu-devtop op met Vagrant en Ansible. Eenmaal ingericht, maak je verbinding via SSH of Remmina (voor RDP-toegang). Van daaruit voer je Ansible-taken uit in deze sandbox met Kerberos-authenticatie, wat de PHX-domeinopzet nabootst.

Deze simulatie helpt bij het begrijpen van hoe de Ansible-ontwikkelomgeving is opgezet en werkt in het PHX-domein. Het vormt ook een basis voor het creëren en valideren van automatisering voor het beheren van de ontwikkelomgeving. Het stelt ontwikkelaars in staat om Ansible-playbooks te testen en ontwikkelen in een gecontroleerde omgeving met Kerberos, zonder toegang nodig te hebben tot het daadwerkelijke air-gapped PHX-domein. Het benadrukt beveiligingsbest practices, zoals het gebruik van forwardable Kerberos-tickets voor naadloze multi-hop authenticatie, terwijl isolatie voor ontwikkeling en testen behouden blijft.

Randvoorwaarden

Voordat je begint, zorg ervoor dat je het volgende hebt voltooid:

  • Ansible ontwikkeldesktop in PHX-domein: Uitrollen en beheren van een Ansible ontwikkeldesktop die de setup in het air-gapped PHX-domein simuleert.
  • Zorg ervoor dat de benodigde nodes draaien, zo niet, start ze eerst:

    vagrant up pxd-rproxy1 pxd-ad pxd-win1
    

Ansible-ontwikkelomgeving opzetten

Stap 1: Verbinding maken met Ansible-ontwikkeldesktop

Gebruik Remmina om in te loggen als tony met je wachtwoord (bijv. Supersecret! voor testen).

Controleer de versie van het Kerberos-configuratietool:

krb5-config --version
Toon me
tony@pxd-ubuntu-devtop:~$ krb5-config --version
Kerberos 5 release 1.19.2

Controleer je huidige Kerberos-tickets:

klist
Toon me
tony@pxd-ubuntu-devtop:~$ klist
Ticket cache: FILE:/tmp/krb5cc_747001104_4yJsHO
Default principal: tony@C2.ORG

Valid starting       Expires              Service principal
07/24/2025 11:06:24  07/24/2025 21:06:24  krbtgt/C2.ORG@C2.ORG
	renew until 07/25/2025 11:06:24

Stap 2: Je terminal aanpassen

Maak een bestand voor Bash-aliassen om je workflow te vereenvoudigen en je productiviteit te verbeteren:

export BASH_ALIASES_URL="https://gitlab.com/c2platform/phx/ansible/-/raw/master/plays/dev/files/.bash_aliases"
curl -sL $BASH_ALIASES_URL  > ~/.bash_aliases

Deze aliassen vereenvoudigen veelvoorkomende taken, zoals het activeren van de virtuele omgeving, navigeren naar projectmappen en beheren van Ansible-installaties. Voor meer informatie:

Stap 3: Python virtuele omgeving opzetten

Maak een Python 3 virtuele omgeving voor Ansible om isolatie, stabiliteit en reproduceerbaarheid te garanderen:

sudo apt update
sudo apt install virtualenv -y
mkdir ~/.virtualenv
DEB_PYTHON_INSTALL_LAYOUT='deb' virtualenv ~/.virtualenv/pxd -p python3

Deze opzet voorkomt conflicten met systeembrede Python-pakketten en volgt best practices voor ontwikkelomgevingen.

Stap 4: Projecten klonen

Laad je Bash-configuratie en installeer vereiste tools:

source ~/.bashrc
sudo apt install git curl -y
curl -s -L https://gitlab.com/c2platform/phx/ansible/-/raw/master/clone.sh | bash

Als beveiligingsbest practice, bekijk altijd de inhoud van scripts zoals clone.sh voordat je ze uitvoert via curl en bash. Download en inspecteer het script eerst om ervoor te zorgen dat het voldoet aan je beveiligingsstandaarden.

Stap 5: Ansible en Ansible-rollen/collecties installeren

Activeer de omgeving en installeer afhankelijkheden:

source ~/.bashrc
phx
pip install -r requirements.txt

Gebruik de vooraf gedefinieerde aliassen om Ansible-collecties en Ansible-rollen te installeren:

phx-collections
phx-roles

Deze stap zorgt ervoor dat alle vereiste Ansible-componenten zijn geïnstalleerd in de virtuele omgeving, wat schaalbaarheid en consistentie bevordert.

Stap 6: Ansible Vault-wachtwoord instellen

Om gebruiker tony Ansible te laten gebruiken, moet hij het Ansible Vault-wachtwoord van de inventaris instellen, wat secret is. Hij gebruikt de phx-vault-password-functie:

phx
phx-vault-password

De onderstaande output toont het resultaat van het uitvoeren van het commando:

(pxd) tony@pxd-ubuntu-devtop:~/git/gitlab/c2/ansible-phx$ phx
phx-vault-password
Password doesn't exist or is empty, lets add/set it!
Password:
Vault password has been set.
(pxd) tony@pxd-ubuntu-devtop:~/git/gitlab/c2/ansible-phx$

Als je het commando voor de eerste keer uitvoert, word je gevraagd een wachtwoord in te stellen voor de GNOME Keyring1. Het Ansible Vault-wachtwoord wordt daar opgeslagen voor gemak (je hoeft het wachtwoord niet elke keer op te geven wanneer je Ansible gebruikt) en ook beveiliging. Het is een veilige plek. De onderstaande screenshot toont de GNOME Keyring-prompt die vraagt om wachtwoord en wachtwoordbevestiging.

Dit handhabt gevoelige gegevens veilig, volgens best practices voor geheimbeheer in Ansible. Voor meer details, zie:

Stap 7: Ansible ping

Controleer de opzet door een Windows-host te pingen:

ansible -m win_ping pxd-ad

Controleer de opzet door een Linux-host te pingen:

ansible -m ping pxd-ubuntu-devtop
Toon me
(pxd) tony@pxd-ubuntu-devtop:~/git/gitlab/c2/ansible-phx$ ansible -m win_ping pxd-ad
[WARNING]: Collection ansible.windows does not support Ansible version 2.15.3
pxd-ad | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
(pxd) tony@pxd-ubuntu-devtop:~/git/gitlab/c2/ansible-phx$ ansible -m ping pxd-ubuntu-devtop
pxd-ubuntu-devtop | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Windows- en Linux-hosts benaderen met Kerberos en SSH

Deze sectie test Ansible-plays om Kerberos-authenticatie via SSH voor zowel Linux- als Windows-hosts te bevestigen. Voer de volgende plays uit, die zonder fouten moeten slagen:

ansible-playbook plays/mgmt/ad.yml
ansible-playbook plays/core/win.yml --limit pxd-win1
ansible-playbook plays/mw/reverse_proxy.yml

Om te bevestigen dat Kerberos is gebruikt, vernietig je ticket:

kdestroy

Controleer of er geen actieve tickets meer zijn:

klist
Toon me
(pxd) tony@pxd-ubuntu-devtop:~/git/gitlab/c2/ansible-phx$ kdestroy
(pxd) tony@pxd-ubuntu-devtop:~/git/gitlab/c2/ansible-phx$ klist
klist: No credentials cache found (filename: /tmp/krb5cc_149801104_45UGBy)

Het opnieuw uitvoeren van de laatste play zal mislukken zonder ticket:

ansible-playbook plays/mw/reverse_proxy.yml
(pxd) tony@pxd-ubuntu-devtop:~/git/gitlab/c2/ansible-phx$ ansible-playbook plays/mw/reverse_proxy.yml
ini_path: /home/tony@c2.org/git/gitlab/c2/ansible-phx/hosts.ini
[DEPRECATION WARNING]: community.general.yaml has been deprecated. The plugin
has been superseded by the the option `result_format=yaml` in callback plugin
ansible.builtin.default from ansible-core 2.13 onwards. This feature will be
removed from community.general in version 13.0.0. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.

PLAY [Reverse proxy] ***********************************************************

TASK [Gathering Facts] *********************************************************
fatal: [pxd-rproxy1]: UNREACHABLE! => changed=false
  msg: 'Failed to connect to the host via ssh: tony@pxd-rproxy1.c2.org: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).'
  unreachable: true

PLAY RECAP *********************************************************************
pxd-rproxy1                : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0

Maak voor je verdergaat een forwardable ticket opnieuw aan:

kinit -f

Hosts benaderen met SSH voor Linux en WinRM met basisauthenticatie voor Windows

Deze opzet bootst na hoe Vagrant verbinding maakt met boxes met basisauthenticatie (met gebruiker vagrant). Stel de inventaris in:

export ANSIBLE_INVENTORY="Vagrantfile.yml,hosts.ini"

Voer de plays uit de vorige sectie opnieuw uit. Ze moeten zonder fouten provisionen.

Windows-hosts benaderen met Kerberos en WinRM

Deze configuratie gebruikt SSH voor Linux en Kerberos WinRM voor Windows. Stel de inventaris in:

export ANSIBLE_INVENTORY="Vagrantfile.yml,hosts.ini,hosts-kerberos-override.ini,hosts-kerberos-winrm-override.ini"

Voer de plays uit de Kerberos SSH-sectie opnieuw uit. Ze moeten slagen, wat Kerberos WinRM voor Windows bevestigt.

Review

Gebruiker tony werkt met een aangepaste Ansible-configuratie via zijn .bash_aliases met de ANSIBLE_INVENTORY-variabele en een apart Ansible-configuratiebestand hosts-kerberos-override.ini, dat hij toevoegt aan de inventaris door het op te nemen in ANSIBLE_INVENTORY, waarmee de normale/standaard instellingen worden overschreven.

 plays/dev/files/.bash_aliases

11export ANSIBLE_INVENTORY="Vagrantfile.yml,hosts.ini,hosts-kerberos-override.ini"

 hosts-kerberos-override.ini

18[linux:vars]
19ansible_connection=ssh
20ansible_kerberos=yes
21ansible_user=
22ansible_password=
23
24[win:vars]
25ansible_connection=ssh
26ansible_kerberos=yes
27ansible_shell_type=powershell
28# ansible_shell_executable=cmd.exe
29ansible_user=
30ansible_password=

Om de standaardopzet te activeren die Vagrant gebruikt, om SSH te gebruiken voor Linux-hosts en WinRM voor Windows-hosts met basisauthenticatie:

export ANSIBLE_INVENTORY="Vagrantfile.yml,hosts.ini"

 hosts.ini

10[linux:vars]
11ansible_user=vagrant
12ansible_password=vagrant
13
14[win:vars]
15#ansible_connection=ssh
16#ansible_shell_type=cmd
17ansible_user=vagrant
18ansible_password=vagrant
19ansible_connection=winrm
20#ansible_port=5985
21ansible_winrm_transport=basic
22ansible_winrm_server_cert_validation=ignore

Om SSH te gebruiken voor Linux-hosts en WinRM voor Windows-hosts met Kerberos- authenticatie:

export ANSIBLE_INVENTORY="Vagrantfile.yml,hosts.ini,hosts-kerberos-override.ini,hosts-kerberos-winrm-override.ini"

 hosts-kerberos-winrm-override.ini

4[win:vars]
5ansible_connection=winrm
6ansible_kerberos=yes
7ansible_winrm_transport=kerberos

Aanvullende informatie


  1. GNOME Keyring is een veilige opslagdaemon voor het beheren van wachtwoorden, sleutels en certificaten in GNOME-gebaseerde Linux-omgevingen. Het biedt versleutelde opslag en automatische ontgrendeling tijdens gebruikersessies, wat de beveiliging van gevoelige gegevens zoals Ansible Vault-wachtwoorden verbetert. ↩︎