Beveilig uw geheimen met Ansible Vault

Je geheimen beschermen tegen verkeerde handen is een topprioriteit. Maar hoe beveilig je precies je geheimen? Opslaan op een lokaal tekstbestand? Zonder versleuteling is die optie te riskant. Waarom gebruik je niet Ansible Vault om je variabelen en bestanden te versleutelen?

In deze tutorial leer je hoe je gevoelige inhoud, zoals wachtwoorden of sleutels, kunt beveiligen met Ansible Vault.

Lees verder en houd nieuwsgierige ogen weg van je geheimen!

Vereisten

Deze tutorial zal een hands-on demonstratie zijn. Als je wilt meedoen, zorg er dan voor dat je het volgende hebt.

  • A Linux machine – This tutorial uses Ubuntu 20.04, but any Linux distribution will work.
  • Ansible geïnstalleerd op je machine.

Configuratie van de standaard Ansible Vault-editor

Als systeembeheerder werk je mogelijk aan verschillende Ansible-playbooks met verschillende gebruikersnamen en wachtwoorden voor verschillende servers. Je kunt deze bestanden niet in platte tekst indienen bij het versiebeheersysteem omdat het onbeveiligd is. En om die reden komt Ansible Vault van pas.

Ansible Vault is ontworpen om te worden geïntegreerd in je bestaande workflow om je gegevens op te slaan in een versleuteld bestand. Maar voordat je je eerste Ansible Vault maakt, moet je je standaard Ansible Vault-editor instellen.

1. Open je terminal en SSH naar je machine.

2. Open vervolgens het bestand ~/.bashrc met een teksteditor. Het bestand ~/.bashrc is een shell-script dat wordt uitgevoerd telkens wanneer een nieuwe terminalsessie start. Dit shell-script initialiseert een interactieve shellsessie en definieert omgevingsvariabelen.

3. Voeg de volgende regel toe aan het einde van het bestand ~/.bashrc, sla de wijzigingen op en sluit de editor af.

Deze regel stelt de EDITOR-variabele in voor de momenteel ingelogde gebruiker. De EDITOR-variabele zorgt ervoor dat uw voorkeursteksteditor wordt gebruikt telkens wanneer u een nieuwe terminalsessie opent.

U kunt elke andere teksteditor instellen die u verkiest, maar deze handleiding gebruikt de nano teksteditor.

export EDITOR=nano
Setting the Default Text Editor

4. Voer tot slot de volgende commando’s uit om de wijzigingen toe te passen (source) zonder uit te loggen en weer in te loggen, en om de huidige standaardteksteditor van uw systeem af te drukken (echo).

# Laadt de omgevingsvariabele in uw huidige shellsessie.
source ~/.bashrc
# Drukt de huidige standaardteksteditor van uw systeem af.
echo $EDITOR

Controleer of de EDITOR-variabele is ingesteld op uw voorkeurseditor, zoals hieronder weergegeven.

Applying and Verifying Changes

Uw eerste Ansible Vault maken en versleutelen

Je hebt je standaardkluis-editor ingesteld, dus het is tijd om je eerste kluis te maken. Je gaat een bestand maken en versleutelen dat gevoelige informatie bevat, zoals gebruikersnamen, wachtwoorden, geheime toegangssleutels, enzovoort.

Je zult het ansible-vault-commando uitvoeren, de belangrijkste interface voor interactie met Ansible Vaults.

1. Voer het volgende commando uit om het bestand secret.yml te maken. Ansible gebruikt YAML, een meer menselijk leesbaar formaat in vergelijking met andere gegevensformaten zoals JSON.

ansible-vault create secret.yml

Je wordt gevraagd om een wachtwoord in te voeren en te bevestigen voor het bestand. Dit wachtwoord gebruik je later om het bestand secret.yml te versleutelen en ontsleutelen, dus zorg ervoor dat je een sterk wachtwoord kiest dat je kunt onthouden.

Creating the secret.yml File with a Password

2. Nadat je het wachtwoord van de kluis hebt ingesteld, opent je standaard teksteditor een leeg bestand. Voer gevoelige informatie in die je in het bestand wilt opslaan, sla het op en sluit de editor.

Deze tutorial slaat de aws_access_key- en aws_secret_key-variabelen op in het bestand secret.yml. Op dit punt versleutelt Ansible het bestand secret.yml, en niemand anders kan de inhoud van de kluis lezen, tenzij ze het wachtwoord van de kluis kennen.

Providing Sensitive Information (secrets)

3. Voer het cat-commando uit om te proberen de inhoud van het bestand secret.yml te bekijken zonder het wachtwoord.

cat secret.yml

Je kunt verifiëren dat de inhoud van het bestand is versleuteld als je willekeurige getallen ziet, zoals hieronder weergegeven. De header $ANSIBLE_VAULT;1.1;AES256 bovenaan het bestand geeft aan dat het bestand is versleuteld met Ansible Vault met het AES256-cijfer.

De Advanced Encryption Standard (AES) is een symmetrisch algoritme dat dezelfde sleutel gebruikt om gegevens te versleutelen en te ontsleutelen.

Viewing the secret.yml file Without the Vault’s Password

Bestaande bestanden versleutelen

Je hebt een bestand vanaf nul gemaakt dat automatisch is versleuteld. Maar hoe zit het met het versleutelen van bestaande bestanden? Ansible biedt ook de encrypt-subopdracht om een gespecificeerd bestand te versleutelen. Om te zien hoe je een bestaand bestand versleutelt, versleutel je een specifiek bestand dat Ansible-variabelen bevat.

Voer de volgende opdracht uit om een bestand (vars.yml) te versleutelen.

ansible-vault encrypt vars.yml

Net als toen je het secret.yml-bestand de eerste keer maakte, wordt je nu gevraagd om een wachtwoord in te voeren voor het vars.yml-bestand.

De standaardeditor wordt deze keer niet geopend omdat het vars.yml-bestand al bestaat. In plaats daarvan ontvang je het bericht Versleuteling succesvol wat aangeeft dat Ansible het bestand heeft versleuteld, zoals hieronder weergegeven.

Encrypting an Existing File (vars.yml)

Voer nu de onderstaande cat-opdracht uit om te controleren of Ansible het vars.yml-bestand heeft versleuteld.

cat vars.yml
Verifying Encrypted Existing File

Gegevens ontsleutelen uit Ansible Vault

Je hebt gezien hoe je bestanden kunt versleutelen, waardoor ze veilig worden. Maar hoe ontsleutel je je bestanden als je de inhoud wilt bekijken? Het ontsleutelen van een bestand is handig wanneer je een versleuteld bestand wilt bewerken of de inhoud ervan wilt lezen zonder telkens het wachtwoord op te geven. En de decrypt-subopdracht van Ansible komt goed van pas.

1. Voer de volgende opdracht uit om het bestand secret.yml te ontsleutelen.

De ontsleutelingsopdracht neemt het pad van een versleuteld bestand als enige argument.

ansible-vault decrypt secret.yml

Geef het wachtwoord voor het bestand op en de inhoud van het bestand wordt ontsleuteld en als platte tekst naar de schijf geschreven.

Decrypting File Data

2. Voer vervolgens het cat-commando uit om de ontsleutelde inhoud van het bestand secret.yml te bekijken.

cat secret.yml

Je kunt hieronder de inhoud van het secret.yml-bestand zien die naar het terminalvenster wordt afgedrukt zonder enige versleuteling. Op dit punt kun je naar hartenlust regels toevoegen, bewerken of verwijderen in het bestand.

file to your heart’s content

3. Voer tot slot de onderstaande opdracht uit om het secret.yml -bestand te versleutelen en geef een wachtwoord op om de inhoud van het bestand veilig te houden.

ansible-vault encrypt secret.yml
Encrypting a Decrypted File (secret.yml)

Het Wachtwoord van de Ansible Vault Bijwerken

Je hebt gezien dat je telkens een wachtwoord moet invoeren wanneer je bestanden versleutelt en ontsleutelt. Maar misschien wil je alleen het wachtwoord van het bestand bijwerken zonder het bestand te ontsleutelen. Als dat het geval is, moet je de rekey-subopdracht gebruiken. Met deze subopdracht kun je naar believen het wachtwoord van je bestand wijzigen.

Voer de volgende opdracht uit om het wachtwoord voor het bestand secret.yml bij te werken.

Het rekey-subcommando neemt het pad van een versleuteld bestand als enige argument.

ansible-vault rekey secret.yml

Vermeld het huidige wachtwoord voor het bestand gevolgd door het nieuwe wachtwoord, zoals hieronder weergegeven.

Op dit punt zal het oude wachtwoord niet meer werken om het bestand te decoderen.

Updating Ansible Vault’s Password

Voer nu de onderstaande opdracht uit om te proberen het bestand secret.yml te decoderen.

ansible-vault decrypt secret.yml

Vermeld het oude wachtwoord wanneer daarom wordt gevraagd, en je zult een foutmelding zien waarin staat dat de Decodering mislukt, zoals hieronder weergegeven. Deze uitvoer bevestigt dat het wachtwoord voor het bestand succesvol is bijgewerkt.

Verifying New Password is in Effect

Het gebruik van Beveiligde Gegevens in Playbooks en Modules

Je hebt gezien dat het uitvoeren van opdrachten om bestanden te versleutelen en decoderen werkt. Maar als je het proces veilig wilt automatiseren voor je toepassing, moet je playbooks en modules gebruiken.

1. Open het Ansible-configuratiebestand (~/.ansible.cfg) in je editor, dat de instellingen voor Ansible bevat.

Kopieer en plak de volgende code aan het einde van het ~/.ansible.cfg-bestand, sla de wijzigingen op en sluit de editor. Deze code vertelt Ansible om het inventarisbestand (~/.ansible-hosts) te zoeken.

[defaults]
hostfile = ~/.ansible-hosts

2. Open vervolgens het ~/.ansible-hosts-bestand, dat het inventaris van hosts bevat die je Ansible-beheerknooppunt kan beheren.

Vul het ~/.ansible-hosts-bestand in met de volgende regel code, sla de wijzigingen op en sluit het bestand. Deze code vertelt Ansible dat het het localhost kan beheren via het lokale verbindingsstype.

localhost ansible_connection=local

3. Voer de onderstaande opdracht uit om een nieuw versleuteld bestand aan te maken. Je kunt het bestand een willekeurige naam geven, maar in deze handleiding wordt het bestand helloworld.yml genoemd.

ansible-vault create helloworld.yml
Creating Ansible Playbook (helloworld.yml)

Vul de onderstaande code in het bestand helloworld.yml in, sla de wijzigingen op en sluit de editor.

Deze code is een eenvoudig Ansible playbook dat het bericht hello world afdrukt op alle hosts in je inventaris. Het — symbool bovenaan het codeblok geeft het begin van een YAML-document aan.

---

- hosts: all # Stelt in om de taak uit te voeren voor alle hosts in de inventaris
  tasks: # Stelt de taken in om uit te voeren
    - shell: echo 'hello world' # Drukt een 'hello world' bericht af

4. Voer tot slot de ansible-playbook-opdracht hieronder uit, gevolgd door de opties –ask-vault-pass, om het helloworld.yml playbook uit te voeren op alle hosts in je inventaris.

ansible-playbook --ask-vault-pass helloworld.yml

Geef het wachtwoord voor het bestand helloworld.yml wanneer daarom wordt gevraagd. Zoals je hieronder kunt zien, is je playbook met succes uitgevoerd.

  • ok=2 – geeft aan dat beide taken succesvol zijn uitgevoerd.
  • changed=1 – geeft aan dat je taak één wijziging heeft aangebracht in de toestand van je systeem. In dit geval heeft het een hello world bericht naar de shell geschreven.
  • unreachable en failed zijn beide 0 – geeft aan dat er tijdens de uitvoering geen hosts onbereikbaar of mislukt waren.
Running your playbook

Het gebruik van Ansible Vault met een wachtwoordbestand

Hoewel het handmatig invoeren van een wachtwoord bij het uitvoeren van eenmalige taken werkt, is het niet praktisch voor gebruik in de echte wereld.

A better way to provide the password for encrypting and decrypting files is to use a password file. This way, you can store the password in a secure location, and Ansible will read the password from the file needed.

1. Voer de onderstaande opdracht uit om het wachtwoord van Ansible Vault op te slaan in een bestand met de naam .vault_pass. Vervang ‘my_vault_password’ door je daadwerkelijke vault-wachtwoord.

echo 'my_vault_password' > .vault_pass

2. Voer vervolgens elke onderstaande opdracht uit om de eigenaar (met chown) van het bestand te wijzigen naar root en de machtigingen van het bestand .vault_pass aan te passen. Deze opdrachten zorgen ervoor dat alleen jij (de root-gebruiker) het bestand kan lezen en schrijven.

# Wijzig de eigenaar van het bestand naar de root-gebruiker
chown root:root .vault_pass
# Wijzig de bestandsmachtigingen naar alleen root (lees- en schrijfmachtigingen)
chmod 700 .vault_pass

3. Voer tot slot de onderstaande ansible-playbook opdracht uit, gevolgd door de –vault-password-file optie om een playbook (helloworld.yml) uit te voeren met een wachtwoordbestand (.vault_pass).

ansible-playbook --vault-password-file=.vault_pass helloworld.yml

Let op dat Ansible het playbook heeft uitgevoerd zonder te vragen om het wachtwoord van het versleutelde bestand.

Running Playbook using a Password File

Conclusie

In deze tutorial heb je geleerd hoe je Ansible Vault kunt gebruiken om gevoelige gegevens te versleutelen en decoderen voor Ansible-playbooks en taken. Je hebt het wachtwoord van Ansible Vault opgeslagen op een veilige locatie met behulp van een wachtwoordbestand. Deze werkwijze is handig voor minder gebruikersinterventie bij het uitvoeren van een playbook.

Met deze nieuwe kennis kunt u nu vol vertrouwen gevoelige gegevens versleutelen en uw playbooks delen met anderen zonder u zorgen te maken over de beveiliging van uw gegevens.

Als u LastPass gebruikt voor wachtwoordbeheer, waarom zou u dan niet uw Ansible Vault-wachtwoord in LastPass opslaan en Ansible het automatisch laten ophalen wanneer dat nodig is?

Source:
https://adamtheautomator.com/ansible-vault/