欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > Ansible(7)——管理机密与事实

Ansible(7)——管理机密与事实

2025/4/18 14:19:29 来源:https://blog.csdn.net/m0_68756914/article/details/147076080  浏览:    关键词:Ansible(7)——管理机密与事实

目录

一、管理机密: 

1、Ansible Vault :

2、ansible-vault 命令行工具:

(1)创建加密文件:

(2)查看加密文件:

(3)编辑现有加密文件:

(4)加密现有文件:

(5)解密现有文件:

(6)更改加密文件的密码:

3、运行加密 playbook : 

(1)通过密码文件提供密码:

(2)以交互方式提供密码:

4、禁用 Playbook artifact :

(1)命令行:

(2)修改文件:

二、管理事实:

1、Ansible facts:

2、将事实作为变量注入:

3、事实收集:

(1)关闭事实收集:

(2)收集事实的子集:

4、自定义事实:

(1)常用场景:     

(2)创建自定义事实:

(3)使用自定义事实:

5、使用魔法变量:


一、管理机密: 

1、Ansible Vault :

        Ansible 可能需要访问密码或 API 密钥等敏感数据,以便配置远程服务器。通常,这些信息以纯文本形式存储在变量清单或其它 Ansible 文件中。若是任何有权访问 Ansible 文件的用户,以及存储这些 Ansible 文件的版本控制系统都能够访问这些敏感数据,将存在很大的安全风险,因此 Ansible 提供了 Ansible Vault 加密敏感变量。

        使用随 Ansible 提供的 Ansible Vault ,可以加密和解密任何由 Ansible 使用的结构化数据文件(例如,清单变量、 playbook 中含有的变量文件、在执行 playbook 时作为参数传递的变量文件、以及 Ansible 角色中定义的变量等)。

2、ansible-vault 命令行工具:

        若要使用 Ansible Vault ,可通过一个名为 ansible-vault 的命令行工具来创建、编辑、加密、解密和查看文件

注:Ansible Vault 并不实施自有的加密函数,而是使用外部的 Python 工具集。文件通过 AES256 的对称加密(将密码用作机密密钥)方式加以保护,而这种方式尚未得到第三方正式审核。

(1)创建加密文件:

        要创建新的加密文件,可以使用 ansible-vault create filename 命令。该命令将提示输入新的 vault 密码,同时会利用默认的编辑器 vi 打开文件。

注:1)除了通过标准输入途径输入 vault 密码外,还可以使用 vault 密码文件来存储 vault 密码。密码文件是以纯文本形式存储加密密码的文件,密码应当在该文件中存储为一行字符串;

       2)由于该文件中包含敏感的纯文本密码,因此密码文件务必要通过文件权限和其他安全措施加以严密保护(在最新的 Ansible 版本中,用于保护文件的密文是 AES256 );

       3)需要使用密码文件时,用户可通过 --vault-password-file 选项进行指定。

(2)查看加密文件:

        用户可以使用 ansible-vault view filename 命令来查看 Ansible Vault 加密的⽂件,⽽不必打开文件进行编辑。

(3)编辑现有加密文件:

        编辑现有的加密文件可使用 Ansible Vault 提供的 ansible-vault edit filename 命令。此命令会将文件解密为一个临时文件,并允许用户编辑该文件。而在编辑结束保存文件时,此命令会将其内容进行复制并删除临时文件。

 注:edit 子命令会改写文件,因此仅可在进行更改时使用它。若要查看文件的内容而不进行更改,始终应使用 view 子命令。

(4)加密现有文件:

        使用 ansible-vault encrypt filename 命令可以加密已存在的⽂件。同时 ansible-vault encrypt filename 命令可取多个欲加密⽂件的文件名称作为参数。

        若文件已为加密文件或待加密文件没有内容时,执行此命令均会报错。

        1)已加密:

        2)没有内容:

注:使用 --output=OUTPUT_FILE 选项,可将加密⽂件以新的名称进行保存

(5)解密现有文件:

        现有的加密⽂件可以通过 ansible-vault decrypt filename 命令进行永久解密

注:同样,在解密单个⽂件时,也可使用 --output=OUTPUT_FILE 选项将解密⽂件以新的名称进行保存

(6)更改加密文件的密码:

        使用 ansible-vault rekey filename 命令可更改加密⽂件密码,此命令可同时更新多个数据⽂件的密钥,需要提供原始密码和新密码。

注:若更改密码时,用户需要使用 Vault 密码⽂件,可使用 --new-vault-password-file 选项以实现此操作。

3、运行加密 playbook : 

         如需访问通过 Ansible Vault 加密的 playbook ,则需要向 ansible-playbook 命令提供加密密码

(1)通过密码文件提供密码:

        在执行 playbook 时,使用 --new-vault-password-file 选项可提供加密密码。

注:若运行加密 playbook 时没有提供加密密码,命令将报错。

(2)以交互方式提供密码:

       若要以交互方式提供 vault 密码,可使用 --vault-id @prompt 选项实现。

        用户还可以通过 ansible-navigator 使用多个 Ansible Vault 密码,将多个 --vault-id 选项或 --vault-password-file 选项传递给 ansible-navigator 命令。

注:必须禁用 playbook artifact 才能以交互方式输入 Vault 密码。若 ansible-navigator 命令需要提示用户输入交互式 Vault 密码,并且 playbook artifact 未禁用,则该命令会挂起。

4、禁用 Playbook artifact :

(1)命令行:

        Playbook artifact 默认处于启用状态,用户可以使用 ansible-navigator --playbook-artifact-enable false 命令禁用 playbook artifact

(2)修改文件:

        另外,用户还可以通过修改项目 ansible-navigator.yml 文件或主目录中的 .ansible-navigator.yml 文件来禁用 playbook artifact

二、管理事实:

1、Ansible facts:

        Ansible 事实( facts )是 Ansible 从受管主机自动探查到的变量,由 ansible.builtin.setup 模块调取,其包含的信息存储到可重复使用的变量中。此外,用户也可以创建自定义事实,这些事实对于该系统来说是唯一的,存储在受管主机上。

      事实     变量
  简短的主机名称  ansible_facts['hostname']
  完全限定的域名

  ansible_facts['fqdn']

  基于路由的 IPv4 地址  ansible_facts['default_ipv4']['address']
  所有网络接口的名称列表  ansible_facts['interfaces']
  /dev/vda1 磁盘分区的大小  ansible_facts['devices']['vda']['partitions']['vda1']['size']
   DNS 服务器列表  ansible_facts['dns']['nameservers']
  当前运行的内核版本  ansible_facts['kernel']

        事实可提供主机名称、内核版本、网络接口、IP 地址、操作系统版本、各种环境变量、CPU 数量、可用内存、可用磁盘空间等信息。 

       Ansible 事实可以成为 playbook 的一部分。借助事实,用户可以方便地检索受管主机的状态,并根据此状态确定要执行的操作。例如,根据当前内核版本重新启动服务器、根据可用的内存来自定义 MySQL 配置文件、根据主机名称来创建用户等等。

2、将事实作为变量注入:

         Ansible 2.5 之前,事实变量是以 ansible_ 字符串为前缀的单个变量注入 Ansible 2.5 之后,事实变量的前缀变为 ansible_facts 。目前仍有许多 playbook 使用作为变量注入的事实,而非使用 ansible_facts.* 新语法。 

        新老语法对比如下:

      新语法     老语法
  ansible_facts['hostname']  ansible_hostname
  ansible_facts['fqdn']  ansible_fqdn
  ansible_facts['default_ipv4']['address']  ansible_default_ipv4['address']
  ansible_facts['interfaces']  ansible_interfaces
  ansible_facts['devices']['vda']['partitions']['vda1']['size']  ansible_devices['vda']['partitions']['vda1']['size']
  ansible_facts['dns']['nameservers']  ansible_dns['nameservers']
  ansible_facts['kernel']  ansible_kernel

注:可在配置文件 [default] 中用 inject_facts_as_vars = false 关闭对两种表示方式的兼容

3、事实收集:

(1)关闭事实收集:

        为了加快 playbook 的运行速度,或受管主机不支持 setup 模块,可将事实收集功能关闭,即将 gather_facts 关键字设置为 no

注:即使将 gather_facts 关键字设置为 no ,用户也可以在 play 中通过 ansible.builtin.setup 模块手动收集事实。

(2)收集事实的子集:

        系统默认会收集所有事实,如仅需收集事实的子集,而非所有事实,同样可以通过 ansible.builtin.setup 模块实现。

        如需收集特定子集以外的所有事实,在子集名称前面添加 ! 即可。

4、自定义事实:

        管理员可以自行创建事实,将它们推送到受管主机。自定义事实创建后将由 ansible.builtin.setup 模块收集和读取。

(1)常用场景:     

        1)基于自定义脚本定义系统的特定值;

        2)基于程序执行定义值。

(2)创建自定义事实:

        通常情况下, ansible.builtin.setup 模块将从各个受管主机的 /etc/ansible/facts.d 目录中加载自定义事实。这些文件或脚本是采用 INI 或 JSON 格式的纯文本文件,其扩展名必须以 .fact 结尾才可以使用。

        1)INI 格式:

        在 INI 事实文件中,首先定义事实的顶级分类(例如,[packages] ),后跟欲定义事实的键值对

        2)JSON 格式:

        同样的内容以 JSON 格式实现,使用语法如下:

注:⾃定义事实⽂件不能采用同 playbook 相同的 YAML 格式,而 JSON 格式是接近的等效格式。

(3)使用自定义事实:

        在 playbook 中,自定义事实和默认事实的使用方式相同。

5、使用魔法变量:

        魔法变量( magic variables )即一些并非ansible.buildin.setup 模块采集的事实或配置信息是很有用,仍可以被 ansible 使用的变量

        魔法变量有 4 种常用类型如下:

(1)hostvars :是包含受管主机的变量,可以用于列出受管主机的非事实变量。

注:若还没有为受管主机收集事实,则 hostvars 不会包含该主机的事实。

(2)group_names :可列出受管主机所属的所有组。

(3)groups :可列出所有 inventory 中的组( groups )和主机( hosts )。

(4)inventory_hostname :可列出当前受管主机在 inventory 中定义的主机名,因为各种原因这可能和事实报告中的主机名不同。

注:更多有关魔法变量的信息可参考https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词