1
0
mirror of https://github.com/Luzifer/git-credential-vault.git synced 2024-09-16 14:58:26 +00:00
Implementation of the Git Credential Storage utilizing Vault as storage backend
Go to file
2022-01-22 03:32:12 +01:00
.gitignore Initial version 2020-04-01 14:19:29 +02:00
.repo-runner.yaml Add auto-build 2020-04-01 14:24:09 +02:00
go.mod upgrade vault api and support kv2 (#1) 2022-01-22 03:15:36 +01:00
go.sum upgrade vault api and support kv2 (#1) 2022-01-22 03:15:36 +01:00
History.md prepare release v0.2.0 2022-01-22 03:32:12 +01:00
LICENSE Add META files 2020-04-01 15:07:41 +02:00
main_test.go Initial version 2020-04-01 14:19:29 +02:00
main.go Lint: Apply linter configuration 2022-01-22 03:31:03 +01:00
Makefile Add auto-build 2020-04-01 14:24:09 +02:00
README.md [docs] Update Go tool installation for Go1.17 2022-01-22 03:29:19 +01:00
vault.go upgrade vault api and support kv2 (#1) 2022-01-22 03:15:36 +01:00

Go Report Card

Luzifer / git-credential-vault

git-credential-vault is an implementation of the Git Credential Storage utilizing Vault as storage backend.

The only supported action is get as storage is managed through Vault related tools / the web-UI. The tool expects to find Vault keys per host containing username / password fields in it. Those fields are then combined with the data received from git and sent back for authentication.

Expected Vault structure

secret/git-credentials (pass this to --vault-path-prefix)
 +- github.com
 |   +- username = api
 |   +- password = verysecrettoken
 +- gitlab.com
     +- username = user
     +- password = anothertoken

Usage

# export VAULT_ADDR=http://localhost:8200
# export VAULT_TOKEN=somesecretvaulttoken
# echo -e "protocol=https\nhost=github.com\n\n" | ./git-credential-vault --vault-path-prefix secret/git-credentials get
host=github.com
username=api
password=myverysecrettoken
protocol=https

Vault KV Secrets Engine - Version 2

This tool supports both versions of the Vault KV Secrets Engine. You just need to consider one thing: Version 2 of the KV Secrets Engine does use slightly modified paths for reading secrets. In order to be compatible to both versions of the Secrets Engine you need to adjust the vault-path-prefix slightly when using it:

# Version 1
vault list secret_v1/git-credentials
# Keys
# ----
# github.com
git config --global credential.helper 'vault --vault-path-prefix secret_v1/git-credentials'
# Version 2
vault kv list secret_v2/git-credentials
# Keys
# ----
# github.com
git config --global credential.helper 'vault --vault-path-prefix secret_v2/data/git-credentials'

Mind the extra /data after the mountpoint for a mountpoint using version 2. If you omit it the tool will not work properly as it will not yield any credentials.

Dockerfile example (git clone)

In this example the VAULT_TOKEN is passed in through a build-arg which means you MUST revoke the token before pushing the image, otherwise you will be leaking an active credential!

FROM alpine

ARG VAULT_ADDR
ARG VAULT_TOKEN

RUN set -ex \
 && apk --no-cache add curl git \
 && curl -sSfL "https://github.com/Luzifer/git-credential-vault/releases/download/v0.1.0/git-credential-vault_linux_amd64.tar.gz" | tar -xz -C /usr/bin \
 && mv /usr/bin/git-credential-vault_linux_amd64 /usr/bin/git-credential-vault \
 && git config --global credential.helper 'vault --vault-path-prefix secret/git-credentials'

RUN set -ex \
 && git clone https://github.com/myuser/secretrepo.git /src
# docker build --build-arg VAULT_ADDR=${VAULT_ADDR} --build-arg VAULT_TOKEN=${VAULT_TOKEN} --no-cache .

Dockerfile example (go install)

In this example the VAULT_TOKEN is passed in through a build-arg which means you MUST revoke the token before pushing the image, otherwise you will be leaking an active credential!

FROM golang:alpine

ARG VAULT_ADDR
ARG VAULT_TOKEN

RUN set -ex \
 && apk --no-cache add git \
 && go install github.com/Luzifer/git-credential-vault@latest \
 && git config --global credential.helper 'vault --vault-path-prefix secret/git-credentials'

RUN set -ex \
 && go get -v github.com/myuser/secretrepo
# docker build --build-arg VAULT_ADDR=${VAULT_ADDR} --build-arg VAULT_TOKEN=${VAULT_TOKEN} --no-cache .