HashiCorp Vault Security: Transit Engine

๐Ÿ’ก HashiCorp Vault Security: Transit Engine โ€” Executive Summary

Technical architectural analysis, practical configuration manifests, and deployment instructions for HashiCorp Vault Security: Transit Engine.

Installation

Operation

Authentication Management
Policy registration
bash
k exec -it -n portal-system sts/vault -- sh
### START IN CONTAINER
vault login

policy_name=admin-policy

cat > /tmp/${policy_name}.hcl <<EOF
path "*" {
  capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}
EOF

vault policy write ${policy_name} /tmp/${policy_name}.hcl
auth: enable userpass
bash
k exec -it -n portal-system sts/vault -- sh
### START IN CONTAINER
vault login

if vault auth list | grep -q "userpass/"; then
  echo "[SKIP] userpass already enabled"
else
  vault auth enable userpass
  vault auth tune -listing-visibility=unauth userpass/
fi
  • Add User
bash
user_name=admin
  user_password=
  policy_name=admin-policy

  vault write auth/userpass/users/${user_name} \
      password="${user_password}" \
      policies="${policy_name}"
auth: enable kubernetes
bash
k exec -it -n portal-system sts/vault -- sh
### START IN CONTAINER
vault login

vault auth enable kubernetes
vault write auth/kubernetes/config \
    token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
    kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" \
    kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  • Add Role
  • Audience confirmation:
bash
test_pod=lovely-octopus
    TOKEN=$(kubectl exec -n deploy-system $test_pod -c vault-agent-init -- cat /var/run/secrets/kubernetes.io/serviceaccount/token)

    echo $TOKEN | cut -d'.' -f2 | base64 -d 2>/dev/null | jq .
bash
k exec -it -n portal-system sts/vault -- sh
### START IN CONTAINER
vault login

role_name=deploy-admin-role
policy_name=admin-policy
kube_sa=deploy-admin
kube_sa_ns=deploy-system

vault write auth/kubernetes/role/${role_name} \
    bound_service_account_names=${kube_sa} \
    bound_service_account_namespaces=${kube_sa_ns} \
    policies=${policy_name} \
    ttl=24h \
    audience="https://kubernetes.default.svc.cluster.local"
Use Sidecar Injector
Required
  • auth: enable kubernetes
  • Helm chart values.yaml: .injector.enabled = true
Deployments Annotation
yaml
spec:
  template:
    metadata:
      annotations:
      labels:
        vault.hashicorp.com/agent-inject: "true"
        vault.hashicorp.com/role: "deploy-admin-role"
        vault.hashicorp.com/agent-inject-secret-common: "secret/mgt/pipelines/common"
        vault.hashicorp.com/agent-inject-template-common: |
          {{- with secret "secret/mgt/pipelines/common" -}}
          export image_registry_id="{{ .Data.data.username }}"
          export image_registry_pw="{{ .Data.data.password }}"
          {{- end -}}
		    vault.hashicorp.com/agent-inject-secret-exception: "secret/mgt/pipelines/build1"
		    vault.hashicorp.com/agent-inject-template-exception: |
		      {{- with secret "secret/mgt/pipelines/build1" -}}
		      export NPM_VERSION="{{ .Data.data.version }}"
		      {{- end -}}
Exec
bash
source /vault/secrets/common
source /vault/secrets/exception
Features
Obtain Vault SA Token
bash
k exec -it -n portal-system sts/vault -- cat /var/run/secrets/kubernetes.io/serviceaccount/token


Old

Check k8s environment token (OLD)
1. safe registered
bash
#k8s cluster
safe env
2. kubectl exec (container internal storage)
bash
kubectl exec -n vault sva-vault-manager-0 -- cat /mnt/data/cluster_keys.json | grep -oP --color=never '(?<="root_token":")[^"]*'
3. kubectl get
bash
k get secrets -n vault  vault-init -o jsonpath="{.data.VAULT_INIT_JSON}" | base64 -d
>>>
# root_token
{
  "unseal_keys_b64": [
    "KFaqIfd2hMZu/3Av9992M7C8/V6Bo51m/hrdXR4yRktb",
    "Ys6aCMwmiYBbUoaI4/wKJwsAyWXz6JGaHuTFIAHO7q7T",
    "R55MSYKIaGSiqZUduy1n5hkCeNlN9q5JIFTZn52Rihdm",
    "zNuOvfN0dGd2dxeaODziMKXFv8I85pqxtIiL5OQ1vd0N",
    "s1834/4Kxp3GPbf3rEMuNmlt1g9lhRlvBKLd3121U16v"
  ],
  "unseal_keys_hex": [
    "2856aa21f77684c66eff702ff7df7633b0bcfd5e81a39d66fe1add5d1e32464b5b",
    "62ce9a08cc2689805b528688e3fc0a270b00c965f3e8919a1ee4c52001ceeeaed3",
    "479e4c4982886864a2a9951dbb2d67e6190278d94df6ae492054d99f9d918a1766",
    "ccdb8ebdf37474677677179a383ce230a5c5bfc23ce69ab1b4888be4e435bddd0d",
    "b35f37e3fe0ac69dc63db7f7ac432e36696dd60f6585196f04a2dddf5db5535eaf"
  ],
  "unseal_shares": 5,
  "unseal_threshold": 3,
  "recovery_keys_b64": [],<<<
  "recovery_keys_hex": [],
  "recovery_keys_shares": 0,
  "recovery_keys_threshold": 0,
  "root_token": "hvs.IlRy460I1duY0mEDJPiBzgfK"
}
<<<

CLI

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *