Secrets Loading

Loading secrets in the vault is usually done by running ./pattern.sh make load-secrets from the Pattern’s repository. This runs ansible code that parses local yaml files containing the secrets to be uploaded to the Vault running on the Hub

The secrets needed for the pattern are in the values-secret.yaml.template file in the pattern’s repository.

Copy values-secret.yaml.template to ~/values-secret-multicloud-gitops.yaml and edit it according to your needs

You could also run ./pattern.sh make load-secrets to run it through a container without installing too many dependencies

Please encrypt the file with ansible-vault encrypt ~/values-secret-multicloud-gitops.yaml (i.e. no clear-text secrets at rest)

make load-secrets will prompt for the decryption key if it is encrypted

It looks for files in the following order (and stops as soon as one is found):

  • ~/.config/validatedpatterns/values-secret-<patternname>.yaml

  • ~/values-secret-<patternname>.yaml (e.g. ~/values-secret-multicloud-gitops.yaml)

  • <patternrepository>/values-secret.yaml.template

An alternative yaml file path can be specified by setting the VALUES_SECRET environment variable:

export VALUES_SECRET=~/foo/bar.yaml; ./pattern.sh make load-secrets

Secrets Template in the Patterns

Two file format versions are understood by the loading mechanism: “version: 1.0” (default) and “version: 2.0”. Please specify and use “version: 2.0” when possible Version 2.0 supports file-uploading, prompting for secrets, base64-encoding, reading secrets from INI-files (e.g. ~/.aws/credentials), uploading to multiple vault paths and generating secrets inside Vault directly using password policies Version 1.0 is a lot more limited in terms of capabilities and deprecated Both versions have corresponding JSON schemas: V1 and V2 Complete examples can be found here

version: "2.0"

secrets:
  - name: config-demo
    vaultPrefixes:
    - global
    fields:
    - name: secret
      onMissingValue: generate
      vaultPolicy: validatedPatternDefaultPolicy
  • The validatedPatternDefaultPolicy is a default password policy that is guaranteed to exist

  • It is defined here

  • The secret is 20 character longs (min 1 lowercase, min 1 uppercase, min 1 number, min 1 special char)

  • It is possible to create a custom policy and use that one to generate secrets randomly

Secret Examples

version: "2.0"
secrets:
  - name: config-demo
    vaultMount: secret
    vaultPrefixes:
    - region-one
    - snowflake
    fields:
    - name: secretfile
      path: /tmp/ca.crt
      onMissingValue: prompt
      base64: true
      prompt: "Insert path to Certificate Authority"

This Will prompt the user with:

  • Insert path to Certificate Authority [/tmp/ca.crt]:

  • Pressing only enter will accept the default in [] (no echo on input!!) “/tmp/ca.crt” will be read, base64 encoded and uploaded

  • It will be uploaded as an attribute called “secretfile” to two different vault keys:

    • secret/region-one/config-demo

    • secret/snowflake/config-demo

version: "2.0"

secrets:
  - name: aws
    fields:
    - name: aws_access_key_id
      ini_file: ~/.aws/credentials
      ini_section: default
      ini_key: aws_access_key_id
    - name: aws_secret_access_key
      ini_file: ~/.aws/credentials
      ini_section: default
      ini_key: aws_secret_access_key

This reads ~/.aws/credentials and uses the [default] section to look for the aws_access_key_id and aws_secret_access_key in the file

version: "2.0"
vaultPolicies:
  basicPolicy: |
    length=10
    rule "charset" { charset = "abcdefghijklmnopqrstuvwxyz" min-chars = 1 }
    rule "charset" { charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" min-chars = 1 }
    rule "charset" { charset = "0123456789" min-chars = 1 }
secrets:
  - name: config-demo
    vaultPrefixes:
    - region-one
    fields:
    - name: secret
      onMissingValue: generate # One of: error,generate,prompt (generate is only valid for normal secrets)
      # This override attribute is false by default. The attribute is only valid with 'generate'. If the secret already exists in the
      # vault it won't be changed unless override is set to true
      override: true
      vaultPolicy: basicPolicy

This will use the basicPolicy to generate a random value as an attribute called secret in the secret/region-one/config-demo vault path