14. 密钥处理和连接安全

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

14.1. 密钥处理

AWX 管理三组密钥

  • 本地 AWX 用户的用户密码

  • AWX 操作用途的密钥(数据库密码、消息总线密码等)

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

14.1.1. 本地用户的用户密码

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

14.1.2. 操作用途的密钥处理

AWX 包含以下在操作中使用的密钥

  • /etc/awx/SECRET_KEY

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

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

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

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

    • 连接到 AWX 组件服务的密码

所有这些密钥都未加密地存储在 AWX 服务器上,因为它们都需要以自动方式在 AWX 服务启动时读取。所有密钥都受 Unix 权限保护,并限制为 root 和 AWX 服务用户 awx。

如果需要隐藏这些密钥,则读取这些密钥的文件是解释 Python。这些文件可以在服务每次重启时调整为通过其他机制检索这些密钥。

注意

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

如果出于任何原因,您认为 AWX 为您生成的 SECRET_KEY 已被泄露,并且需要重新生成,您可以运行安装程序中的一个工具,该工具的行为类似于 AWX 备份和还原工具。

要生成新的密钥,请使用安装程序的清单运行 setup.sh -k

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

14.1.3. 自动化用途的密钥处理

AWX 在数据库中存储各种密钥,这些密钥要么用于自动化,要么是自动化的结果。这些密钥包括

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

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

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

为了加密密钥字段,AWX 使用 AES 以 CBC 模式使用 256 位密钥进行加密,PKCS7 填充,以及使用 SHA256 进行身份验证的 HMAC。加密/解密过程从 SECRET_KEY(如上所述)、模型字段的字段名称和数据库分配的自增记录 ID 派生 AES-256 位加密密钥。因此,如果密钥生成过程中使用的任何属性发生更改,AWX 将无法正确解密密钥。AWX 的设计使得 SECRET_KEY 在 AWX 启动的 playbook 中永远不可读,这些密钥永远不会被 AWX 用户读取,并且没有任何密钥字段值可以通过 AWX REST API 获得。如果密钥值在 playbook 中使用,我们建议对任务使用 no_log,以避免意外记录。

14.2. 连接安全

14.2.1. 内部服务

AWX 连接到以下服务作为内部操作的一部分

  • PostgreSQL 数据库

  • Redis 键/值存储

与 redis 的连接通过本地 unix 套接字进行,仅限于 awx 服务用户。

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

14.2.2. 外部访问

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

14.2.3. 受管节点

AWX 还连接到受管机器和服务作为自动化的组成部分。所有与受管机器的连接都通过指定的标准安全机制完成,例如 SSH、WinRM、SSL/TLS 等 - 这些机制中的每一个都继承了相关功能的系统配置(例如系统 OpenSSL 配置)。