Blog
Wie Sie Geheimnisse aus dem Google Secret Manager in Ihren Container bekommen

Auf der Google Cloud Platform verwenden wir den Google Secret Manager, um unsere Geheimnisse zu schützen. Aber der Zugriff auf die Geheimnisse aus einer bestehenden Anwendung heraus ist umständlich. Sie müssen entweder die
Wie funktioniert das?
Das Dienstprogramm prüft alle Umgebungsvariablen. Wenn eine Umgebungsvariable mit gcp: beginnt, nimmt es an, dass es sich um eine URL zu einem Geheimnis im Google Secret Manager handelt. Das folgende Snippet zeigt die einfachste Anwendung:
export MYSQL_PASSWORD=gcp:///mysql_root_password'
gcp-get-secret bash -c 'echo $MYSQL_PASSWORD'
password
Dadurch wird der Wert von mysql_root_password im Secret Manager nachgeschlagen und durch seinen Wert ersetzt. Das Programm in der Befehlszeile wird mit dem eingestellten MYSQL_PASSWORD ausgeführt und gibt den aktuellen Wert aus.
Verweis auf geheime Namen
Sie referenzieren das Geheimnis in einem der folgenden Formate:
gcp:///<name>gcp:///<name>/<version>gcp:///<project>/<name>gcp:///<project>/<name>/<version>gcp:///projects/<project>/secrets/<name>/versions/<version>
Damit können Sie sowohl das Projekt als auch die Version des abzurufenden Geheimnisses angeben. Standardmäßig wird die neueste Version abgerufen.
Abfrageparameter
Das Dienstprogramm unterstützt die folgenden Parameter für Ihre geheime Referenz:
- default - Wert, wenn der Wert nicht aus dem Parameterspeicher abgerufen werden konnte.
- Ziel - der Dateiname, in den der Wert geschrieben werden soll. value ersetzt durch file: url.
- chmod - Dateiberechtigungen des Ziels, Standardeinstellung, wenn nicht angegeben. empfohlen 0600.
- template - die Vorlage, die für das Schreiben des Wertes verwendet werden soll, Standardwert ist '{{.}}'.
Wenn weder ein Standardwert noch ein Ziel angegeben wird und der Parameter nicht gefunden wird, gibt das Dienstprogramm einen Fehler zurück. Wenn ein Standardwert angegeben wird und der Parameter nicht gefunden wird, verwendet das Dienstprogramm den Standardwert. Wenn eine Zieldatei existiert und kein Standardwert angegeben ist, wird die Datei als Standardwert gelesen.
Zum Beispiel:
$ export ORACLE_PASSWORD='gcp://oracle_scott_password?default=tiger&destination=/tmp/password'
$ gcp-get-secret bash -c 'echo $ORACLE_PASSWORD'
/tmp/password
$ cat /tmp/password
tiger
Vorlagenformatierung
Um das Ergebnis zu formatieren, können Sie den Abfrageparameter template verwenden. Zum Beispiel:
$ export PGPASSFILE=gcp://postgres_kong_password?template='localhost:5432:kong:kong:{{.}}%0A&destination=/etc/.pgpass'
$ gcp-get-secret bash -c 'cat $PGPASSFILE'
localhost:5432:kong:kong:@CypJqmqZ@TYQ2GDnUD@MQGuKyhrl!
Umwelt Substitution
Der URI kann eine Umgebungsvariable enthalten, die auf sich selbst verweist. Zum Beispiel:
$ export ENV=dev
$ export PASSWORD='gcp:///${ENV}_mysql_root_password'
$ gcp-get-secret bash -c 'echo $PASSWORD'
gibt den Wert von dev_mysql_root_password aus.
Verwendung von Dockerdateien
Die natürliche Art, das Dienstprogramm in einem Container zu verwenden, ist wie folgt:
FROM binxio/gcp-get-secret:0.4.1
FROM alpine:3.6
COPY --from=0 /gcp-get-secret /usr/local/bin/
ENV PGPASSWORD=gcp:///postgres_root_password?default=postgres
ENTRYPOINT [ "/usr/local/bin/gcp-get-secret", "--use-default-credentials"]
CMD [ "/bin/bash", "-c", "echo $PGPASSWORD"]
Sie machen das Dienstprogramm zum Einstiegspunkt und verschieben den ursprünglichen Einstiegspunkt in den Befehlsbereich.
Installation
Wenn Sie Golang installiert haben, geben Sie ein:
go get github.com/binxio/gcp-get-secret
Installation in Docker
Um das Dienstprogramm in Ihren Container zu bekommen, verwenden Sie den mehrstufigen Build:
FROM binxio/gcp-get-secret:0.4.1
FROM alpine:3.6
COPY --from=0 /gcp-get-secret /usr/local/bin/
Fazit
Mit gcp-get-secret haben Sie eine nicht-intrusive Möglichkeit, Geheimnisse aus dem Secret Manager abzurufen. Sie können sie als Umgebungsvariable verwenden oder sie in einer Datei speichern. Indem Sie Standardwerte angeben, können Sie Ihren Container in einem Integrationstest auf Ihrem lokalen Desktop oder in einer CI-Umgebung ausführen.
Wenn Sie dasselbe in AWS suchen, lesen Sie , wie Sie Geheimnisse aus dem AWS Parameter Store in Container bekommen.
Verfasst von

Mark van Holsteijn
Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.
Unsere Ideen
Weitere Blogs
Contact



