Как Хранить/Извлекать Несколько Паролей Ansible-Vault В Одном Файле/Из Одного Файла

  • Автор темы Gungrave.00
  • Обновлено
  • 22, Oct 2024
  • #1

Обновлять: Как отметил @yaobin. Похоже, они удалили часть о том, что несколько паролей находятся в одном файле. Это было здесь, как видно из веб-архива:
https://web.archive.org/web/20201202040251/https://docs.ansible.com/ansible/latest/user_guide/vault.html
Но теперь его нет:
https://web.archive.org/web/20210128225633/https://docs.ansible.com/ansible/latest/user_guide/vault.html
Поэтому я не уверен, что эту проблему можно решить так, как было описано в тогдашнем руководстве. Судя по всему, это была ручная ошибка :(


В инструкции написано при хранении паролей в разделе файлов:

Чтобы сохранить пароль хранилища в файле, введите пароль в виде строки на

одна строка в файле. Убедитесь, что права доступа к файлу

 
 
 ERROR! Did not find a match for --encrypt-vault-id=test in the known vault-ids ['abc']
 

соответствующий. Не добавляйте файлы паролей в систему контроля версий. Если у вас есть --encrypt-vault-id=test the --vault-id abc@file_path несколько паролей, вы можете хранить их все в одном файле, если ERROR! Did not find a match for --encrypt-vault-id=test in the known vault-ids ['default'] entry independent of the number of entries in file. With --encrypt-vault-id=test поскольку у всех есть идентификаторы хранилища. Для каждого пароля создайте отдельную строку

default

и введите идентификатор хранилища, пробел, затем пароль в виде строки. Для ansible-vault with --vault-password-file пример:

dev my_dev_pass test my_test_pass prod my_prod_pass

и есть пример:

Однако примеров использования этого файла нет. Я пробовал много разных способов. Если я использую

видит только

Gungrave.00


Рег
03 Jul, 2014

Тем
56

Постов
183

Баллов
483
  • 25, Oct 2024
  • #2

Сегодня днем ​​я тоже боролся с этим. Думаю, я понял это немного лучше, поэтому хочу поделиться этим. Но я также новичок в Ansible Vault, поэтому то, что я здесь говорю, может быть не совсем правильным. Я использовал [1] в качестве основного источника обучения.

Ссылки

Что могло вас смутить

[1] говорит

 
 
 
 
 
 
 
 
 root@2ca77340d571:/# ansible-vault view --vault-id=.passvaults extravaulty.yml
chocolate:banana
 
has the pattern root@2ca77340d571:/# ansible-vault view [email protected] extravaulty.yml chocolate:banana . Но символ .passvaults delivers the meaning of "inside", "at", or "of" which makes people think a vault ID dev означает строку внутри файла [email protected] with the label root@2ca77340d571:/# ansible-vault view [email protected] extravaulty.yml chocolate:banana .

Но это ошибка: согласно моему тесту, весь контент в root@2ca77340d571:/# cat extravaulty.yml $ANSIBLE_VAULT;1.2;AES256;dev 33336336336238326137393764316333623231336238323931306166626434653164326330656566 3561356333343435663538623661363661373461356461300a663361666331323031623530343930 62633230636566643339663637386438336539383162346634393031633165333033396238363163 6134383233346538330a326266626261346638303738313862656337396237343231326231656139 34376334663664343164303462356431306539316232323761386164643735376330 is used as the password. In your example above, the password Вы думаете это «my_test_pass»; но пароль Ansible Vault видит является root@2ca77340d571:/# ansible-vault encrypt [email protected] extravaulty.yml Encryption successful (note the white spaces and the End-of-Lines).

Поэтому, root@2ca77340d571:/# cat extravaulty.yml chocolate:banana does not select the line "my_test_pass". It actually means the following:

  • В шифрование, это означает «использовать весь контент в root@2ca77340d571:/# cat .passvaults dev my_dev_pass test my_test_pass prod my_prod_pas as the password to encrypt the given message and marks the result with the label ansible-vault ".
  • В расшифровка, это означает «использовать весь контент в file_path as the password to decrypt everything that is marked with the label test@file_path ".

Использование нескольких файлов паролей

Поэтому, если вы хотите использовать разные файлы паролей, вам нужно сделать это следующим образом:

  • Создайте три файла (я специально разместил их в разных папках для демонстрации): ansible-vault , test , --vault-id abc@file_path .
  • Поместите пароли в правильные файлы. Пример: ansible-vault into ansible-vault .
  • Когда вы шифруете файл --encrypt-vault-id=test , you have two options:
    • Вы можете указать только один идентификатор хранилища: default
    • Вы можете указать несколько идентификаторов хранилища, но также необходимо использовать --vault-id to tell --vault-password-file какой из них на самом деле следует использовать для шифрования файла: default

Когда вам нужно расшифровать какой-либо контент, вы можете знать или не знать, каким паролем был зашифрован контент. В этом случае вы можете передать все возможные идентификаторы хранилища: --vault-id . And vault will automatically figure out which password to use. This is talked about в этом разделе [1].

Это также объясняет, почему default part is only used as a hint. In fact, you can pass in the vault IDs with completely wrong labels:

--vault-id

И ansible-vault is still able to decrypt the file, because, essentially, ANSIBLE_VAULT_ID_MATCH=1 ansible-vault decrypt prod@~/pass_dev.txt dev@/tmp/pass_test.txt test@./pass_prod.txt some_encrypted_file.yml использует ansible-vault as the hint to see which password should be tried first. If it doesn't succeed, it tries the other passwords.

Но если вы определите переменную среды ANSIBLE_VAULT_ID_MATCH , label будет серьезно относиться к меткам и пробовать пароли только с совпадающими метками, поэтому следующее не удастся:

ansible-vault

Другие вещи в вашем вопросе

Возможно, я не совсем прав в этой части: наверное, ansible-vault maintains an internal list of "currently available vault IDs". If no ansible-vault decrypt prod@~/pass_dev.txt dev@/tmp/pass_test.txt test@./pass_prod.txt some_encrypted_file.yml присутствует в командной строке, единственный доступный идентификатор хранилища — label . When ansible-vault decrypt dev@~/pass_dev.txt test@/tmp/pass_test.txt prod@./pass_prod.txt some_encrypted_file.yml аргументы приведены, т. ansible-vault encrypt --vault-id dev@~/pass_dev.txt test@/tmp/pass_test.txt prod@./pass_prod.txt --encrypt-vault-id dev my_dev_file.yml is overridden by whatever is provided.

Поэтому, когда вы зашифровали целевой файл с помощью ansible-vault , without any other --encrypt-valut-id , единственным доступным идентификатором хранилища был ansible-vault encrypt --vault-id dev@~/pass_dev.txt my_dev_file.yml . But by providing my_dev_file.yml ты спрашивал pass_dev.txt to encrypt the target file using a vault ID of "test" which was not available, hence the error "Did not find a match".

Позже, когда вы предоставили my_dev_pass with only ./pass_prod.txt но попросил его зашифровать целевой файл, используя /tmp/pass_test.txt , ~/pass_dev.txt по-прежнему не удалось найти требуемый идентификатор хранилища, поэтому снова появляется ошибка «Не найдено совпадение».

Вы совершили ошибку, потому что думали test selects one password from all the available passwords in file_path , поэтому, предоставляя один файл паролей, вы думали, что предоставили несколько паролей. Но, похоже, это не так. test works. You need to provide multiple password files (or, technically, multiple password sources which could also be prompts and scripts).

 

Klio


Рег
23 May, 2008

Тем
62

Постов
175

Баллов
485
  • 25, Oct 2024
  • #3

Я вас совершенно неправильно понял. Вот новая попытка ответить на ваш вопрос. :)

  1. Создайте файл паролей:
file_path
  1. Создайте файл для шифрования:
test@file_path
  1. Зашифруйте файл:
dev my_dev_pass\ntest my_test_pass\nprod my_prod_pass
  1. Просмотрите необработанный файл:
password_file

и расшифрованный файл:

test

Насколько я понимаю, когда вы используете password_file you are telling it to use test@password_file в качестве подсказки (не пароля хранилища) и @ as the file where the encrypt/decrypt password is.

Это означает, что вы также можете сделать это:

label@source

Или это

vault ID

Что для меня не интуитивно понятно.

 

Iceka


Рег
05 Apr, 2020

Тем
70

Постов
196

Баллов
566
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно