Skip to content

Instantly share code, notes, and snippets.

@rahulvramesh
Forked from jun06t/vault-golang-login
Created April 10, 2021 09:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rahulvramesh/c388ec5827d6818616ed654b62be2ce2 to your computer and use it in GitHub Desktop.
Save rahulvramesh/c388ec5827d6818616ed654b62be2ce2 to your computer and use it in GitHub Desktop.
Golang Vault Login Sample
package main
import (
"encoding/json"
"fmt"
"net/http"
"time"
"github.com/hashicorp/vault/api"
"github.com/hashicorp/vault/builtin/credential/aws"
)
const (
vaultAddr = "http://YOUR_VAULT_ADDR:8200"
staticToken = "YOUR_STATIC_TOKEN"
)
var httpClient = &http.Client{
Timeout: 10 * time.Second,
}
func main() {
// token := staticToken
//token, err := userpassLogin()
//if err != nil {
// panic(err)
//}
token, err := awsLogin()
if err != nil {
panic(err)
}
client, err := api.NewClient(&api.Config{Address: vaultAddr, HttpClient: httpClient})
if err != nil {
panic(err)
}
client.SetToken(token)
data, err := client.Logical().Read("secret/data/my-secret")
if err != nil {
panic(err)
}
b, _ := json.Marshal(data.Data)
fmt.Println(string(b))
}
const (
username = "jun06t"
password = "foo"
)
func userpassLogin() (string, error) {
// create a vault client
client, err := api.NewClient(&api.Config{Address: vaultAddr, HttpClient: httpClient})
if err != nil {
return "", err
}
// to pass the password
options := map[string]interface{}{
"password": password,
}
path := fmt.Sprintf("auth/userpass/login/%s", username)
// PUT call to get a token
secret, err := client.Logical().Write(path, options)
if err != nil {
return "", err
}
token := secret.Auth.ClientToken
return token, nil
}
const (
accessKey = ""
secretKey = ""
sessionToken = ""
headerValue = ""
)
func awsLogin() (string, error) {
// get aws credential
data, err := awsauth.GenerateLoginData(accessKey, secretKey, sessionToken, headerValue)
if err != nil {
return "", err
}
// create a vault client
client, err := api.NewClient(&api.Config{Address: vaultAddr, HttpClient: httpClient})
if err != nil {
return "", err
}
// PUT call to get a token
secret, err := client.Logical().Write("auth/aws/login", data)
if err != nil {
return "", err
}
token := secret.Auth.ClientToken
return token, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment