20260114
Ansible 可能需要访问密码或 API 密钥等敏感数据,此信息可能以纯文本形式存储在清单变量或其他 Ansible 文件中。任何有权访问 Ansible 文件的用户或存储这些 Ansible 文件的版本控制系统都能够访问此敏感数据。这显然存在安全风险。Ansible 随附的 Ansible Vault 可以加密任何由 Ansible 使用的结构化数据文件,包括清单变量、playbook 中含有
·
Ansible - 管理 Secrets
Ansible Vault 简介
Ansible 可能需要访问密码或 API 密钥等敏感数据,此信息可能以纯文本形式存储在清单变量或其他 Ansible 文件中。任何有权访问 Ansible 文件的用户或存储这些 Ansible 文件的版本控制系统都能够访问此敏感数据。
这显然存在安全风险。Ansible 随附的 Ansible Vault 可以加密任何由 Ansible 使用的结构化数据文件,包括清单变量、playbook 中含有的变量文件、在执行 playbook 时作为参数传递的变量文件,以及 Ansible 角色中定义的变量。
# 加密解密文件
# 首先创建文件
[aaa@controller webapp 09:07:59]$ ansible-vault create user.yaml
New Vault password:
Confirm New Vault password:
# 查看发现加密了
[aaa@controller webapp 09:10:38]$ cat user.yaml
$ANSIBLE_VAULT;1.1;AES256
64636532376263656631346431636636336630353462333335333865303833373731646534356462
3366663362333635383332616365343265366535393731620a313139366639613164363763656134
33383130313137393163323830336637666465633536653835383264383666383261363530396132
6431363864336138350a363730326630623236386531333465386663346237663261333334393836
66626137376636393962623262383937316536353966346563383332323563393133
# 使用ansible view查看
[aaa@controller webapp 09:10:40]$ ansible-vault view user.yaml
Vault password:
username: aaa
password: 123
# 编辑文件
[aaa@controller webapp 09:11:03]$ ansible-vault edit user.yaml
Vault password:
[aaa@controller webapp 09:11:26]$ ansible-vault view user.yaml
Vault password:
username: aaa
password: 123
# 取消文件内容加密
[aaa@controller webapp 09:11:31]$ ansible-vault decrypt user.yaml
Vault password:
Decryption successful
[aaa@controller webapp 09:11:43]$ cat user.yaml
username: aaa
password: 123
# 进行文件内容加密
[aaa@controller webapp 09:11:47]$ ansible-vault encrypt user.yaml
New Vault password:
Confirm New Vault password:
Encryption successful
[aaa@controller webapp 09:11:56]$ cat user.yaml
$ANSIBLE_VAULT;1.1;AES256
36623935613337336634633463663965313136313162663062366637323763383033393735353931
3562626564336565386566373963643237383165326437390a303033636664363764353861356433
32663366656464373939353232643263616565613763353435326531663666623561653463336634
3964396435353461630a383639633636623132353163356232343837393565393930333834326435
66393233383331383165656135346638653166303165666437623466653137333836
[aaa@controller webapp 09:12:00]$
常用 ansible-vault 指令
- ansible-vault create : 创建一个加密文件
- ansible-vault view : 查看加密文件
- ansible-vault decrypt :进行取消文件内容加密
- ansible-vault encrypt :进行加密文件内容
- ansible-vault rekey : 更改文件加密密码
ansible-vault rekey secret.yaml --vault-password-file=pass --new-vault-password-file=pass-new
Rekey
--vault-password-file
管理 FACTS
FACTS 是 Ansible 在受管主机上自动检测到的变量,默认保存在内容中,只存在于本次 playbook 执行期间
查看 FACTS 内容
- name: Dump facts
hosts: node1
tasks:
- name: Print all facts
debug:
var: ansible_facts
查看单个变量
---
- hosts: node1
tasks:
- name: Print Ansible facts
debug:
msg: >
The default IPv4 address of {{ ansible_fqdn }}
is {{ ansible_default_ipv4.address }}
部分 FACTS
- 短主机名:ansible_facts[‘hostname’]
- 完全限定的域名:ansible_facts[‘fqdn’]
- 主要的 IPV4 地址(基于路由):ansible_facts[‘default_ipv4’][‘address’]
- 所有网络接口的名称列表:ansible_facts[‘interfaces’]
- /dev/vdal 磁盘分区的大小:ansible_facts[‘devices’][‘vda’][‘partitions’]['vda1][‘size’]
- DNS 服务器列表:ansible_facts[‘dns’][‘nameservers’]
- 当前运行的内核的版本:ansible_facts[‘kernel’]
setup 和 gather_facts 模块
- gather_facts:只能用来收集 facts
- setup:除了收集 facts,还提供额外选项:
- filter 选项:用于查看特定的 facts 值
- gather_subset 选项:用于控制收集 facts 范围
[aaa@controller webapp 18:49:31]$ ansible -m setup -a 'filter=ansible_default_ipv4' node1
node1 | SUCCESS => {
"ansible_facts": {
"ansible_default_ipv4": {
"address": "10.1.8.11",
"alias": "ens32",
"broadcast": "10.1.8.255",
"gateway": "10.1.8.2",
"interface": "ens32",
"macaddress": "00:0c:29:92:ec:70",
"mtu": 1500,
"netmask": "255.255.255.0",
"network": "10.1.8.0",
"type": "ether"
},
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
关闭 FACTS 收集:
- 不使用任何 FACTS
- 希望加快 play 速度或减少 play 在受管主机上造成的负载
- 受管主机因为某种原因而无法运行 setup 模块
- 需要安装一些必备软件后再收集 FACTS
[defaults]
gathering=explicit
Jinja2 模板语法
更多推荐
所有评论(0)