加密密钥¶
本文档描述了支持的密钥加密操作,并解释了如何使用适当的工具执行它们。
Ansible-Vault¶
OpenStack-Ansible 提供了使用 Ansible Vault 加密和轮换密钥文件和密钥对的工具。
角色默认值¶
# Allowed values: "encrypt", "decrypt" and "rotate"
ansible_vault_action: encrypt
# Path to the OpenStack-Ansible configuration (openstack_deploy) folder
ansible_vault_repo_path: "{{ lookup('ansible.builtin.env', 'OSA_CONFIG_DIR') | default(lookup('ansible.builtin.env', 'PWD') ~ '/openstack_deploy', True) }}"
# Name of the region, which will be used as vault id
ansible_vault_region: "{{ service_region | default('RegionOne') }}"
# Path to the ansible-vault password file
ansible_vault_pw: "{{ lookup('ansible.builtin.env', 'ANSIBLE_VAULT_PASSWORD_FILE') }}"
# Path to the freshly generated ansible-vault password file. Used for rotation only
ansible_vault_new_pw: "{{ ansible_vault_pw ~ '.new' }}"
# If in-place copy is enabled, role will completely override the resulting file
# When disabled, Ansible will produce a managed block for each managed variable
ansible_vault_in_place_copy: true
# Paths to files, where individual variables needs to be encrypted
ansible_vault_secrets_paths:
- "{{ ansible_vault_repo_path }}/user_secrets.yml"
- "{{ ansible_vault_repo_path }}/group_vars/all/secrets.yml"
# Instead of defining paths to files explicitly, you can search filesystem for
# files with individually encrypted secrets. Results will be combined with
# `ansible_vault_secrets_paths`
ansible_vault_secrets_search_paths: []
ansible_vault_secrets_search_pattern: "secrets.yml"
# Can be overriden to a specific destination in case venv is not activated
ansible_vault_binary: ansible-vault
安装 Collection¶
要安装 Collection,请在您的区域部署配置文件中定义它,该文件位于 /etc/openstack_deploy/user-collection-requirements.yml,如下所示
- name: osa_ops.encrypt_secrets
type: git
version: master
source: https://opendev.org/openstack/openstack-ansible-ops#/encrypt_secrets
然后,运行 ./scripts/bootstrap-ansible.sh 以安装 Collection。
密钥文件的初始加密¶
首次初始化区域时,应在将其存储在 Git 中之前加密密钥和生成的私钥。 您可以在本地或在部署主机上执行此过程。
注意
每当生成新的服务或密钥对时,都必须重新运行加密过程,这可能发生在后续的部署阶段。
本地加密密钥¶
本地加密密钥的过程类似于在部署主机上运行它,但 OpenStack-Ansible 可能需要一些特定于上下文的变量,这些变量不可用,必须手动提供。
在继续之前,请确保您拥有已安装 Ansible 的 Python 虚拟环境。
生成 Ansible Vault 的密码并安全地存储它
pwgen 36 1 > /tmp/vault.secret
运行加密 playbook
ansible-playbook osa_ops.encrypt_secrets.ansible_vault -e ansible_vault_region=${REGION_NAME} -e ansible_vault_pw=/tmp/vault.secret
将 /tmp/vault.secret 的内容复制到部署主机,例如复制到 /etc/openstack/vault.secret。
在 /etc/openstack_deploy/user.rc 中定义 vault secret 路径
export ANSIBLE_VAULT_PASSWORD_FILE=/etc/openstack/vault.secret
在您首选的密码管理器中安全地存储密码。
将更改推送到您的 Git 仓库。
确保部署主机解密任何必需的密钥。
在部署主机上加密密钥¶
按照以下步骤直接在部署主机上加密密钥
生成密码并安全地存储它
pwgen 36 1 > /etc/openstack/vault.secret
在 /etc/openstack_deploy/user.rc 中定义 vault secret 路径
export ANSIBLE_VAULT_PASSWORD_FILE=/etc/openstack/vault.secret
运行加密 playbook
openstack-ansible osa_ops.encrypt_secrets.ansible_vault
将更改提交并推送到 /etc/openstack_deploy 到您的 Git 仓库。
将 vault 密码 (/etc/openstack/vault.secret) 保存在安全的密码管理器中。
在运行 OpenStack playbook 之前,解密任何必要的密钥。
在部署主机上解密密钥对¶
OpenStack-Ansible PKI 角色不支持在部署主机上以加密格式存储私钥。 相反,配置一个在将它们放置在部署主机上后解密密钥的流水线。
应将加密的密钥对提交到 Git 仓库,但未加密地存储在部署主机上。
要解密它们,请运行以下 playbook
openstack-ansible osa_ops.encrypt_secrets.ansible_vault -e ansible_vault_action=decrypt
轮换 Ansible Vault 密钥¶
轮换 Ansible Vault 密码需要使用新密码重新加密仓库中的所有密钥。 假设原始密码存储在 /tmp/vault.secret 中,请按照以下步骤操作
生成新的 vault 密码/加密密钥
pwgen 45 1 > /tmp/vault.secret.new
使用新密码重新加密所有密钥
ANSIBLE_VAULT_PASSWORD_FILE=/tmp/vault.secret ansible-playbook osa_ops.encrypt_secrets.ansible_vault -e ansible_vault_action=rotate
将新密码传输到部署主机,并将其安全地存储在密码管理器中。