问题描述
在使用 Ansible 2.3.0 及以上版本时,想了解在处理加密变量时的最佳实践。根据文档,似乎可以使用 !vault |
前缀来加密特定的变量,而不需要将变量和密钥放在一个完整的保险库文件中。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1:分开管理加密变量和非加密变量
根据你的需求,你可以选择将加密的变量和非加密的变量分开管理,以保持代码的可读性和清晰性。在这个方案中,你可以将加密变量命名为 vault_
前缀,并将其放在单独的文件中。这有助于明确指示哪些变量来自加密源。
操作步骤:
- 在你的 Ansible 项目中,为加密的变量创建一个单独的文件,如
vars/vault_vars.yml
。 - 在
vault_vars.yml
文件中定义加密的变量,使用!vault |
前缀。 - 在其他非加密变量的文件中,定义普通的变量。
以下是一个示例结构:
ansible/
├── group_vars/
│ ├── all.yml
│ └── testing.yml
├── vars/
│ ├── vault_vars.yml
│ ├── other_vars.yml
在 vault_vars.yml
中,你可以这样定义加密的变量:
vault_mysecret: !vault |
$ANSIBLE_VAULT;1.1;AES256
...(加密数据)
而在 other_vars.yml
中,你可以定义普通的变量:
other_plain_text: othervalue
方案2:使用脚本和工具管理加密变量
如果你需要更多的灵活性和控制,你可以使用脚本和工具来管理加密变量的结构和加密过程。
操作步骤:
- 创建一个脚本,用于加密变量并将其输出到对应的文件中。
- 确保你的加密变量文件(如
vault_vars.yml
)中的每个加密变量都使用!vault |
前缀。 - 使用脚本运行时,将加密的变量传递给脚本,脚本会将其加密并输出到文件中。
以下是一个简单的示例脚本,用于加密变量并将其输出到文件中:
#!/bin/bash
# 输入需要加密的变量
read -p "Enter the variable value to encrypt: " variable_value
# 加密变量并将其输出到文件
echo "vault_variable: !vault |" >> vars/vault_vars.yml
printf "$variable_value" | ansible-vault encrypt >> vars/vault_vars.yml
在运行该脚本时,它会要求你输入需要加密的变量值,并将加密后的结果输出到 vars/vault_vars.yml
文件中。
通过使用脚本和工具,你可以更灵活地管理加密变量的结构和加密过程,以适应不同的需求和场景。
方案3:移除 vault 文件,统一管理加密变量
如果你想简化你的目录结构,并集中管理加密变量,可以考虑将所有的加密变量都放在同一个文件中,而不再使用 vault 文件。
操作步骤:
- 创建一个文件,如
vars/vault_vars.yml
,用于存放所有的加密变量。 - 在
vault_vars.yml
中,使用!vault |
前缀来定义加密的变量。 - 在运行
ansible-playbook
时,通过指定 ansible vault 文件来解密这些变量。
以下是一个示例 vault_vars.yml
文件的内容:
vault_mysecret: !vault |
$ANSIBLE_VAULT;1.1;AES256
...(加密数据)
在运行 ansible-playbook
时,通过使用 --vault-password-file
参数指定 ansible vault 文件,以解密这些变量。
总结
根据你的需求和项目的复杂性,你可以选择将加密变量和非加密变量分开管理,使用脚本和工具更灵活地加密变量,或者移除 vault 文件,统一管理加密变量。这些方案可以根据实际情况来决定如何更好地组织和管理你的加密变量。