Comment décrypter la chaîne de caractères avec ansible-vault 2.3.0

j'ai attendu ansible 2.3 car il allait introduire la fonctionnalité crypt_string.

malheureusement, je ne sais pas comment lire la chaîne cryptée.

j'ai essayé décrypt_string,décrypter (le fichier), view (le fichier) et rien ne fonctionne.

cat test.yml 
---
test: !vault |
     $ANSIBLE_VAULT;1.1;AES256
     37366638363362303836383335623066343562666662386233306537333232396637346463376430
     3664323265333036663736383837326263376637616466610a383430623562633235616531303861
     66313432303063343230613665323930386138613334303839626131373033656463303736366166
     6635346135636437360a313031376566303238303835353364313434363163343066363932346165
     6136

L'erreur que je suis geeting est ERROR! input is not vault encrypted data for test.yml

Comment puis-je déchiffrer la chaîne de caractères pour savoir quelle est sa valeur sans avoir à exécuter le jouer?

19
demandé sur techraf 2017-04-18 11:24:23

5 réponses

avez-vous essayé de définir la chaîne cryptée comme une variable puis d'utiliser -debug pour obtenir sa sortie chiffrée?

i.e.

Définissez votre chaîne cryptée comme une variable test dans votre playbook et puis faire:

-debug: msg="My Secret value is {{test | replace('\n', '')}}"

dans votre playbook et puis exécutez le playbook:

ansible-playbook -i localhost YourPlaybook.yml --vault-password-file path/to/your/secret_key_file

`

9
répondu NAF 2017-04-18 08:33:48

vous pouvez aussi faire avec simple ansible commande pour la combinaison hôte/groupe/inventaire respective, par exemple:

$ ansible my_server -m debug -a 'var=my_secret'
my_server | SUCCESS => {
    "my_secret": "373861663362363036363361663037373661353137303762"
}
17
répondu famousgarkin 2017-07-26 12:29:26

Vous pouvez rediriger l'entrée puis dire ansible-vault sortie stderr et ensuite rediriger le stdout/dev/null puisque l'outil imprime Decryption successful.

quelque Chose comme:

echo 'YOUR_SECRET_VALUE' | ansible-vault decrypt /dev/stdin --output=/dev/stderr > /dev/null

Voici un exemple:

echo '$ANSIBLE_VAULT;1.1;AES256
30636561663762383436386639353737363431353033326634623639666132623738643764366530
6332363635613832396361333634303135663735356134350a383265333537383739353864663136
30393363653361373738656361613435626237643633383261663138653466393332333036353737
3335396631613239380a616531626235346361333737353831376633633264326566623339663463
6235' | ansible-vault decrypt /dev/stdin --output=/dev/stderr > /dev/null

j'espère qu'ils vont mettre en œuvre un moyen plus simple de le faire.

Edit: Variables d'Environnement comme Entrée:

avoir un comportement similaire avec multi-ligne variables d'environnement bash utiliser printf au lieu de echo

Exemple (mot de passe: 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
9
répondu Scudelletti 2017-07-06 07:51:00

puisque les fichiers de voûte entiers ne fonctionnent pas bien avec les histoires de git, utiliser des chaînes de voûte dans les fichiers variables est la façon de faire, cela rend également les variables de sortie par nom beaucoup plus claires.

je veux mettre fredsSecretString: value dans vars.yml , (sa valeur est fastfredfedfourfrankfurters mais chut, ne laissez pas les gens savent !!)

$ 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

pour décrypter la valeur, renvoyer la chaîne cryptée dans un coffre-fort. comme suit:

    $ echo '$ANSIBLE_VAULT;1.1;AES256
    36643662303931336362356361373334663632343139383832626130636237333134373034326565
    3736626632306265393565653338356138626433333339310a323832663233316666353764373733
    30613239313731653932323536303537623362653464376365383963373366336335656635666637
    3238313530643164320a336337303734303930303163326235623834383337343363326461653162
    33353861663464313866353330376566346636303334353732383564633263373862' |
 ansible-vault decrypt && echo
    Vault password: fred
    Decryption successful
    fastfredfedfourfrankfurters
    $
6
répondu Coleman Corrigan 2017-07-14 16:25:13

bien qu'il n'y ait aucun problème pour afficher des valeurs de chaîne cryptées avec des messages de débogage ansible ou en utilisant un cli possible, il y a une solution de plus qui peut être pratique pour les besoins d'automatisation. Vous pouvez utiliser les libs python d'ansible et les utiliser dans votre code (essentiellement, tout cela situé dans ansible.parsing.*)

1) fournir le mot de passe du coffre-fort et générer le "coffre-fort" avec des secrets.

# 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) Charger un fichier yaml avec 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 vous avez besoin pour chiffrer une nouvelle chaîne et mettre à jour votre dictionnaire:

    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) Une fois le traitement terminé, réécrivez avec Unsibledumper:

with open('new_variables.yml','w') as fd:
    yaml.dump(loaded_yaml, fd, Dumper=AnsibleDumper, encoding=None, default_flow_style=False)
0
répondu andruhan 2018-02-21 21:36:56