Zum Hauptinhalt

Hiera-eyaml, die eingebaute Verschlüsselung für sensible Daten in Puppet

Hiera-eyaml erweitert Hiera um die Möglichkeit Werte verschlüsselt in der YAML Datei abzulegen. Dazu wird die Verschlüsselungstechnologie PKCS7 genutzt.

Kategorien: Automatisierung
Schwierigkeit: einfach Serie: Secretmanagement mit Puppet Teil 1 von 2

Was ist Hiera?

Puppet nutzt Hiera um Daten als Schlüssel-Wert-Paare zu speichern. Diese können aus dem Code nachgeschlagen und dann in den Puppet Katalog kompiliert werden. Mit hiera ist es möglich sensible Daten wie Passwörter seperat abzulegen, jedoch nicht diese durch Verschlüsselung abzusichern. Hier kommt hiera-e(ncrypted)yaml ins Spiel.

Die Hiera-Erweiterung e(ncrypted)yaml

Hiera-eyaml (https://github.com/voxpupuli/hiera-eyaml) ist ein Hiera-Backend, das mit Puppet ab Version 5 ausgeliefert wird. Es ist die Standardlösung, um Passwörter und andere sensible Daten in Puppet zu verwalten. Mit Hiera-eyaml werden Werte verschlüsselt in Hiera gespeichert und bei Bedarf auf dem Puppet Server entschlüsselt und im Katalog abgelegt.

Konfiguration von Hiera-eyaml

Hiera-eyaml wird in der hiera.yaml Datei im control-repo konfiguriert. Eine Konfiguration könnte wie folgt aussehen:

---
version: 5
defaults:
  datadir: data 
hierarchy:
  - name: "Eyaml hierarchy"
    lookup_key: eyaml_lookup_key # eyaml backend aktivieren
    paths:
      - "nodes/%{trusted.certname}.yaml"
      - "common.yaml"
    options:
  :pkcs7_private_key: /etc/puppetlabs/puppet/keys/private_key.pkcs7.pem
  :pkcs7_public_key: /etc/puppetlabs/puppet/keys/public_key.pkcs7.pem

Die Konfiguration erklärt

Zeile 2: Die Version der Hiera Konfiguration

Zeile 3: Der default Hash mit Standardwerten beginnt

Zeile 4: Das Datenverzeichnis, data auf der gleichen Ebene wie die Config.

Zeilen 5-10: Das erstellen der Hierachie und das festlegen des Lookup Keys, diese Option aktiviert eYAML

Zeilen 11-13: Das Hinterlegen der eYAML Schlüssel

Das Schlüsselpaar erzeugen

Hiera-eyaml kommt mit dem eyaml Kommando, das uns den Umgang mit eyaml erleichtert. Zuerst erzeugen wir das benötigte Schlüsselpaar:

Dadurch werden die Keys in dem von uns in der hiera.yaml angegebenen Verzeichnis angelegt. Der private Schlüssel dient dem Entschlüsseln und sollte sicher abgelegt werden und nie abseits der Puppet Server genutzt werden. sind mehrere Puppetserver vorhanden, benötigen alle das Schlüsselpaar. Der öffentliche Schlüssel dient dem verschlüsseln und kann im control-repo versioniert werden.

/opt/puppetlabs/puppet/bin/eyaml createkeys --pkcs7-keysize=6192 --pkcs7-digest=SHA512 --pkcs7-private-key=/etc/puppetlabs/puppet/keys/private_key.pkcs7.pem --pkcs7-public-key=/etc/puppetlabs/puppet/keys/public_key.pkcs7.pem

[hiera-eyaml-core] Created key directory: /etc/puppetlabs/puppet/keys
[hiera-eyaml-core] Keys created OK

sudo chown -R puppet:puppet /etc/puppetlabs/puppet/keys

Werte mit eyaml verschlüsseln 

Hiera eyaml unterstützt die beiden Formate String und Block Notation

Enter password: ***

/opt/puppetlabs/puppet/bin/eyaml encrypt -l class::parameter -p
class::parameter:
ENC[PKCS7,MIIDfwYJKoZIhvcNAQcDoIIDcDCCA2wCAQAxggMnMIIDIwIBADAFMA
CAQEwDQYJKoZIhvcNAQEBBQAEggMGkYrbPkbvcUIqVGdXkMAkDwpzKe24+/JCtHf
NZBcN5YZHPzmhHSALFqWX6XSBaYJUQfikEfAbXHKPVq8Ea6ap6KDMU5aHwNlVHlA
ec54C4q/kNQQg53ilyLt+8E+k7XLzhl8k7I1s5oiQqty/hh9cDbmWJ5fnCmzt9Oh
DqK+a+Ddaojlo4aNvj/JXMdPn8ZENihbTehyMk0qq8aIPTXW46jEgXmXfoYBdQE+
830+OWfRebwUrYN2B7e20iLfnF6abVhuPGcdQ3qNzpB6Lko63YM/Q2hLQwDPN1uO
BrnbYw/Ujk+j+ZfUePVIvKA+u0khj3ljKg0M2fQEqbWwVWFmGqT23XA80LtFDfAV
vXchp/S/Qhr3Zah3U4dRFd92+wNBLwQngD2xLibzCSM5OrL4VBFvhrqwAOo8e7yT
pUB+e2GMNavcHfCQGbg8fpAn3Di/YgBamSo95yU0gY5k6QOdGCtffBDqvWpKRu6S
5/FaV005BBY8Cfr57oPHp93sILNmx4JEya0po3xnny/vor+kcuqGWP1vMSeRorRD
l55UzBJ04UayzhGwKbf5XAwrFJ8C+h1H/spV0wsFP8ocsl1oJ/Y1ErsE3fF44dat
Z1+R34vEmExFqlFvQgVV7rrDVVHEw/xs1q145Q1c+u7MtrZmJ8BFOFJHdd0RiONe
l1ILgAmYikYmd4pCr7nii26oZHdQfPnHotOsTBTf3w4WIcFy0ALhICT6DVd8YiYG
CMjoZnxZrAr39Tg86sFIKSuWC+pGZ1BM5uIG/CYyfhBgJ+ig8TdmRSrO6AqRx94U
TNs34EGIGxGfGpN8OLLbDOUpTn1Aa2yyVq2S76NiQwoPdkdCdmdYISSKOzxt508s
WzBLqQ0DnXnfBLLMh5fQDD0gd/pjx+xYiuz3awXkWnK7bRJZJpjjrwiYNFjwtg7+
Lse8yVvyG4l7LOOdDyWdeKZcCtAUQ+zLBwQ23C8XNBwG3YWIehQWmhcc3rFfMqsF
k8TfDh2wmWqM6lN9qZY9bMDwGCSqGSIb3DQEHATAdBglghkgBZQMEASoEEMuRMja
r8NI+EwJ81/rGGCAECJv2efhWyoqjyTJTSpX1Pc=]

oder

class::parameter: >
  ENC[PKCS7,MIIDfwYJKoZIhvcNAQcDoIIDcDCCA2wCAQAxggMnMIIDIwIBAD
  AFMAACAQEwDQYJKoZIhvcNAQEBBQAEggMGkYrbPkbvcUIqVGdXkMAkDwpzKe
  24+/JCtHfSNZBcN5YZHPzmhHSALFqWX6XSBaYJUQfikEfAbXHKPVq8Ea6ap6
  KDMU5aHwNlVHlAfec54C4q/kNQQg53ilyLt+8E+k7XLzhl8k7I1s5oiQqty/
  hh9cDbmWJ5fnCmzt9OhcDqK+a+Ddaojlo4aNvj/JXMdPn8ZENihbTehyMk0q
  q8aIPTXW46jEgXmXfoYBdQE+2830+OWfRebwUrYN2B7e20iLfnF6abVhuPGc
  dQ3qNzpB6Lko63YM/Q2hLQwDPN1uOkBrnbYw/Ujk+j+ZfUePVIvKA+u0khj3
  ljKg0M2fQEqbWwVWFmGqT23XA80LtFDfAVYvXchp/S/Qhr3Zah3U4dRFd92+.
  wNBLwQngD2xLibzCSM5OrL4VBFvhrqwAOo8e7yTGpUB+e2GMNavcHfCQGbg8
  fpAn3Di/YgBamSo95yU0gY5k6QOdGCtffBDqvWpKRu6SU5/FaV005BBY8Cfr
  57oPHp93sILNmx4JEya0po3xnny/vor+kcuqGWP1vMSeRorRDDl55UzBJ04U
  ayzhGwKbf5XAwrFJ8C+h1H/spV0wsFP8ocsl1oJ/Y1ErsE3fF44datWZ1+R3
  4vEmExFqlFvQgVV7rrDVVHEw/xs1q145Q1c+u7MtrZmJ8BFOFJHdd0RiONey
  l1ILgAmYikYmd4pCr7nii26oZHdQfPnHotOsTBTf3w4WIcFy0ALhICT6DVd8
  YiYGbCMjoZnxZrAr39Tg86sFIKSuWC+pGZ1BM5uIG/CYyfhBgJ+ig8TdmRSr
  O6AqRx94UWTNs34EGIGxGfGpN8OLLbDOUpTn1Aa2yyVq2S76NiQwoPdkdCdm
  dYISSKOzxt508skWzBLqQ0DnXnfBLLMh5fQDD0gd/pjx+xYiuz3awXkWnK7b
  RJZJpjjrwiYNFjwtg7+HLse8yVvyG4l7LOOdDyWdeKZcCtAUQ+zLBwQ23C8X
  NBwG3YWIehQWmhcc3rFfMqsFIk8TfDh2wmWqM6lN9qZY9bMDwGCSqGSIb3DQ
  EHATAdBglghkgBZQMEASoEEMuRMjavr8NI+EwJ81/rGGCAECJv2efhWyoqjy
  TJTSpX1Pc=]

Der Wert hat folgendes Format ENC[PKCS7,Wert], wobei PKCS7 für die Verschlüsselungsmethode steht.

Schauen wir uns kurz die Parameter an:

-l steht für das Label, also der Schlüssel der in Hiera nachgeschlagen werden soll

-p sorgt dafür das der Wert von einem Passwort Prompt eingelesen wird und so nicht in der History landet.

Darüber hinaus ist es noch möglich YAML Dateien direkt mit 

/opt/puppetlabs/puppet/bin/eyaml edit data/nodes/node.example.com.yaml

zu editieren:

# | This is eyaml edit mode. This text (lines starting with 
# | '#' at the top of the file) will be removed when you save
# | and exit.
# |  - To edit encrypted values, change the content of the DEC(<num>)::PKCS7[]!
# |    block.
# |    WARNING: DO NOT change the number in the parentheses.
# |  - To add a new encrypted value copy and paste a new block from the
# |    appropriate example below. Note that:
# |     * the text to encrypt goes in the square brackets
# |     * ensure you include the exclamation mark when you copy and paste
# |     * you must not include a number when adding a new block
# |    e.g. DEC::PKCS7[]!
---
class::parameter: DEC::PKCS7[foo]!

Der zu verschlüsselnde Wert wird beim Speichern der Datei verschlüsselt, und sieht nachher so aus:

class::parameter:
ENC[PKCS7,MIIDfwYJKoZIhvcNAQcDoIIDcDCCA2wCAQAxggMnMIIDIwIBADAFMA
CAQEwDQYJKoZIhvcNAQEBBQAEggMGxVecrM655/LzNSUbRfrJh0OBSKFyDn7jmeC
RIbK46tWBtw+0r9Qc8hmQX6yzqZPKeullPJ+3s62G9sB2gFooIWAvYmjGp61hGb8
FGKctQgvWsW6mzaFtRuAkc0qPyWTHB+13RnksDvCIgsPugBTkoXABMi1a+lz8HIf
tBgKgqFZ8HBFBlr4bt8uDEg/phBVU7lFNCLg4NTvR/ll47GqyEsrP/jM0a/olZrN
srn0uafatI+YaXm35ooa3RKAvkSBphSH2GAwRW9NNAnbU7EOKK1x4jXLnL7iORIY
WjzbJEBLlK70NOAyuwTShIAL5nV/eJOow7IcAQXNZy9uccauHv6GBId8ZJsGZMOg
TW0heo2OlN9i156zyBXefL0tvPMQLKcLk4ezjyU7KPyx6RhLcCOD2LPJkl8ijq/t
MyyRX1Bqjchhhf0Wo7uDKUr/pEKwS13vNi05m3ibY+BSesLBL25BwA6vkyUCdm3D
KSIej+h4LjSTQQPyug/UEBcxM81a+Eez6QRT08N7gJheDoC6BijUKVJ1fweuwWLI
5SXjAJzzl2gVCraKQdu54AySR8iX2ZvyRLUzRPy9sPpchfrG1KgSjGk3dscc1dwR
1H/UxANFxWY+CHhPTHAvOiaUV5UQM/29hzfebknK1tu+FB/Sma8GNM1cbSwQgnk6
bHAy93b5KrwVvA9dl33s4Hr9ajuDFeQX8udHJz/EpZ/rybfVrrmt+P3gaJVv3sT3
tASnyh47omp4Z/HTAcCxizJdHdlXXDsPw5G/yauysaA2P3rVg6yVBn08Dxa/xd/o
cfpvTUuAu/4a+Djx4tXF0J3TtfMylWnpeR6O/bacWlXbqSyAUbrHs4sXpIHwVG/w
CMGCkqvOFrjhw9+bSVfRJT36hjQt2pTiqVW5VOWp6pyY118121yNrbrrObpq7b4s
ysKEKAyNt+3yRonkA8S9dyGR0wbqnyxJnXROaYtij2L9qrbqKQemxkyVZjuuCAew
jNa/9k8nhiasgMwQsyS2AMDwGCSqGSIb3DQEHATAdBglghkgBZQMEASoEEPgvo9m
5eZ1Ps1cBPGmGPWAEEgevhYeVXyWiPjWQYCwE58=]

Hiermit endet der erste Teil meiner Blogserie zum Passwortmanagement mit Puppet. Viel Erfolg und Spass beim Ausprobieren. Bei weiteren Fragen oder wenn Sie Unterstützung benötigen, nehmen Sie gerne Kontakt auf.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert