Instalando el baúl
Versión en este post es: Vault v1.18.3
Los pasos son desde la freebsd fundation son buenos y funcionan, solo se debe estar pendiente de que el servicio inicie correctamente
El vault.hcl
root@Hashicorp-Vault:/ # cat /usr/local/etc/vault.hcl
listener "tcp" {
address = "ip:8200" (1)
tls_disable = 1
}
storage "file" {
path = "/var/db/vault"
node_id = "v"
}
cluster_addr = "ip:8201" (2)
api_addr = "ip:8200" (3)
ui = true
1 | Es la direccion ip del jail |
2 | igual pero con puerto distinto. |
3 | igual. |
connection refused
Por alguna razón falla la conexion con el vault, en mi caso es por el fichero vault.hcl
no se esta leyendo correctamente, y nos puede lanzar este error.
Get "http://192.168.1.21:8200/v1/sys/seal-status": dial tcp 192.168.1.21:8200: connect: connection refused
root@vault-test:~ # vault server -config /usr/local/etc/vault.hcl
Error initializing core: Failed to lock memory: cannot allocate memory
This usually means that the mlock syscall is not available.
Vault uses mlock to prevent memory from being swapped to
disk. This requires root privileges as well as a machine
that supports mlock. Please enable mlock on your system or
disable Vault from using it. To disable Vault from using it,
set the `disable_mlock` configuration option in your configuration
file.
2025-01-27T11:02:28.636Z [INFO] proxy environment: http_proxy="" https_proxy="" no_proxy=""
2025-01-27T11:02:28.717Z [INFO] incrementing seal generation: generation=1
env o export
En nuestro caso ninguno funcionará, es por nuestra shell al iniciar en el jail.
env VAULT_ADDR=http://10.10.0.33:8200 vault operator init
Si no se setea el VAULT_ADD correctamente tenemos
WARNING! VAULT_ADDR and -address unset. Defaulting to https://127.0.0.1:8200.
Seteando environment correctamente
En el jail si hacemos un echo $SHELL
tenemos es /bin/csh
nos funcionara es usar el setenv
root@vault-test:/etc # setenv VAULT_ADDR ip:8200
root@vault-test:/etc # echo $VAULT_ADDR
ip:8200
root@vault-test:/etc # service vault start
Starting vault.
vault server -config
Este es el comando necesario para ejecucíon bajo fondo, muy importante para que la conexión se de.
vault server -config /usr/local/etc/vault/vault.hcl
root@vault-test:/etc # service vault start
Starting vault.
root@vault-test:/etc # vault operator init
Unseal Key 1: token
Unseal Key 2: token
Unseal Key 3: token
Unseal Key 4: token
Unseal Key 5: token
Initial Root Token: token
Vault initialized with 5 key shares and a key threshold of 3. Please securely
distribute the key shares printed above. When the Vault is re-sealed,
restarted, or stopped, you must supply at least 3 of these keys to unseal it
before it can start servicing requests.
Vault does not store the generated root key. Without at least 3 keys to
reconstruct the root key, Vault will remain permanently sealed!
It is possible to generate new unseal keys, provided you have a quorum of
existing unseal keys shares. See "vault operator rekey" for more information.
root@vault-test:/etc # echo $SHELL
Guardando en el environment
Guardamos la variable en el fichero /etc/csh.cshrc
para que cada vez que entremos en el jail se encuentre la variable, y no tengamos error de connection refused
.
root@Hashicorp-Vault:~ # nano /etc/csh.cshrc
# System-wide .cshrc file for csh(1).
setenv VAULT_ADDR http://192.168.1.21:8200
Creando alias
Tan fácil como
alias vault-server-config="vault server -config /usr/local/etc/vault.hcl"
De momento, con cada inicio del jail debemos ejecutar esto vault-server-config . |
Con Bastille usando zsh
Este template fácil se puede aplicar a un jail activo
PKG zsh
CMD chsh -s /usr/local/bin/zsh root
PKG ohmyzsh (1)
CMD cp /usr/local/share/ohmyzsh/templates/zshrc.zsh-template ~/.zshrc
PKG powerline-fonts
1 | Para autocompletado. |
Deberia salir esto en la consola luego del proceso
➜ ~ echo $SHELL
/usr/local/bin/zsh
Luego se pueden aplicar las variables de entorno
export VAULT_ADDR=ip
export VAULT_TOKEN=token
Igual para el alias, editar el fichero .zshrc
La UI
Proceso de unseal
En la ui introducir 3 claves de esas 5 password que se generaron con el comando vault operator init
El seal desde la UI
Desde la UI, podemos sellar nuevamente el vault, jkaaja esto me recordo al baúl rojo de los recuerdos. 😂
Importante
|
root@Hashicorp-Vault:~ # vault read cubbyhole/mi.secreto
Error reading cubbyhole/mi.secreto: Error making API request.
URL: GET http://192.168.1.21:8200/v1/cubbyhole/mi.secreto
Code: 503. Errors:
* Vault is sealed (1)
1 | Baúl esta sellado/presintado |
Manejo de Secretos
Normalmente al buscar un secreto, tendremos error, porque necesitamos al menos Initial Root Token
en el environment.
Podemos setearlo con: |
setenv VAULT_TOKEN your-token (1)
nano /etc/csh.cshrc (2)
source /etc/csh.cshrc (3)
1 | seteando en el environmnet. |
2 | guardandolo permanente. |
3 | actualizamos el .cshrc |
Leyendo secreto por consola
Antes sin setear el token en el enviroment, no podriamos autenticarnos tal cual. |
root@Hashicorp-Vault:/ # vault read cubbyhole/mi.secreto
Error making API request.
URL: GET http://addreess/v1/sys/internal/ui/mounts/secret/my-secret
Code: 403. Errors:
* permission denied
Despues de setearlo |
root@Hashicorp-Vault:~ # vault read cubbyhole/mi.secreto
Key Value
--- -----
test mi.secreto
Guardando un secreto por consola
vault kv put secret/myapp my.property=mySecretValue
vault kv put path \ (1)
/myapp \ (2)
my.property (3)
=mySecretValue (4)
1 | path |
2 | nombre de la aplicacion |
3 | nombre de la password |
4 | valor |
Via http
El Initial Root Token |
Nos servira para autenticarnos en la web vía token, también para consultar el api y obtener secretos, pro ejemplo con este curl podemos obtener un secreto
El header
X-Vault-Token
se envia al hacer la request, con elInitial Root Token
curl --location 'http://ip:8200/v1/cubbyhole/mi.secreto' \
--header 'Accept: */*' \
--header 'Accept-Language: es,en;q=0.9,fr;q=0.8,zh-TW;q=0.7,zh-CN;q=0.6,zh;q=0.5' \
--header 'Connection: keep-alive' \
--header 'DNT: 1' \
--header 'Referer: http://ip:8200/ui/vault/secrets/cubbyhole/list' \
--header 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36' \
--header 'X-Vault-Token: YourToken' (1)
1 | Esto en realidad es el Initial Root Token |
Dando una respuesta asi
{
"request_id": "8ac9f6c5-9f08-12f3-ed87-70de1ab96842",
"lease_id": "",
"renewable": false,
"lease_duration": 0,
"data": {
"test": "mi.secreto" (1)
},
"wrap_info": null,
"warnings": null,
"auth": null,
"mount_type": "cubbyhole" (2)
}
1 | El secreto |
2 | punto de montaje del secreto |
Plugin para PostgreSQL
Instalando el plugin para PostgreSQL
Nos permitira gestionar dinámicamente credenciales de bases de datos (usuarios y contraseñas). Vault puede generar credenciales temporales en PostgreSQL, lo que aumenta la seguridad y elimina la necesidad de gestionar manualmente las credenciales estáticas.
Podemos configurarlo medianta la UI o por consola
Desde la UI
Debenos crear un nuevo PostgreSQL database secrets engine y usamos databases
es bastante intuitivo
La cadena de conexión debe cumplir los requistios por ejemplo
postgresql://user:password@ip_address:port/database?