文档

13. 密钥处理和连接安全性

本文档介绍了 Ansible Tower 如何以安全的方式处理密钥和连接。

13.1. 密钥处理

Ansible Tower 管理三组密钥

  • 本地 Ansible Tower 用户的用户名密码

  • 用于 Ansible Tower 操作的密钥(数据库密码、消息总线密码等)

  • 用于自动化的密钥(SSH 密钥、云凭据、外部密码库凭据等)

13.1.1. 本地 Ansible Tower 用户的用户名密码

Ansible Tower 使用 SHA256 哈希通过 PBKDF2 算法对本地 Ansible Tower 用户密码进行哈希处理。通过外部帐户机制(LDAP、SAML、OAuth 等)进行身份验证的用户没有存储任何密码或密钥。

13.1.2. 用于 Ansible Tower 操作的密钥处理

Ansible Tower 包含以下用于操作的密钥

  • /etc/tower/SECRET_KEY

    • 用于在数据库中加密自动化密钥的密钥(见下文)。如果 SECRET_KEY 发生变化或未知,则数据库中的任何加密字段都无法访问。

  • /etc/tower/tower.{cert,key}

    • Ansible Tower Web 服务的 SSL 证书和密钥。默认情况下会安装自签名证书/密钥;客户可以提供本地适用的证书和密钥。

  • 数据库密码在 /etc/tower/conf.d/postgres.py 中,消息总线密码在 /etc/tower/conf.d/channels.py 中

    • 连接到 Ansible Tower 组件服务的密码

这些密钥都以未加密的形式存储在 Ansible Tower 服务器上,因为它们都需要在 Ansible Tower 服务启动时以自动化的方式读取。所有密钥都受到 Unix 权限保护,并且仅限 root 和 Ansible Tower 服务用户 awx 访问。

如果需要隐藏这些密钥,则读取这些密钥的文件是解释性 Python。这些文件可以在每次服务重启时调整,以通过其他机制检索这些密钥。这样做是客户提供的修改,可能需要在每次升级时重新应用。Red Hat 支持和 Red Hat 咨询拥有此类修改的示例。

注意

如果密钥系统出现故障,Tower 将无法获取信息,并且可能会以在服务恢复后可恢复的方式失败。强烈建议在该系统上使用一些冗余。

如果由于任何原因,您认为为您生成的 SECRET_KEY 已被泄露,需要重新生成,则可以运行安装程序中的工具,该工具的行为类似于 Tower 备份和还原工具。要生成新的密钥

  1. 在执行任何其他操作之前备份您的 Tower 数据库! 按照本指南的 备份和还原 Tower 部分中描述的步骤操作。

  2. 使用您的安装清单(与运行备份/还原相同的清单),运行 setup.sh -k

先前密钥的备份副本将保存在 /etc/tower/ 中。

13.1.3. 用于自动化的密钥处理

Ansible Tower 在数据库中存储各种用于自动化或由自动化产生的密钥。这些密钥包括

  • 所有凭据类型的全部密钥字段(密码、密钥、身份验证令牌、密钥云凭据)

  • Ansible Tower 设置中定义的外部服务的密钥令牌和密码

  • “密码”类型调查字段条目

为了加密密钥字段,Tower 使用 AES 在 CBC 模式下使用 256 位密钥进行加密,PKCS7 填充,以及使用 SHA256 进行 HMAC 验证。加密/解密过程从 SECRET_KEY(如上所述)、模型字段的字段名称以及数据库分配的自动递增记录 ID 推导出 AES-256 位加密密钥。因此,如果密钥生成过程中使用的任何属性发生变化,Tower 将无法正确解密密钥。Ansible Tower 的设计使得 SECRET_KEY 永远无法在 Ansible Tower 启动的剧本中读取,这些密钥永远无法被 Tower 用户读取,并且任何密钥字段值都无法通过 Ansible Tower REST API 获取。如果剧本中使用密钥值,我们建议在任务中使用 no_log,以防意外记录。

13.2. 连接安全性

13.2.1. 内部服务

Ansible Tower 在内部运行过程中会连接以下服务

  • PostgreSQL 数据库

  • Redis 键值存储

与 Redis 的连接通过本地 Unix 套接字,仅限于 awx 服务用户访问。

与 PostgreSQL 数据库的连接通过 TCP 协议使用密码身份验证,可以通过 localhost 或者远程连接(外部数据库)。此连接可以使用 PostgreSQL 内置的 SSL/TLS 支持,如安装程序支持中默认配置的那样。SSL/TLS 协议由默认的 OpenSSL 配置进行配置。

13.2.2. 外部访问

Ansible Tower 通过 nginx 提供的标准 HTTP/HTTPS 协议在标准端口上访问。默认情况下会安装自签名证书/密钥;客户可以提供本地适用的证书和密钥。SSL/TLS 算法支持在 /etc/nginx/nginx.conf 配置文件中配置。默认情况下使用“中间”配置文件,客户可以对其进行配置。客户更改必须在每次更新后重新应用。

13.2.3. 受管节点

Ansible Tower 还会连接受管机器和服务,以进行自动化操作。所有与受管机器的连接均通过标准安全机制(如 SSH、WinRM、SSL/TLS 等)完成,每个机制都继承自该功能的系统配置(如系统 OpenSSL 配置)。