vault encrypt ansible ansible-vault

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 $