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 配置)。