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 模板语法

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐