Summon ist ein Werkzeug um Secrets als Umgebungsvariablen in einen Prozess zu injizieren. Summon ermöglicht es einem verschiedene Secret Provider zu verwenden und zwischen Umgebungen zu wechseln. Es erleichtert die Integration in verschiedene Umgebungen und macht z.B. Skripte zwischen Entwicklung und Produktion portabler.

Falls ihr zudem gopass verwendet ergibt das eine super Kombination!

Gopass kann ohne Modifikation als Summon Provider verwendet werden, da es alle Bedingungen erfüllt: gopass secretname gibt nur ein Secret zurück. Um gopass als Provider zu verwenden könnt ihr das gopass Binary einfach nach /usr/lib/summon linken. Falls ihr nur das Passwort in einem gopass Eintrag auslesen möchtet könnt ihr hier schon aufhören.

Gopass kann jedoch auch Information in YAML keys speichern. Mein gopass Eintrag private/aws/username sieht z.B. so aus:

myawspassword
---
keyId: AKIAAWSKEYID
secretKey: awssecretkey
user: myusername

Die keyId oder der secretKey kann via gopass private/aws/username keyId von gopass ausgelesen werden. Da Summon Provider keine Leerzeichen in Secretnamen erlauben, behelfen wir uns mit folgendem Skript:

#!/bin/bash
ARGS=$(echo $1| tr : \ )
gopass $ARGS

Abgelegt in /usr/lib/summon/gopass und ausführbar gemacht, stellt es alle Anforderungen an einen Summon Provider dar und erlaubt mit “:” den Zugriff auf YAML Keys.

Nun kann man ein Secret YAML anlegen (~/aws/myaccount.yml):

AWS_ACCESS_KEY_ID: !var private/aws/username:keyId
AWS_SECRET_ACCESS_KEY: !var private/aws/username:secretKey

Die YAML Datei kann man nun mit Summon verwenden um beliebge AWS Tools / Applikationsserver etc. die mit den Umgebungsvariablen zu versorgen. Hier als Beispiel awscli:

summon -p gopass -f ~/.aws/myaccount.yml aws s3api list-buckets

Um uns das Leben noch leichter zu machen, können wir z.B. das ganze noch im Shell profile oder rc als Alias ablegen:

SUMMON_PROVIDER=gopass
alias myaws='gopass -f ~/.aws/myaccount.yml aws'

Nun haben wir einen einfachen Aufruf a la myaws s3api list-buckets