ansible vault encrypt string
Cómo descifrar cadena con ansible-bóveda 2.3.0 (6)
He estado esperando ansible 2.3 ya que iba a introducir la característica encrypt_string.
Lamentablemente, no estoy seguro de cómo puedo leer la cadena cifrada.
Intenté descifrar cadena , descifrar (el archivo), ver (el archivo) y nada funciona.
cat test.yml
---
test: !vault |
$ANSIBLE_VAULT;1.1;AES256
37366638363362303836383335623066343562666662386233306537333232396637346463376430
3664323265333036663736383837326263376637616466610a383430623562633235616531303861
66313432303063343230613665323930386138613334303839626131373033656463303736366166
6635346135636437360a313031376566303238303835353364313434363163343066363932346165
6136
El error que estoy diciendo es ERROR! input is not vault encrypted data for test.yml
ERROR! input is not vault encrypted data for test.yml
¿Cómo puedo descifrar la cadena para saber cuál es su valor sin la necesidad de ejecutar el juego?
¿Intentaste establecer la cadena encriptada como una variable y luego usar -debug
para obtener su salida desencriptada?
es decir
Defina su cadena encriptada como una test
variable en su libro de jugadas y luego haga:
-debug: msg="My Secret value is {{test | replace(''/n'', '''')}}"
en tu libro de jugadas y luego ejecuta el libro de jugadas:
ansible-playbook -i localhost YourPlaybook.yml --vault-password-file path/to/your/secret_key_file
`
Esto es lo que funciona para mí, similar a lo que hace Scudelletti pero pasando por el paso de la bóveda, es decir
echo ''$ANSIBLE_VAULT;1.1;AES256
31363861346536343331393539323936346464386534346337306565626466393764666366363637
6533373165656431393662653463646430663933363431380a336130363131373238326330393931
39343533396161323834613030383339653633393133393932613562396630303530393030396335
3630656237663038630a363032373633363161633464653431386237333262343231313830363965
31393930343532323133386536376637373463396534623631633234393565373337613530643031
38393862616635326339373731353465303364303365336132613566396666626536636533303839
393465653830393231636638643735313666'' | ansible-vault decrypt --vault-password-file /path/to/your/.vault_pass.txt /dev/stdin --output=/dev/stderr > /dev/null && echo
La salida estará en su propia línea por conveniencia, gracias al rastro de && echo
. El permiso de mi pase de bóveda es 644 si te encuentras con algún error de permiso.
¡Espero eso ayude!
Puede canalizar la entrada y luego decirle a ansible-vault
que se stderr
a stderr
y luego redireccionar la salida stdout
a /dev/null
ya que la herramienta imprime el Decryption successful
.
Algo como:
echo ''YOUR_SECRET_VALUE'' | ansible-vault decrypt /dev/stdin --output=/dev/stderr > /dev/null
Aquí hay un ejemplo:
echo ''$ANSIBLE_VAULT;1.1;AES256
30636561663762383436386639353737363431353033326634623639666132623738643764366530
6332363635613832396361333634303135663735356134350a383265333537383739353864663136
30393363653361373738656361613435626237643633383261663138653466393332333036353737
3335396631613239380a616531626235346361333737353831376633633264326566623339663463
6235'' | ansible-vault decrypt /dev/stdin --output=/dev/stderr > /dev/null
Espero que implementen una forma más sencilla de hacer esto.
Edición: Variables de entorno como entrada:
Para tener un comportamiento similar con variables de entorno multilínea en bash
use printf
lugar de echo
Ejemplo (contraseña: 123):
export chiphertext=''$ANSIBLE_VAULT;1.1;AES256
65333363656231663530393762613031336662613262326666386233643763636339366235626334
3236636366366131383962323463633861653061346538360a386566363337383133613761313566
31623761656437393862643936373564313565663633636366396231653131386364336534626338
3430343561626237660a333562616537623035396539343634656439356439616439376630396438
3730''
printf "%s/n" $chiphertext | ansible-vault decrypt /dev/stdin --output=/dev/stderr > /dev/null
Si bien, no hay problemas para mostrar valores de cadena cifrados con mensajes de depuración que se puedan utilizar o usar cli de ansible, hay una solución más que puede ser conveniente para las necesidades de automatización. Puede utilizar las librerías de python de ansible y usarlas en su código (básicamente, todo esto se encuentra en ansible.parsing. *)
1) Proporcione la contraseña de la bóveda y genere la "bóveda" con secretos.
# Load vault password and prepare secrets for decryption
loader = DataLoader()
secret = vault.get_file_vault_secret(filename=vault_password_file, loader=loader)
secret.load()
vault_secrets = [(''default'', secret)]
_vault = vault.VaultLib(vault_secrets)
2) Cargue el archivo yaml con AnsibleLoader:
with codecs.open(input_file, ''r'', encoding=''utf-8'') as f:
loaded_yaml = AnsibleLoader(f, vault_secrets=_vault.secrets).get_single_data()
3) Si necesita cifrar una nueva cadena y actualizar su diccionario:
new_encrypted_value = objects.AnsibleVaultEncryptedUnicode.from_plaintext(source_system_password, _vault, vault_secrets[0][1])
loaded_yaml[target_env][''credentials''][external_system_name][''password''] = new_encrypted_variable
4) Una vez que haya completado el procesamiento, escriba de nuevo con AnsibleDumper:
with open(''new_variables.yml'',''w'') as fd:
yaml.dump(loaded_yaml, fd, Dumper=AnsibleDumper, encoding=None, default_flow_style=False)
También puede hacerlo con el comando simple ansible
para la combinación respectiva de host / grupo / inventario, por ejemplo:
$ ansible my_server -m debug -a ''var=my_secret''
my_server | SUCCESS => {
"my_secret": "373861663362363036363361663037373661353137303762"
}
ya que los archivos de bóveda enteros no se reproducen bien con los historiales de git, usar las cadenas de bóveda dentro de los archivos de variables es el camino a seguir, también hace que las variables de grep por nombre sean mucho más claras.
Aquí hay un ejemplo simple trabajado:
Quiero poner fredsSecretString: value en vars.yml, (¡su valor es fastfredfedfourfranfrankfurters pero no digas nada a la gente!)
$ ansible-vault encrypt_string ''fastfredfedfourfrankfurters'' -n fredsSecretString >> vars.yml
New Vault password: fred
Confirm New Vault password: fred
$ cat vars.yml
fredsSecretString: !vault |
$ANSIBLE_VAULT;1.1;AES256
36643662303931336362356361373334663632343139383832626130636237333134373034326565
3736626632306265393565653338356138626433333339310a323832663233316666353764373733
30613239313731653932323536303537623362653464376365383963373366336335656635666637
3238313530643164320a336337303734303930303163326235623834383337343363326461653162
33353861663464313866353330376566346636303334353732383564633263373862
Para descifrar el valor, alimente la cadena cifrada de nuevo a la bóveda de ansible de la siguiente manera:
$ echo ''$ANSIBLE_VAULT;1.1;AES256
36643662303931336362356361373334663632343139383832626130636237333134373034326565
3736626632306265393565653338356138626433333339310a323832663233316666353764373733
30613239313731653932323536303537623362653464376365383963373366336335656635666637
3238313530643164320a336337303734303930303163326235623834383337343363326461653162
33353861663464313866353330376566346636303334353732383564633263373862'' |
ansible-vault decrypt && echo
Vault password: fred
Decryption successful
fastfredfedfourfrankfurters
$