26.6. 在使用 Ansible 泄露时更改 IdM 服务 vault secret
当服务实例有危险时,请按照此流程重新使用 Ansible playbook 来更改存储在服务 vault 中的 secret。以下示例中的情景假定 on webserver3.idm.example.com 检索到的机密已被破坏,而不是存储该机密的非对称库的密钥。在示例中,管理员重复利用在非对称库中存储一个 secret 时,以及从非对称库中获取一个 secret 导入到 IdM 主机 时使用的 Ansible playbook。在流程开始时,IdM 管理员使用非对称密码库中的新 secret 存储一个新的 PEM
文件,调整清单文件,而不检索到被入侵的 Web 服务器 webserver3.idm.example.com,然后重新运行这两个程序。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.15 或更高版本。
-
已安装
freeipa.ansible_freeipa
集合。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password
,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(这是执行
freeipa.ansible_freeipa
模块的节点)是作为 IdM 客户端、服务器或副本的 IdM 域的一部分。 - 您已创建了非对称密码库用于存储服务机密。
-
您已为在 IdM 主机上运行的 web 服务生成了新的
httpd
密钥,以替换泄露的旧密钥。 -
新的
httpd
密钥存储在 Ansible 控制器上,例如 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/private-key-to-an-externally-certificate.pem 文件中。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保您要检索该 secret 的主机在
webservers
部分中正确定义。例如,要指示 Ansible 检索到 webserver1.idm.example.com 和 webserver2.idm.example.com 的 secret,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要确保列表不包含当前 example webserver3.idm.example.com 中被入侵的 web 服务器。
从相关集合目录中生成 data-archive-in-asymmetric-vault.yml Ansible playbook 文件的副本。例如:
cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
$ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 data-archive-in-asymmetric-vault-copy.yml 文件进行编辑。
通过在
freeipa.ansible_freeipa.ipavault
任务部分设置以下变量来修改该文件:-
表示
ipaadmin_password
变量的值已在 secret.yml Ansible vault 文件中定义。 -
将
name
变量设置为 vault 的名称,如 secret_vault。 -
将
service
变量设置为密码库的服务所有者,如 HTTP/webserver.idm.example.com。 -
将
中的变量
设置为 "{{ lookup('file', 'new-private-key-to-an-externally-certificate.pem')| b64encode }}"。这可确保 Ansible 使用私钥从 Ansible 控制器上的工作目录检索文件,而不是从 IdM 服务器检索。 将
action
变量设置为member
。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
表示
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 retrieve-data-asymmetric-vault-copy.yml 文件进行编辑。
通过在
freeipa.ansible_freeipa.ipavault
任务部分设置以下变量来修改该文件:-
表示
ipaadmin_password
变量的值已在 secret.yml Ansible vault 文件中定义。 -
将
name
变量设置为 vault 的名称,如 secret_vault。 -
将
service
变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com。 -
将
private_key_file
变量设置为用于检索服务 vault secret 的私钥的位置。 -
将
变量
设置为 IdM 服务器上您要检索 new-private-key-to-an-externally-certificate.pem 机密的位置,如当前工作目录。 将
action
变量设置为member
。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
表示
在 playbook 中添加一个部分,它将从 IdM 服务器检索数据文件到 Ansible 控制器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 playbook 中添加一个部分,它将检索到的 new-private-key-to-an-externally-certificate.pem 文件从 上的 Ansible 控制器传输到清单文件的
webservers
部分:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow