Ansible met Kerberos opzetten op een PHX-ontwikkel-desktop

In het air-gapped PHX-domein maakt Kerberos veilige authenticatie mogelijk voor de Ansible-ontwikkelomgeving op een op Ubuntu 22/24 gebaseerde desktop, wat zowel het gemak als de beveiliging verbetert.

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 opzet 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:

Stap 1: Verbinding maken met Ansible-ontwikkel-desktop

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

Installeer de vereiste pakketten voor Kerberos en Python-ontwikkeling:

sudo apt install krb5-user libkrb5-dev python3-dev -y

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:

nano ~/.bash_aliases

Voeg de volgende inhoud toe (pas GIT_USER en GIT_MAIL aan indien nodig):

export ANSIBLE_INVENTORY=hosts-kerberos.ini
export EDITOR=nano
export GIT_USER='tclifton'
export GIT_MAIL='tony.clifton@dev.c2platform.org'
alias python='python3'
alias pip='pip3'
alias phx-env='source ~/.virtualenv/pxd/bin/activate'
alias phx-home='cd ~/git/gitlab/c2/ansible-phx'
alias phx='phx-home && phx-env'
alias phx-roles='phx && ansible-galaxy install -r roles/requirements.yml --force --no-deps -p roles/external'
alias phx-collections='phx && ansible-galaxy collection install -r collections/requirements.yml -p .'
alias phx-vault='ansible-vault edit secret_vars/development/main.yml'
# Function to securely set the Ansible Vault password using environment variable PX_ANSIBLE_VAULT_PASSWORD.
# The password will remain set for the duration of the shell session.
function phx-vault-password-env() {
    local password
    echo -n "Enter Ansible Vault passphrase: " >&2
    read -s password
    echo >&2  # Add a newline after the hidden input
    export PX_ANSIBLE_VAULT_PASSWORD="$password"
    echo "PX_ANSIBLE_VAULT_PASSWORD has been set for this shell session." >&2
    export ANSIBLE_VAULT_PASSWORD_FILE=/usr/local/bin/vault-client.sh
}
# Function to securely set the Ansible Vault password using GNOME Keyring.
# The password will remain for the user session
function phx-vault-password() {
    local pw=$(secret-tool lookup ansible vault 2>/dev/null)
    if [ -z "${pw}" ]; then
        echo "Password doesn't exist or is empty, lets add/set it!"
        pw=$(secret-tool store --label 'Ansible Vault Password' ansible vault >&2)
        echo "Vault password has been set." >&2
    else
        echo "Vault password is already set."
    fi
    export ANSIBLE_VAULT_PASSWORD_FILE=/usr/local/bin/vault-client-keyring.sh
}
export C2_HTTPS_SSH=https  # Use HTTPS for SSH operations
history -s ansible -i hosts.ini -m win_ping pxd-ad
history -s ansible -i hosts.ini -m ping pxd-rproxy1

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

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 geheim beheer in Ansible. Voor meer details, zie:

Stap 7: Ansible ping

Verifieer de opzet door een Windows-host te pingen:

ansible -m win_ping pxd-ad
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"
}

Stap 8: Ansible provisioning

phx
ansible-playbook plays/mgmt/ad.yml

Deze stap past het Ansible-playbook toe om resources te provisionen, wat PHX-operaties simuleert in je lokale omgeving.

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. ↩︎