Vault is setup with dynamoDB as the backend. Vault has 3 nodes in a cluster and an AWS ALB as the frontend. The Vault is unsealed with AWS KMS instead of the usual master key.
the vault binary is located at /usr/local/bin/vault
Additional Notes are located here: msoc-infrastructure - Vault README.md
vault login
Auth Error? Try populating the Bash variables.
export VAULT_ADDR=https://vault.pvt.xdrtest.accenturefederalcyber.com
Connectivity Issue? Try hitting the health endpoint via curl. Unset the proxy variables to avoid using the proxy.
env -u http_proxy -u https_proxy -u HTTP_PROXY -u HTTPS_PROXY -u no_proxy -u NO_PROXY curl --insecure https://127.0.0.1/v1/sys/health
Failed to parse capability in bounding/ambient set, ignoring: CAP_IPC_LOCK,CAP_NET_BIND_SERVICE
Oct 30 13:31:32 vault-1 systemd: [/etc/systemd/system/vault.service:16] Failed to parse capability in bounding/ambient set, ignoring: CAP_IPC_LOCK,CAP_NET_BIND_SERVICE
msoc-infrastructure - Vault README.md
salt vault* cmd.run 'systemctl stop vault'
salt vault* state.sls vault
vault-1
, init vault RUN on the server not salt (avoid the recovery keys from getting into logs)
VAULT_ADDR=https://vault.pvt.xdrtest.accenturefederalcyber.com vault operator init -tls-skip-verify=true -recovery-shares=5 -recovery-threshold=2
login
VAULT_ADDR=https://vault.pvt.xdrtest.accenturefederalcyber.com vault login -tls-skip-verify=true -method=token
5.2 Do yourself a favor and setup some Bash Variables or run commands from salt
export VAULT_ADDR=https://vault.pvt.xdrtest.accenturefederalcyber.com
export VAULT_ADDR=https://127.0.0.1
export VAULT_ADDR=https://vault.pvt.xdrtest.accenturefederalcyber.com
export VAULT_SKIP_VERIFY=1
setup okta auth
VAULT_ADDR=https://vault.pvt.xdrtest.accenturefederalcyber.com vault auth enable okta
VAULT_ADDR=https://vault.pvt.xdrtest.accenturefederalcyber.com vault write -tls-skip-verify=true auth/okta/config base_url="okta.com" organization="mdr-multipass" token="api_token_here"
VAULT_ADDR=https://vault.pvt.xdrtest.accenturefederalcyber.com vault write -tls-skip-verify=true auth/okta/config base_url="okta.com" organization="mdr-multipass" token="$( cat ~/.okta-token )"
VAULT_ADDR=https://vault.pvt.xdrtest.accenturefederalcyber.com vault auth list
set the TTL for the okta auth method
VAULT_ADDR=https://vault.pvt.xdrtest.accenturefederalcyber.com vault auth tune -default-lease-ttl=3h -max-lease-ttl=3h okta/
Enable/add Policies
Add external groups
add alias through the GUI. (use the root token to login or a temp root token (better))
groups | alias | policy |
---|---|---|
admins | mdr-admins | admins |
mdr-engineers | mdr-engineers | engineers |
vault-admins | vault-admin | admins |
soc-lead | Analyst-Shift-Lead | soc |
soc-tier-3 | Analyst-Tier-3 | soc |
enable the file audit
VAULT_ADDR=https://vault.pvt.xdrtest.accenturefederalcyber.com vault audit enable -tls-skip-verify=true file file_path=/var/log/vault.log
enable the aws & approle auth
VAULT_ADDR=https://vault.pvt.xdrtest.accenturefederalcyber.com vault auth enable -tls-skip-verify=true aws
setup approle auth using the salt-master policy
vault auth enable approle
vault write auth/approle/role/salt-master token_max_ttl=3h token_policies=salt-master
configure the aws policies on the role (clu and portal) UPDATE THE AWS ACCOUNT!!!
Create the kv V2 secret engines VAULT_ADDR=https://vault.pvt.xdrtest.accenturefederalcyber.com ~/Documents/MDR/Vault/vault secrets enable -path=engineering kv-v2 vault secrets enable -path=engineering kv-v2 vault secrets enable -path=ghe-deploy-keys kv-v2 vault secrets enable -path=jenkins kv-v2 vault secrets enable -path=onboarding kv-v2 vault secrets enable -path=onboarding-afs kv-v2 vault secrets enable -path=onboarding-gallery kv-v2 vault secrets enable -path=onboarding-saf kv-v2 vault secrets enable -path=portal kv-v2 vault secrets enable -path=soc kv-v2 vault secrets enable -version=1 -path=salt kv
vault write salt/pillar_data auth="abc123"
#export
#!/bin/bash
while read p; do
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -export $p/data/ -metadata $p/metadata/ -file $p-secrets.json -ver 2
done <engines.txt
#import
#!/bin/bash
while read p; do
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -import $p/ -file $p-secrets.json -ver 2
done <engines.txt
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -export engineering/data/ -metadata engineering/metadata/ -file engineering-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -export ghe-deploy-keys/data/ -metadata ghe-deploy-keys/metadata/ -file ghe-deploy-keys-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -export jenkins/data/ -metadata jenkins/metadata/ -file jenkins-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -export onboarding/data/ -metadata onboarding/metadata/ -file onboarding-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -export onboarding-afs/data/ -metadata onboarding-afs/metadata/ -file onboarding-afs-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -export onboarding-gallery/data/ -metadata onboarding-gallery/metadata/ -file onboarding-gallery-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -export onboarding-saf/data/ -metadata onboarding-saf/metadata/ -file onboarding-saf-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -export portal/data/ -metadata portal/metadata/ -file portal-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -export salt/ -metadata salt/metadata/ -file salt-secrets.json
Import the json secret files back into vault
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -import engineering/ -file engineering-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -import ghe-deploy-keys/ -file ghe-deploy-keys-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -import jenkins/ -file jenkins-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -import onboarding/ -file onboarding-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -import onboarding-afs/ -file onboarding-afs-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -import onboarding-gallery/ -file onboarding-gallery-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -import onboarding-saf/ -file onboarding-saf-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -import portal/ -file portal-secrets.json -ver 2
/Users/brad.poulton/.go/src/vault-backend-migrator/vault-backend-migrator -import salt/ -file salt-secrets.json
the Vault instances have access to AWS IAM Read.
curl -v --header "X-Vault-Token:$VAULT_TOKEN" --request LIST
https://vault.mdr.defpoint.com:443/v1/auth/aws/roles --insecure
cat 0c86fda6-1139-7914-fef5-6b7532e9fb5a | grep -v -F '"operation":"list"' | grep -v -F '"operation":"read"'
cat c3c0b50b-9429-355d-8c8f-038e093c3e4b | grep -v -F '"operation":"list"' | grep -v -F '"operation":"read"'
entity_34d6c410 -< nothing in logs
"entity_id":"c3c0b50b-9429-355d-8c8f-038e093c3e4b
entity_ba27bb07 < - nothing in logs
0c86fda6-1139-7914-fef5-6b7532e9fb5a
This simple tf will grab a secret from the vault. Note that the password is printed in plaintext and there is currently no way to avoid that short of putting the values in environment variables.
And for some reason, this prompts 3 times.
variable login_username {}
variable login_password {}
provider "vault" {
address = "https://vault.mdr.defpoint.com"
auth_login {
path = "auth/okta/login/${var.login_username}"
parameters = {
password = var.login_password
}
}
}
data "vault_generic_secret" "palo_auth" {
path = "engineering/palo_alto/firewall_notes"
}
output "secret" {
value = data.vault_generic_secret.palo_auth.data
}
Tune the auth method to reduce the life of the token provided for this auth method. AC-2(5) Sort of but not really!
vault auth tune -default-lease-ttl=3h -max-lease-ttl=3h okta/
vault auth tune -default-lease-ttl=15m -max-lease-ttl=15m okta/