Search Results for

    Show / Hide Table of Contents

    Intent.HashiCorp.Vault

    Overview

    HashiCorp Vault provides organizations with identity-based security to automatically authenticate and authorize access to secrets and other sensitive data.

    Connecting to HashiCorp Vault

    To connect to HashiCorp Vault, include the following configuration in your appsettings.json file:

    {
      "HashiCorpVault": {
        "Enabled": true,
        "Vaults": [
          {
            "Name": "DevVault",
            "Url": "http://127.0.0.1:8200",
            "AuthMethod": {
              "Token": {
                "Token": "root_token"
              }
            },
            "Path": "creds",
            "MountPoint": "secret",
            "CacheTimeoutInSeconds": 5
          }
        ]
      }
    }
    

    Configuration Parameters

    • Enabled: Determines whether the Vault integration is active.
    • Vaults: A list of Vault configurations.
      • Name: A friendly name for reference.
      • Url: The address to connect to a specific Vault.
      • AuthMethod: The method for authenticating against the Vault:
        • Token: Specify a token for DEV mode.
          {
            "Token": {
              "Token": "root_token"
            }
          }
          
        • UserPass: Specify a username and password.
          {
            "UserPass": {
              "Username": "username",
              "Password": "password"
            }
          }
          
        • AppRole: Specify a RoleId and SecretId.
          {
            "AppRole": {
              "RoleId": "af9bf2b4-d8ab-4451-be44-131263a92d34",
              "SecretId": "5a3d91b6-b657-4a3b-a140-610008f4ab81"
            }
          }
          
      • Path: Location where secrets are stored.
      • MountPoint: Typically set to "secret".
      • CacheTimeoutInSeconds:
        • Positive value: Interval to re-fetch secrets.
        • Zero: Fetch secrets only at startup.

    Shorthand configuration

    Once you have the vaults configured in your appsettings.json file, you can override their values by supplying configuration from a different source (such as Environment variables) using the following notation:

    {Vault Name}_{Property} = {Value}

    Using the appsettings.json here, here are a few examples:

    • DevVault_Url = "http://dev.host.com:8200"
    • DevVault_Token = "alternate_token"
    • DevVault_SecretId = "84921e64-d8d5-4d6e-99d8-71486c2ade10"

    Running HashiCorp Vault Locally

    Follow these instructions to get Vault up and running in DEV mode on your local machine.

    Installation

    Download and install HashiCorp Vault from here.

    Starting the Dev Server

    Run the following command in your terminal:

    vault server -dev -dev-root-token-id=root_token
    

    Set the environment variable for CLI commands:

    # PowerShell
    $env:VAULT_ADDR="http://127.0.0.1:8200"
    
    # Bash
    export VAULT_ADDR='http://127.0.0.1:8200'
    
    Note

    The server is using an In Memory database so upon shut down all changes will be lost. To avoid manual setup each time, create a script that starts Vault and configures all necessary secrets. The Root Token is set to root_token for easy access in development mode. Use this token to connect to Vault and its UI.

    Adding Secrets to Vault

    Add secrets with the following command:

    vault kv put -mount=secret creds passcode=my-long-passcode
    

    You can also specify a JSON payload:

    # Powershell
    echo '{"username":"joe","password":"pass123","meta":[{"key":"creation","value":"3/4/2024 13:05:28"}]}' | vault kv put secret/creds -
    
    # Bash
    echo '{"username":"joe","password":"pass123","meta":[{"key":"creation","value":"3/4/2024 13:05:28"}]}' | vault kv put secret/creds -
    

    Learn more about these commands here.

    Enabling App Role Authentication

    Enable App Role authentication with:

    vault auth enable approle
    

    Set up the access policy:

    # Powershell
    $policy = @"
    path "secret/data/creds" {
      capabilities = [ "read" ]
    }
    "@
    
    $policy | vault policy write dev-policy -
    
    # Bash
    policy='
    path "secret/data/creds" {
      capabilities = ["read"]
    }
    '
    
    echo "$policy" | vault policy write dev-policy -
    

    Create the role:

    vault write auth/approle/role/my-role `
        token_policies="dev-policy" `
        token_ttl=1h `
        token_max_ttl=4h
    

    Retrieve the Role Id:

    vault read auth/approle/role/my-role/role-id
    

    Create the secret and obtain the Secret Id:

    vault write -f auth/approle/role/my-role/secret-id
    

    Browsing the Vault UI

    Access the Vault UI at http://127.0.0.1:8200/ui. Learn more about the UI here.

    • Edit this page
    ☀
    ☾
    In this article
    Back to top Copyright © 2017-, Intent Software Pte Ltd.