Added ansible-vault info

This commit is contained in:
Maurice Makaay 2020-02-07 12:38:46 +00:00
parent 61a1d86049
commit a96e2f01b1
1 changed files with 88 additions and 13 deletions

101
README.md
View File

@ -4,7 +4,7 @@
* Doel van de demo: LXD + Ansible + Galera cluster
* Installatie VM's voor de demo
* Netwerktopologie
* LXD clustering
* LXD clustering vs LXD remotes
* De Ansible container
* Ansible-vault voor opslag secrets
* Dynamische inventory
@ -65,9 +65,39 @@ maar die kunnen zonder blikken of blozen naar de slachtbank.
# Installatie VM's voor de demo
* 2 VM's: sidn-demo-01, sidn-demo-02
* virtual machine met NAT netwerk: 192.168.56.0/24, gateway/DNS 192.168.56.1
* virtual machine met 2 KVM netwerken gekoppeld:
* NAT netwerk: 192.168.56.0/24, gateway/DNS 192.168.56.1
* Host-only netwerk: 10.0.0.0/24
* Ubuntu 18.04 LTS
#### Host-only netwerk
Het NAT netwerk is standaard beschikbaar, maar het host-only netwerk moest ik
nog met de hand aanmaken.
```text
# sudo apt-get install bridge-utils
# vi /etc/network/interfaces (onderstaande daaraan toegevoegd)
auto br-host
iface br-host inet static
address 10.0.0.1
netmask 255.255.255.0
pre-up brctl addbr br-host
post-down brctl delbr br-host
# echo '<network><name>host-only</name><bridge name="bg-host" /></network>' > /tmp/net.xml
# virsh net-define /tmp/net.xml
# virsh net-start host-only
# virsh net-autostart host-only
# virsh net-list --all (om te controleren of het er goed uitziet)
Name State Autostart Persistent
------------------------------------------------
nat active yes yes
host-only active yes yes
```
#### Upgrade na installatie
```text
@ -349,7 +379,7 @@ steeds wel handmatig inrichten zoals hierboven, alleen dan met een loopback
bridge met een duidelijk naam als "br-local" of "br-private".
#### Aanmaken LXD profile voor de demo
#### Gebruik van LXD profiles voor de netwerk device configuratie
Op basis van de gevolgde lxd init methode, is er al een default profiel aangemaakt
voor LXD. Deze is heel erg basaal, omdat we geen netwerk bridge hebben geconfigureerd:
@ -370,7 +400,8 @@ used_by: []
```
Het beheer van profielen regelen we primair vanuit Ansible, maar op dit punt
van de demo maak ik met de hand een profiel aan.
van de demo maak ik met de hand een profiel aan, om te laten zien wat
Ansible hier onder water doet.
```text
sidn-demo-0X# lxc profile create demo
@ -416,9 +447,8 @@ gepusht met de cloud-init configuratie. En zelfs de netwerkconfguratie slechts
deels, omdat demodeze met de cloud-init van Ubuntu 14.04 nog niet mogelijk was.
# LXD clustering
Of beter gezegd: __geen__ LXD clustering.
# LXD clustering vs LXD remotes
Wij gebruiken __geen__ LXD clustering.
Een cluster zorgt er voornamelijk voor dat je een aantal LXD hosts aan elkaar
koppelt, die onderling gaan uitwisselen welke containers er op de hosts draaien.
@ -659,14 +689,59 @@ jinja2_extensions = jinja2.ext.do
pipelining = True
```
De vault_password_file wordt gebruikt als password file voor Ansible vault.
Met vault is het mogelijk om geheime informatie (normaliter: wachtwoorden)
op te slaan in gecrypte vorm. Het te gebruiken symmetrische wachtwoord is
opgeslagen in de password file. Bijvoorbeeld:
# Ansible vault voor opslag secrets
De bovengenoemde `vault_password_file` wordt gebruikt als password file voor
Ansible vault. Met vault is het mogelijk om geheime informatie (normaliter: wachtwoorden)
op te slaan in gecrypte vorm. Het te gebruiken symmetrische wachtwoord is opgeslagen in
de password file.
Bijvoorbeeld:
```text
ansible# echo "My very secret 1337 super passw0rd##" \
> /root/.ansible-vault-password
ansible# echo -n "My very secret 1337 super passw0rd##" > /root/.ansible-vault-password
ansible# chmod 600 /root/.ansible-vault-password
```
Hierna is het mogelijk om met het `ansible-vault` commando bestanden of losse strings
te encrypten. Ansible herkent automatisch dit soort crypted informatie bij het lezen
van de recipe yaml bestanden en decrypt ze automatisch voor gebruik in een run.
Wij maken alleen gebruik van de losse string encryptie op de volgende manier:
```text
# ansible-vault encrypt_string 'SECRET!'
Reading plaintext input from stdin. (ctrl-d to end input)
!vault |
$ANSIBLE_VAULT;1.1;AES256
64663430316333633466353834343736333634666137653034323538316536376435616339313539
3536373866656238393031663665353364346530313933610a616233386234323363346266643262
37613963346134313461396130643939353037323835383132663864636266623736393361393636
3533613531353763610a303633323961366361333165393339343464336335653162663963393837
646
```
De complete string vanaf `!vault ...` kun je in een yaml value plakken, bijv:
```yaml
---
user:
username: john
password: !vault |
$ANSIBLE_VAULT;1.1;AES256
64663430316333633466353834343736333634666137653034323538316536376435616339313539
3536373866656238393031663665353364346530313933610a616233386234323363346266643262
37613963346134313461396130643939353037323835383132663864636266623736393361393636
3533613531353763610a303633323961366361333165393339343464336335653162663963393837
646
```
Om wachtwoorden te genereren voor onze systemen, gebruiken we pwgen op deze manier:
```text
# ansible-vault encrypt_string $(pwgen 32 -c -n -1)
```
Hiermee genereren we direct een crypted string en het plain text wachtwoord is
zelfs onbekend, omdat het nergens op het scherm verschijnt. Als je wilt weten
welk wachtwoord het is geworden, dan is dat uiteindelijk natuurlijk wel binnen
Ansible recipes opvraagbaar.