强化和合规性
以安全的方式安装、配置和维护在 Red Hat Enterprise Linux 上运行的 Ansible Automation Platform
摘要
前言 复制链接链接已复制到粘贴板!
本指南为在 Red Hat Enterprise Linux 上安装、配置和维护 Ansible Automation Platform 的各种流程提供推荐的实践,以安全的方式在 Red Hat Enterprise Linux 上安装、配置和维护 Ansible Automation Platform。
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
如果您对本文档有任何改进建议,或发现错误,请通过 https://access.redhat.com 联系技术支持来创建一个请求。
第 1 章 强化 Ansible Automation Platform 简介 复制链接链接已复制到粘贴板!
本文档提供了有关在 Red Hat Enterprise Linux 上部署 Red Hat Ansible Automation Platform 部署的 Red Hat Ansible Automation Platform 的增强(称为"硬性")的指导。
以下目前不在本指南范围内:
- Ansible Automation Platform 的其他部署目标,如 OpenShift。
- 通过云服务供应商市场提供的 Ansible Automation Platform 托管服务。
Ansible Automation Platform 2.4 的强化和合规性包括与自动化控制器的特定国 安全信息局 (DISA) 安全技术实施指南 (STIG)相关的额外注意事项,但这个指南不适用于 Ansible Automation Platform 2.5。
本指南采取一种实用方法来强化 Ansible Automation Platform 安全状况,从部署的规划和架构阶段开始,然后涵盖安装、初始配置和第 2 天操作的具体指导。因为本指南特别涵盖在 Red Hat Enterprise Linux 上运行的 Ansible Automation Platform,所以会涵盖 Red Hat Enterprise Linux 的强化指导,在其中会影响自动化平台组件。对于将 DISA STIG 作为整体安全策略的一部分,为那些集成 DISA STIG 的机构提供了其他有关 Red Hat Enterprise Linux 的注意事项。
这些建议不能保证部署 Ansible Automation Platform 的安全性或合规性。您必须根据您机构的独特要求评估安全性,以解决特定威胁和风险,并根据实施因素平衡这些风险。
1.1. 受众 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 上部署时,为负责安装、配置和维护 Ansible Automation Platform 2.5 的用户编写本指南。为安全操作、合规性评估以及与相关安全流程关联的其他功能提供了其他信息。
1.2. Ansible Automation Platform 概述 复制链接链接已复制到粘贴板!
Ansible 是一个使用 Python 编写的开源命令行 IT 自动化软件应用程序。您可以使用 Ansible Automation Platform 配置系统、部署软件和编配高级工作流,以支持应用程序部署、系统更新等等。Ansible 的主要优势是简单且易于使用。它还关注安全性和可靠性,具有最小的移动部分。它使用安全、知名的通信协议(如 SSH、HTTPS 和 WinRM)进行传输,并使用人类可读的语言,旨在在没有广泛的培训的情况下快速启动。
Ansible Automation Platform 使用企业级功能增强 Ansible 语言,如 基于角色的访问控制 (RBAC)、集中日志记录和审计、凭据管理、作业调度和复杂的自动化工作流。借助 Ansible Automation Platform,您可以从我们的强大的合作伙伴生态系统获得认证内容;提高安全性、报告和分析,以及跨机构扩展自动化的生命周期技术支持。Ansible Automation Platform 简化了用于管理企业应用程序基础架构生命周期的自动化工作负载的开发和操作。它可在跨多个 IT 域间工作,包括操作、网络、安全、开发以及跨混合环境。
1.2.1. Red Hat Ansible Automation Platform 部署方法 复制链接链接已复制到粘贴板!
Ansible Automation Platform 有三种不同的安装方法:
- RPM-based on Red Hat Enterprise Linux
- Container-based on Red Hat Enterprise Linux
- 基于 Red Hat OpenShift Container Platform 的 Operator
本文档提供了在使用前两个安装方法(基于 RPM 或基于容器的)安装时强化 Ansible Automation Platform 的指导。本文档建议您将基于容器的安装方法用于新部署,因为基于 RPM 的安装程序现已弃用。
如需更多信息,请参阅 已弃用的功能。
本文档中不描述基于 Operator 的部署。
1.2.2. Ansible Automation Platform 组件 复制链接链接已复制到粘贴板!
Ansible Automation Platform 是一个由独立组件组成的模块化平台,可连接在一起,包括自动化控制器、平台网关、自动化中心和事件-Driven Ansible 控制器。
第 2 章 强化 Ansible Automation Platform 复制链接链接已复制到粘贴板!
本指南采取一种实用方法来强化 Ansible Automation Platform 安全状况,从部署的规划和架构阶段开始,然后涵盖安装阶段的特定指导。由于本指南特别涵盖在 Red Hat Enterprise Linux 上运行的 Ansible Automation Platform,因此涵盖了 Red Hat Enterprise Linux 的强化指南,其中涵盖了它会影响自动化平台组件。
2.1. 规划注意事项 复制链接链接已复制到粘贴板!
Red Hat Ansible Automation Platform 由以下主要组件组成:
- 自动化控制器
- Automation mesh
- 私有自动化中心
- Event-Driven Ansible 控制器
另外还提供了 PostgreSQL 数据库,但也可以使用用户提供的 PostgreSQL 数据库。红帽建议客户始终部署 Ansible Automation Platform 的所有组件,以便在不需要进一步操作的情况下可以使用所有特性和功能。
如需更多信息,请参阅 Red Hat Ansible Automation Platform 架构
2.1.1. Ansible Automation Platform 部署拓扑 复制链接链接已复制到粘贴板!
根据测试的 部署模型 中定义的已测试部署参考架构之一安装 Ansible Automation Platform 2.5。企业组织应使用企业参考架构之一进行生产部署,以确保最高级别的正常运行时间、性能和持续可扩展性。资源约束的机构或部署可以使用"增长"参考架构。查看 测试的部署模型 文档,以确定最适合您的要求的参考架构。所选的参考架构将包括规划信息,如架构图、所需的 Red Hat Enterprise Linux 服务器数量、部署使用的网络端口和协议,以及企业架构的负载均衡器信息。
可以在不同的基础架构参考架构和不同的环境配置中安装 Ansible Automation Platform。红帽不会在公布的参考架构之外完全测试架构。红帽建议对所有新部署使用经过测试的参考架构,并为满足最低要求的部署提供合理的支持。
下图显示了经过测试的容器企业架构:
图 2.1. 参考架构概述
在规划与 Ansible Automation Platform 相关的防火墙或云网络安全组配置时,请参阅 Tested deployment model 中的 "Network Ports" 部分,以了解在防火墙或安全组上需要打开哪些网络端口。
对于互联网连接的系统,规划安装的网络 和协议 部分定义了 Ansible Automation Platform 可配置为使用的服务的传出流量要求,如 Red Hat Automation hub、Insights for Ansible Automation Platform、Ansible Galaxy、registry.redhat.io 容器镜像 registry 等。
将 Ansible Automation Platform 组件使用的端口的访问限制为受保护的网络和客户端。强烈建议您有以下限制:
- 限制数据库服务器上的 PostgreSQL 数据库端口(5432),以便只允许其他 Ansible Automation Platform 组件服务器(自动化控制器、自动化中心、Event-Driven Ansible 控制器)的访问权限。
- 从安装主机以及用于维护访问 Ansible Automation Platform 服务器的其他可信系统限制 SSH 访问 Ansible Automation Platform 服务器。???
- 限制来自可信网络和客户端的自动化控制器、自动化中心和 Event-Driven Ansible 控制器的 HTTPS 访问。
2.1.2. DNS、NTP 和服务规划 复制链接链接已复制到粘贴板!
安装 Ansible Automation Platform 时,DNS 和 NTP 配置对于成功部署和正常运行至关重要。
2.1.2.1. DNS 复制链接链接已复制到粘贴板!
安装 Ansible Automation Platform 时,安装程序会检查安装程序清单中的 完全限定域名 (FQDN)是否定义了某些基础架构服务器。本指南建议所有 Ansible Automation Platform 基础架构节点在 DNS 中定义有效的 FQDN,它解析为可路由的 IP 地址,并在安装程序清单文件中使用这些 FQDN。
2.1.2.2. DNS 和负载均衡 复制链接链接已复制到粘贴板!
当在 Ansible Automation Platform 中使用负载均衡器时,如部署拓扑中所述,负载均衡器需要额外的 FQDN。例如,FQDN (如 aap.example.com )可用于负载均衡器,将流量定向到安装清单中定义的每个平台网关组件。
2.1.2.3. NTP 复制链接链接已复制到粘贴板!
在 Ansible Automation Platform 基础架构中配置每个服务器,以将时间与 网络时间协议 (NTP)池或机构的 NTP 服务同步。这样可确保 Ansible Automation Platform 生成的日志记录和审核事件具有准确的时间戳,并且任何从自动化控制器运行的作业都正确执行。这也启用了 Ansible Automation Platform 中系统之间的通信,以根据超时拒绝消息。
有关为 NTP 同步配置 chrony 服务的详情,请参考 Red Hat Enterprise Linux 文档中的 使用 Chrony。
2.1.3. Ansible Automation Platform 的凭证管理计划 复制链接链接已复制到粘贴板!
Red Hat Ansible Automation Platform 使用凭证来针对机器验证对作业的请求,与清单源同步,并从版本控制系统中导入项目内容。
自动化控制器管理三组 secret:
- 用于本地 Ansible Automation Platform 用户的 用户密码。
- 用于 Ansible Automation Platform 操作使用的 secret (数据库密码、消息总线密码等)。
- 用于自动化的 secret (SSH 密钥、云凭证、外部密码 vault 凭证等)。
强烈建议您实施特权访问或凭证管理解决方案来保护凭证免受威胁。组织应审计 的使用,并提供额外的编程控制、访问和特权升级。
您可以通过确保它们是唯一的并只存储在自动化控制器中来进一步保护自动化凭证。OpenSSH 等服务可以配置为只允许来自特定地址的连接的凭证。与系统管理员用来登录到服务器的用户使用不同的凭据进行自动化。虽然应该尽可能限制直接访问,但可用于灾难恢复或其他临时管理目的,从而可以更轻松地进行审核。
不同的自动化作业可能需要访问不同级别的系统。例如,您可以具有低级系统自动化来应用补丁并执行安全基准检查,同时具有更高级别的自动化来部署应用程序。通过使用不同的密钥或凭证进行自动化,任何一个关键漏洞的影响都会最小化。这也可轻松进行基线审核。
2.1.3.1. Ansible Automation Platform 操作 secret 复制链接链接已复制到粘贴板!
Ansible Automation Platform 以操作方式使用多个 secret (密码、密钥等)。这些 secret 存储在各种 Ansible Automation Platform 服务器上,因为每个组件服务都必须在启动时读取它们。所有文件都受到 Unix 权限保护,仅限于 root 用户或相应的服务帐户用户。应定期监控这些文件,以确保没有未经授权的访问或修改。
2.1.3.1.1. 基于 RPM 的安装 secret 复制链接链接已复制到粘贴板!
下表提供了这些 secret 的位置,用于基于 RPM 的 Ansible Automation Platform 安装。
| 自动化控制器 secret | |
| 文件路径 | 描述 |
|
|
用于加密数据库中自动化 secret 的 secret 密钥。如果 |
|
| 自动化控制器 Web 服务的 SSL 证书和密钥。
默认安装 如需更多信息,请参阅使用用户提供的 PKI 证书安装。 |
|
| 包含自动化控制器用于连接数据库的密码,除非使用 TLS 身份验证进行数据库连接。 |
|
| 包含自动化控制器用于 websocket 广播的 secret。 |
|
| 包含自动化控制器用来与平台网关同步状态的密钥。 |
| 平台网关 secret | |
| 文件路径 | 描述 |
|
|
用于加密数据库中自动化 secret 的 secret 密钥。如果 |
|
| 平台网关 Web 服务的 SSL 证书。 默认情况下会安装自签名证书,但可以使用用户提供的证书和密钥对。 如需更多信息,请参阅使用用户提供的 PKI 证书安装。 |
|
| 平台网关 Web 服务的 SSL 密钥。 默认情况下会安装自签名证书,但可以使用用户提供的证书和密钥对。 如需更多信息,请参阅使用用户提供的 PKI 证书安装。 |
|
| 使用平台网关使用的 Redis 缓存进行 mutual TLS (mTLS)身份验证的 SSL 证书。 |
|
| 使用平台网关使用的 Redis 缓存进行 mutual TLS (mTLS)身份验证的 SSL 密钥。 |
|
| 包含平台网关用于连接数据库的密码,除非使用 TLS 身份验证进行数据库连接。还包含用于连接平台网关使用的 Redis 缓存的密码。 |
| Automation hub secret | |
| 文件路径 | 描述 |
|
| 包含自动化中心用于连接数据库的密码,除非使用 TLS 身份验证进行数据库连接。包含自动化中心 Web 服务使用的 Django secret 密钥。 |
|
|
用于自动化中心 EE 令牌身份验证的 PEM 格式的 OpenSSL 公钥。默认情况下,从 |
|
|
用于自动化中心 EE 令牌身份验证的 PEM 格式的 OpenSSL 私钥。默认情况下会生成它,但用户可以使用 |
|
| Automation hub web 服务的 SSL 证书。 默认情况下会安装自签名证书,但可以使用用户提供的证书和密钥对。 如需更多信息,请参阅使用用户提供的 PKI 证书安装。 |
|
| 自动化 hub web 服务的 SSL 密钥。 默认情况下会安装自签名证书,但可以使用用户提供的证书和密钥对。 如需更多信息,请参阅使用用户提供的 PKI 证书安装。 |
|
| 用于加密自动化中心数据库表中的敏感字段的密钥。 如果密钥更改或未知,自动化中心无法访问数据库中的加密字段。 |
| event-Driven Ansible secret | |
| 文件路径 | 描述 |
|
| 用于加密 Event-Driven Ansible 控制器数据库表中的字段的 secret 密钥。 如果 SECRET_KEY 更改或未知,Event-Driven Ansible 控制器无法访问数据库中的加密字段。 |
|
| 包含 Event-Driven Ansible 网关用于连接数据库的密码,除非使用 TLS 身份验证进行数据库连接。 包含用于连接 Event-Driven Ansible 控制器使用的 Redis 缓存的密码。 包含 Event-Driven Ansible 控制器用来与平台网关同步状态的密钥。 |
|
| Event-Driven Ansible 控制器 web 服务的 SSL 证书。 默认情况下会安装自签名证书,但可以使用用户提供的证书和密钥对。 如需更多信息,请参阅使用用户提供的 PKI 证书安装。 |
|
| Event-Driven Ansible 控制器 web 服务的 SSL 密钥。 默认情况下会安装自签名证书,但可以使用用户提供的证书和密钥对。 如需更多信息,请参阅使用用户提供的 PKI 证书安装。 |
|
| 使用 Event-Driven Ansible 控制器使用的 Redis 缓存进行 mutual TLS (mTLS)身份验证的 SSL 证书 |
|
| 使用 Event-Driven Ansible 控制器使用的 Redis 缓存进行 mutual TLS (mTLS)身份验证的 SSL 密钥 |
|
| Event-Driven Ansible 控制器 websocket 端点的 SSL 证书。 默认情况下会安装自签名证书,但可以使用用户提供的证书和密钥对。 如需更多信息,请参阅使用用户提供的 PKI 证书安装。 |
|
| Event-Driven Ansible 控制器 websocket 端点的 SSL 密钥。 默认情况下会安装自签名证书,但可以使用用户提供的证书和密钥对。 如需更多信息,请参阅使用用户提供的 PKI 证书安装。 |
| Redis secret | |
| 文件路径 | 描述 |
|
| 安装程序用来为每个组件服务生成默认自签名证书的 SSL 证书。 |
|
| 安装程序用来为每个组件服务生成默认自签名证书的内部自签名证书的 SSL 密钥。 |
其中一些文件位置反映了之前名为 Ansible Tower 的自动化控制器的产品名称。
2.1.3.1.2. 基于容器的安装 secret 复制链接链接已复制到粘贴板!
基于 RPM 的安装列表的 secret 也用于基于容器的安装,但它们以不同的方式存储。Red Hat Ansible Automation Platform 的基于容器的安装使用 Podman secret 存储操作 secret。这些 secret 可以使用 podman secret list 命令列出。
默认情况下,Podman 将数据存储在安装并运行容器化 Red Hat Ansible Automation Platform 服务的用户主目录中。Podman secret 存储在文件 $HOME/.local/share/containers/storage/secrets/filedriver/secretsdata.json 中,因此它们不会以 base64 编码的字符串的形式保存,但它们不以纯文本形式保存。
Podman secret 中存储的数据可以通过命令 podman secret inspect --showsecret <secret> 来显示。
此文件应定期监控,以确保没有未经授权的访问或修改。
2.1.3.2. 自动化使用 secret 复制链接链接已复制到粘贴板!
自动化控制器会在数据库中存储各种用于自动化的 secret 或自动化生成的 secret。自动化使用 secret 包括:
- 所有凭证类型(密码、secret 密钥、身份验证令牌、secret 云凭证)的所有 secret 字段。
- 自动化控制器设置中定义的外部服务的 secret 令牌和密码。
- "密码"类型调查字段条目。
您可以向用户和团队授予使用这些凭证的权限,而无需实际向用户公开凭证。这意味着,如果用户移至不同的团队或离开组织,您不必更新所有系统的密钥。
自动化控制器使用 SSH (或 Windows 等效)连接到远程主机。要将密钥从自动化控制器传递给 SSH,必须在将其写入命名管道之前解密密钥。然后,自动化控制器会使用该管道将密钥发送到 SSH (因此永远不会写入磁盘)。如果使用密码,自动化控制器会直接响应密码提示符并解密密码,然后再将其写入提示符。
作为具有超级用户访问权限的管理员,您可以使用类似 YAML/JSON 的定义以标准格式定义自定义凭证类型,从而将新凭证类型分配给作业和清单更新。这可让您定义一个与现有凭证类型类似的自定义凭证类型。例如,您可以创建一个自定义凭证类型,将第三方 Web 服务的 API 令牌注入环境变量,您的 playbook 或自定义清单脚本可以使用它。
要加密 secret 字段,Ansible Automation Platform 使用 Cipher Block Chaining (CBC)模式中的 高级加密标准 (AES)模式,使用 256 位 密钥进行加密、公钥加密标准 (PKCS7)填充 和基于哈希的消息身份验证代码 (HMAC)使用 SHA256 进行身份验证。加密/解密过程从 SECRET_KEY、模型字段的字段名称和数据库分配的自动递增记录 ID 生成 AES-256 位加密密钥。因此,如果密钥生成过程中使用的任何属性发生变化,Ansible Automation Platform 无法正确解密 secret。Ansible Automation Platform 的设计使得 SECRET_KEY 不能在 playbook Ansible Automation Platform 启动时读取。这意味着,Ansible Automation Platform 用户不会读取这些 secret,并且 Ansible Automation Platform REST API 没有提供 secret 字段值。如果在 playbook 中使用 secret 值,您必须在任务中使用 no_log,使其不会被意外记录。如需更多信息,请参阅 保护没有日志的敏感数据。
2.1.3.3. 使用 no_log 保护敏感数据 复制链接链接已复制到粘贴板!
如果将 Ansible 输出保存到日志,您可以在 Ansible 输出中公开任何 secret 数据,如密码和用户名。要将敏感值保留在日志中,请使用 no_log: True 属性公开它们的任务。但是,no_log 属性不会影响调试输出,因此请小心不要在生产环境中调试 playbook。
2.1.4. 用户身份验证计划 复制链接链接已复制到粘贴板!
Ansible Automation Platform 环境中需要考虑两种类型的用户帐户:
- 基础架构帐户:运行 Ansible Automation Platform 服务的 RHEL 服务器上的用户帐户。
- 应用程序帐户:Ansible Automation Platform Web UI 和 API 的用户帐户。
2.1.4.1. 基础架构服务器帐户规划 复制链接链接已复制到粘贴板!
对于运行 Ansible Automation Platform 服务的 RHEL 服务器上的用户帐户,请按照您的机构策略来确定单个用户帐户是否应该是本地的,或者应使用外部身份验证源。只有对 Ansible Automation Platform 组件本身具有有效执行维护任务的用户才应被授予对底层 RHEL 服务器的访问权限,因为服务器存储包含敏感信息的配置文件,如加密密钥和服务密码。由于这些个人必须有特权访问权限才能维护 Ansible Automation Platform 服务,因此尽量减少对底层 RHEL 服务器的访问至关重要。不要将 sudo 访问权限授予 root 帐户或本地 Ansible Automation Platform 服务帐户(awx、pulp、postgres)给不受信任的用户。
有些本地服务帐户由基于 RPM 的安装程序创建和管理。底层 RHEL 主机上的这些特定帐户不能来自外部身份验证源。
2.1.4.2. Ansible Automation Platform 帐户规划 复制链接链接已复制到粘贴板!
用于访问用户界面或 API 的 Ansible Automation Platform 用户帐户可以是本地(存储在 Ansible Automation Platform 数据库中)或映射到外部身份验证源,如 轻量级目录访问协议 (LDAP)服务器。本指南建议尽可能,所有主用户帐户都应映射到外部身份验证源。使用外部帐户源可在此上下文中使用权限时消除错误来源,并尽可能减少用于维护整个 Ansible Automation Platform 中用户的时间。这包括分配给个人个人的帐户以及非个人实体,如用于外部应用程序集成的服务帐户。保留任何本地帐户,如默认"admin"帐户,以满足外部身份验证机制不可用的紧急访问或"破坏镜"的情况。
- LDAP
- SAML
- TACACS+
- RADIUS
- Azure Active Directory
- Google OAuth
- 通用 OIDC
- Keycloak
- GitHub
- GitHub 机构
- GitHub 团队
- GitHub enterprise
- GitHub 企业机构
- GitHub enterprise team
选择符合您组织的验证策略的身份验证机制,并参考 访问管理和身份验证,以了解相关身份验证机制的先决条件。在公共或非安全网络中发生流量时,必须确保 Ansible Automation Platform 和身份验证后端之间的与身份验证相关的流量加密(例如,LDAPS 或 LDAP 通过 TLS,OAuth2 和 SAML 提供程序的 HTTPS 等)。
在 Ansible Automation Platform UI 中,任何"系统管理员"帐户都可以编辑、更改和更新任何清单或自动化定义。将这些帐户权限限制为可能的最小用户集合,以进行低级自动化控制器配置和灾难恢复。
Ansible Automation Platform 2.5 引入了一个新的中央身份验证机制,供所有平台组件使用:
- 自动化控制器
- 私有自动化中心
- Event-Driven Ansible 控制器
在 2.5 之前,每个组件都有自己的身份验证配置。
2.1.5. 日志记录和日志捕获 复制链接链接已复制到粘贴板!
可见性和分析是企业安全性和零信任架构的重要支离。日志记录是捕获操作和审核的关键。您可以使用 Red Hat Enterprise Linux 安全强化指南中的 审计系统部分中的内置审计 支持来管理日志记录和审计。Ansible Automation Platform 的内置日志记录和活动流日志记录 Red Hat Ansible Automation Platform 和自动化日志用于审计目的。有关配置自动化执行 的日志记录和聚合 部分中提供了更详细的信息。
本指南建议您配置 Ansible Automation Platform 和底层 Red Hat Enterprise Linux 系统,以集中收集日志记录和审核,而不是在本地系统中查看它。Ansible Automation Platform 必须配置为使用外部日志记录来从 Ansible Automation Platform 服务器中的多个组件编译日志记录。发生的事件必须时间与时间相关,才能准确进行诊断分析。这意味着 Ansible Automation Platform 服务器必须配置有 NTP 服务器,该服务器也供日志记录聚合器服务使用,以及 Ansible Automation Platform 的目标。相关关系必须满足特定的行业容错要求。换句话说,可能有不同的要求,不同的日志记录事件的时间戳不得与 x 秒以上不同。此功能应在外部日志记录服务中可用。
日志的另一个关键功能是使用加密功能来保护日志工具的完整性。日志数据包括成功记录系统活动所需的所有信息(如日志记录、日志设置和日志报告)。攻击者通常会替换日志工具或将代码注入现有工具,以便从日志中隐藏或擦除系统活动。要解决这一风险,必须对日志工具进行加密签名,以便您可以识别日志工具何时修改、操作或替换。例如,验证日志工具没有被修改,操作或替换的一种方法是对工具文件使用校验和哈希。这样可保证工具的完整性没有被破坏。
2.1.6. 审计和事件检测 复制链接链接已复制到粘贴板!
Ansible Automation Platform 应该用于通过为常见用例应用 NIST Cybersecurity Framework 来达到安全策略要求,例如:
- 为 Red Hat Enterprise Linux 上的 Web 服务器需要 HTTPS.
- 为 Red Hat Enterprise Linux 上的 Web 服务器和数据库服务器之间的内部通信需要 TLS 加密。
- 生成报告显示策略已正确部署。
- 监控违反策略的偏移。
- 自动更正任何策略违反情况。
这可以通过网络安全框架的 5 个步骤完成:
- 识别
- 根据安全策略定义要实施的要求。
- 保护
- 实施并应用要求作为 Ansible Playbook。
- DETECT
- 监控偏移并生成审计报告。
- 响应
- 探索在检测到事件时可能执行的操作。
- RECOVER
- 使用 Ansible 将系统恢复到已知良好的配置。
2.1.7. Red Hat Enterprise Linux host planning 复制链接链接已复制到粘贴板!
Ansible Automation Platform 的安全性取决于底层 Red Hat Enterprise Linux 服务器配置的一部分。因此,必须根据 Red Hat Enterprise Linux 8 的安全强化或 Red Hat Enterprise Linux 9 安全强化 来安装和配置每个 Ansible Automation Platform 组件的底层 Red Hat Enterprise Linux 主机(取决于所使用的操作系统),以及任何安全配置集要求(CIS)、STIG、Murance Portability and Accountability Act (HIPAA)等。本文档推荐在所有新部署中使用 Red Hat Enterprise Linux 9。使用基于容器的安装方法时,需要 Red Hat Enterprise Linux 9。
2.1.7.1. Ansible Automation Platform 和其他软件 复制链接链接已复制到粘贴板!
当在 Red Hat Enterprise Linux 服务器上安装 Ansible Automation Platform 组件时,Red Hat Enterprise Linux 服务器应该只专用于使用它。除了 Ansible Automation Platform 外,不得安装其他服务器功能,因为这是一个不支持的配置,并可能会影响 Ansible Automation Platform 软件的安全性和性能。
同样,当 Ansible Automation Platform 部署到 Red Hat Enterprise Linux 主机上时,它会像 nginx web 服务器、Pulp 软件存储库和 PostgreSQL 数据库服务器(除非使用用户提供的外部数据库)安装软件。此软件不应以更通用的方式修改或使用(例如,不要使用 nginx 来提供额外的网站内容或 PostgreSQL 来托管其他数据库),因为这是一个不支持的配置,并可能会影响 Ansible Automation Platform 的安全性和性能。此软件的配置由 Ansible Automation Platform 安装程序管理,执行升级时可能会撤消任何手动更改。
2.2. 安装 复制链接链接已复制到粘贴板!
有影响 Ansible Automation Platform 安全性能的安装决策。安装过程包括设置多个变量,其中一些与 Ansible Automation Platform 基础架构强化相关。在安装 Ansible Automation Platform 前,请考虑本指南的安装部分中的指导。
2.2.1. 从专用安装主机安装 复制链接链接已复制到粘贴板!
Ansible Automation Platform 安装程序可以从其中一个基础架构服务器(如自动化控制器)或可通过 SSH 访问 Ansible Automation Platform 基础架构服务器的外部系统运行。Ansible Automation Platform 安装程序还仅用于安装,而是用于后续的第二天操作,如备份和恢复,以及升级。本指南建议从专用外部服务器执行安装和第二天操作,此处后称为安装主机。这样做无需登录其中一个基础架构服务器来运行这些功能。安装主机必须仅用于管理 Ansible Automation Platform,且不得运行任何其他服务或软件。
安装主机必须是已安装和配置的 Red Hat Enterprise Linux 服务器,它根据 Red Hat Enterprise Linux 的安全强化 以及与您的机构相关的任何安全配置集要求(CIS、STIG 等)。获取 Ansible Automation Platform 安装程序,如 规划安装 中所述,并创建安装程序清单文件,如 编辑 Red Hat Ansible Automation Platform 安装程序清单文件 中所述。此清单文件用于升级、添加基础架构组件和第二天操作,因此请在安装后保留该文件,供以后使用。
对安装主机的访问必须仅限于负责管理 Ansible Automation Platform 基础架构的人员。随着时间的推移,它将包含敏感信息,如安装清单(包含 Ansible Automation Platform 的初始登录凭据)、用户提供的 PKI 密钥和证书的副本、备份文件等。安装主机还必须用于在基础架构管理和维护需要时通过 SSH 登录到 Ansible Automation Platform 基础架构服务器。
2.2.2. 安装清单中与安全相关的变量 复制链接链接已复制到粘贴板!
安装清单文件定义 Ansible Automation Platform 基础架构的架构,并提供一些可用于修改基础架构组件初始配置的变量。如需有关安装程序清单的更多信息,请参阅关于安装程序清单文件。
下表列出了多个与安全相关的变量,以及它们用于基于 RPM 的部署的建议值。
| RPM 部署变量 | 推荐的值 | 详情 |
|---|---|---|
|
| true | 安装程序将安装程序管理的 Postgres 数据库配置为在设置此变量时接受基于 SSL 的连接。 此变量的默认值为 false,这意味着 SSL/TLS 不用于 PostgreSQL 连接。 当设置为 true 时,平台使用 SSL/TLS 连接到 PostgreSQL。 |
|
| verify-full | 这些变量控制数据库的 mutual TLS (mTLS)身份验证。默认情况下,当每个服务连接到数据库时,它会尝试加密的连接,但不会强制实施。
将此变量设置为 注意 :如果使用第三方数据库而不是安装程序管理的数据库,则第三方数据库必须独立设置,以接受 mTLS 连接。 |
|
| false |
如果设置为
默认值为 |
下表列出了多个与安全相关的变量,以及它们用于基于容器的部署的建议值。
| 容器部署变量 | 推荐的值 | 详情 |
|---|---|---|
|
| false |
如果设置为
默认值为
如果安装程序清单中没有此变量,则有效等同于将变量定义为 |
|
| verify-full | 这些变量控制数据库的 mutual TLS (mTLS)身份验证。
默认情况下,当每个服务连接到数据库时,它会尝试加密的连接,但不会强制实施。将此变量设置为 注意 如果使用第三方数据库而不是安装程序管理的数据库,则第三方数据库必须独立设置,以接受 mTLS 连接。 |
|
|
|
如果设置为
默认值为
如果安装程序清单中缺少这些变量,则有效等同于将变量定义为 |
|
|
| 如果设置为 'true',则这些变量将禁用到每个组件 Web 服务的 HTTPS Strict Transport Security (HSTS)连接。
默认值为
如果安装程序清单中缺少这些变量,则有效等同于将变量定义为 |
在多个平台网关前面使用负载均衡器的企业架构中,可以在负载均衡器中终止 SSL 客户端连接,或通过传递给单独的 AAP 服务器。如果在负载均衡器中终止 SSL,本指南建议流量从负载均衡器重新加密到单独的 Ansible Automation Platform 服务器。这样可确保使用端到端加密。在这种情况下,列出的 *_disable_https 变量设置为默认值 false。
2.2.3. 使用用户提供的 PKI 证书安装 复制链接链接已复制到粘贴板!
默认情况下,Ansible Automation Platform 为平台 的基础架构组件创建自签名公钥基础架构 (PKI)证书。如果现有的 PKI 基础架构可用,必须为自动化控制器、私有自动化中心、EventDriven Ansible 控制器和 postgres 数据库服务器生成证书。将证书文件及其相关密钥文件复制到安装程序目录中,以及用于验证证书的 CA 证书。
使用以下清单变量使用新证书配置基础架构组件。
| RPM 变量 | 容器化变量 | 详情 |
|
|
| 自定义 CA 证书文件的路径。 如果设置,这将把自定义 CA 证书安装到系统信任存储中。 |
|
|
| 位于安装程序目录中的自动化控制器 PKI 证书的文件名。 |
|
|
| 安装程序目录中自动化控制器 PKI 密钥的文件名。 |
|
|
| 安装程序目录中的私有自动化中心 PKI 证书的文件名。 |
|
|
| 安装程序目录中的私有自动化中心 PKI 密钥的文件名。 |
|
|
| 安装程序目录中数据库服务器 PKI 证书的文件名。只有在使用第三方数据库时,安装程序管理的数据库服务器才需要此变量。 |
|
|
| 安装程序目录中的数据库服务器 PKI 密钥的文件名。只有在使用第三方数据库时,安装程序管理的数据库服务器才需要此变量。 |
|
|
| 安装程序目录中的 Event-Driven Ansible 控制器 PKI 证书的文件名。 |
|
|
| 安装程序目录中的 Event-Driven Ansible 控制器 PKI 密钥的文件名。 |
| - |
| 安装程序目录中平台网关 PKI 证书的文件名。 |
| - |
| 安装程序目录中平台网关 PKI 密钥的文件名。 |
当使用负载均衡器部署多个平台网关时,gateway_tls_cert 和 gateway_tls_key 都由每个平台网关共享。要防止主机名不匹配,证书 的通用名称 (CN)必须与负载均衡器使用的 DNS FQDN 匹配。如果您的机构策略需要每个服务的唯一证书,每个证书都需要一个与用于负载均衡服务的 DNS FQDN 匹配的 主题 Alt Name (SAN)。要在每个平台网关上安装唯一证书和密钥,安装清单文件中的证书和密钥变量必须定义为每个主机变量,而不是在 [all:vars] 部分中。例如:
2.2.4. 使用 ansible vault 保护敏感变量 复制链接链接已复制到粘贴板!
Ansible Automation Platform 的安装清单文件包含多个敏感变量,如默认的管理和数据库密码。默认情况下,它们以纯文本形式存储。通过使用 Ansible Vault 保护敏感值,基于 RPM 和容器化 Ansible Automation Platform 安装都受益于更高的安全性、密码假设和可维护性。
要创建 Ansible vault 文件,请使用以下流程:
流程
使用以下命令进入安装目录:
cd /path/to/ansible-automation-platform-setup-bundle-2.5-<version>使用以下命令创建 vault 文件:
ansible-vault create vault.yml出现提示时,输入 vault 密码 This password to access or modify the vault,对于 day-two 操作(如 backup 和 reconfigurations )需要这个密码。
重要具有特殊字符的密码必须采用双引号。
- 根据您的机构安全策略(例如,使用密码管理器或 vault 服务)安全地存储 vault 密码。
- 将敏感变量添加到密码库,并确保它们没有在清单文件中定义。
要编辑 vault 文件,请使用:
ansible-vault edit <file>
对于基于 RPM 的安装,您可以在执行设置脚本时在运行时提供 Ansible vault。
在 vault 文件中添加以下敏感变量:
要在安装过程中使用 vault,请使用以下流程:
流程
-
确保 vault 文件(如
vault.yml)包含所有所需的敏感变量。 使用以下命令运行安装:
./setup.sh -e @vault.yml –ask-vault-pass
使用这个流程可确保安装程序从密码库读取加密变量并提示输入 vault 密码。
2.2.4.2. 使用外部 vault 文件进行容器化安装 复制链接链接已复制到粘贴板!
对于 Ansible Automation Platform 的容器化安装,请使用提供的自动化执行 playbook 和外部 vault 文件。
在 vault 文件中添加以下敏感变量:
要将新的 Ansible 库与安装程序搭配使用,请使用以下流程:
流程
-
确保您的 vault 文件(如
vault.yml)包含所有所需的敏感变量。 使用以下命令运行容器安装程序:
ansible-playbook ansible.containerized_installer.install -e @vault.yml -ask-become-pass.
确保 vault 文件位于工作目录中,或者提供完整路径。不要在 明文 清单文件中重复加密的变量。
2.2.5. 合规配置集注意事项 复制链接链接已复制到粘贴板!
在许多环境中,Ansible Automation Platform 可能需要安装在 Red Hat Enterprise Linux 系统上,其中使用安全控制来满足合规性配置文件的要求,如 CIS Critical 安全控制、支付卡行业/数据 安全标准(PCI/DSS)、DISA STIG 或类似的配置集。在这些环境中,可能需要修改一组特定的安全控制来让 Ansible Automation Platform 正确运行。将任何合规配置集控制应用到在安装前用于 Ansible Automation Platform 的 Red Hat Enterprise Linux 服务器,然后根据需要修改以下安全控制。
在需要这些控制的环境中,讨论使用安全审核员关闭控制。
2.2.5.1. fapolicyd 复制链接链接已复制到粘贴板!
合规策略可能需要 fapolicyd 守护进程正在运行。但是,当 fapolicyd 为 enforcing 策略时,Ansible Automation Platform 目前不支持,因为这会导致 Ansible Automation Platform 的安装和操作过程中失败。因此,安装程序会运行一个 pre-flight 检查,如果发现 fapolicyd 处于 enforcing 策略,则会停止安装。本指南建议在 Ansible Automation Platform 上将 fapolicyd 设置为 permissive 模式,执行以下步骤:
-
编辑文件
/etc/fapolicyd/fapolicyd.conf并设置 "permissive = 1"。 使用命令重启该服务
sudo systemctl restart fapolicyd.service
如果此安全控制也应用到安装主机,默认的 fapolicyd 配置会导致 Ansible Automation Platform 安装程序失败。在这种情况下,建议在安装主机上将 fapolicyd 设置为 permissive 模式。
2.2.5.2. 使用"noexec"挂载的文件系统 复制链接链接已复制到粘贴板!
合规性配置文件可能需要使用 noexec 选项挂载某些文件系统,以防止执行位于这些文件系统中二进制文件。基于 Ansible Automation Platform RPM 的安装程序运行 preflight 检查,如果以下任何文件系统是使用 noexec 选项挂载的,该检查会失败:
-
/tmp -
/var -
/var/tmp
要安装 Ansible Automation Platform,您必须卸载这些文件系统,并删除了 noexec 选项。安装完成后,执行以下步骤:
-
将
noexec选项重新应用到/tmp和/var/tmp文件系统。 -
将自动化控制器作业执行路径从
/tmp改为没有启用noexec选项的备用目录。 - 要进行此更改,请以管理员身份登录到自动化控制器 UI,进入 Settings 并选择 Jobs settings。
- 将 "Job execution path" 设置改为备用目录。
在正常操作过程中,包含 /var/lib/awx 子目录的文件系统(通常为 /var)不能使用 noexec 选项挂载,或者自动化控制器无法在执行环境中运行自动化作业。
在通常审核 STIG 控制的环境中,讨论与您的安全审核员相关的 STIG 控制。
2.2.5.3. 用户命名空间 复制链接链接已复制到粘贴板!
合规性配置集可能需要内核设置 user.max_user_namespaces 设置为 "0",以防止 Linux 容器启动。例如,DISA STIG 需要此控制,但仅在不需要 Linux 容器时才需要。由于 Ansible Automation Platform 可以在容器中安装和操作,并将容器用作其执行环境功能的一部分,所以需要 Linux 容器,且必须禁用此控制。
要检查 user.max_user_namespaces 内核设置,请在安装清单中的每个 Ansible Automation Platform 组件上完成以下步骤:
- 在命令行中登录到您的自动化控制器。
-
运行
sudo sysctl user.max_user_namespaces命令。 -
如果输出表示值为零,请查看文件
/etc/sysctl.conf以及/etc/sysctl.d/下的所有文件,请编辑包含user.max_user_namespaces设置的文件,并将值设置为 "65535"。 -
要应用这个新值,请运行命令
sudo sysctl -p <file>,其中 <file> 是刚才修改的文件。 -
重新运行命令
sudo sysctl user.max_user_namespaces,并验证该值现在是否设置为 "65535"。
2.2.5.4. 交互式会话超时 复制链接链接已复制到粘贴板!
合规性配置集可能需要强制实施交互式会话超时。例如,DISA STIG 要求所有用户在 15 分钟不活跃后自动注销。安装过程通常需要一小时或更长时间来完成,这个控制可以停止安装过程,并在安装完成前注销用户。这也适用于备份和恢复等第二天操作,在生产环境中,这些操作通常比推荐的交互式会话超时要长。在这些操作过程中,增加交互式会话超时以确保操作成功。
可以强制实施此控制的方法有多种,包括 shell 超时变量,为 systemd-logind 设置空闲会话超时,或者设置 SSH 连接超时,不同的合规性配置集可以使用这些方法中的一个或多个。最经常中断安装和第 2 天操作的超时时间是 systemd-logind 的空闲会话超时,该超时是在 DISA STIG 版本 V2R1 (Red Hat Enterprise Linux 8)和 V2R2 (Red Hat Enterprise Linux 9)中引入的。要增加 systemd-logind 的空闲会话超时,以 root 用户身份:
-
编辑文件
/etc/systemd/logind.conf。 -
如果
StopIdleSessionSec设置设为零,则不需要更改。 如果
StopIdleSessionSec设置非零,这表示该会话将在该秒数后终止。更改
StopIdleSessionSec=7200以增加超时,然后运行systemctl restart systemd-logind以应用更改。- 完全退出交互式会话,并重新登录,以确保新设置应用到当前的登录会话。
这个更改只需要在安装主机上进行,或者不使用安装主机,则运行 Ansible Automation Platform 安装程序的主机。
2.2.5.5. sudo 和 NOPASSWD 复制链接链接已复制到粘贴板!
合规性配置集可能要求具有 sudo 特权的所有用户都必须提供密码(也就是说,NO PASSWD 指令不得在 sudoers 文件中使用)。Ansible Automation Platform 安装程序以特权用户身份运行许多任务,默认情况下,需要能够在不输入密码的情况下提升特权。要为安装程序提供用于提升权限的密码,请在启动 RPM 安装程序脚本时附加以下选项:
./setup.sh <setup options> --ask-become-pass.
对于基于容器的安装程序:
ansible-playbook ansible.containerized_installer.install --ask-become-pass
当安装程序运行时,会提示您输入用户的密码来提升权限。
在运行安装程序时,使用 --ask-become-pass 选项也适用于备份和恢复等第二天操作。
2.3. 初始配置 复制链接链接已复制到粘贴板!
授予对系统某些部分的访问权限会公开安全漏洞。应用以下实践来帮助保护访问:
- 最小化对系统管理帐户的访问。用户界面(Web 接口)和对运行自动化控制器的操作系统之间存在不同。系统管理员或超级用户可以访问、编辑和破坏任何系统应用程序。具有对自动化控制器的 root 访问权限的用户都可以解密这些凭据,因此尽量减少对系统管理帐户的访问对于维护安全系统至关重要。
- 最小化本地系统访问。除了用于管理目的外,自动化控制器不需要本地用户访问。非管理员用户不应该具有自动化控制器系统的访问权限。
- 强制隔离任务。不同的自动化组件可能需要在不同级别上访问系统。为每个组件使用不同的密钥或凭证,以便最小化任何一个密钥或凭证漏洞的影响。
- 将自动化控制器限制为只能进行低级自动化控制器配置和灾难恢复的最小用户集合。在自动化控制器上下文中,任何自动化控制器 '系统管理员' 或 'superuser' 帐户都可以编辑、更改和更新自动化控制器中的任何清单或自动化定义。
2.3.1. 使用配置作为代码范式 复制链接链接已复制到粘贴板!
红帽社区实践创建了一组通过集合提供的自动化内容,以将 Ansible Automation Platform 基础架构和配置作为代码进行管理。这允许通过配置即代码(CaC)实现平台本身的自动化。 虽然这种方法的许多好处很明确,但存在安全隐患。
以下 Ansible 内容集合可用于使用基础架构作为代码方法来管理 Ansible Automation Platform 组件,它们都位于 Ansible Automation Hub 上:
| 验证的集合 | 集合用途 |
|
| 用于自动化 Ansible Automation Platform 第 1 天和第 2 天操作的 Ansible 内容,包括安装、备份和恢复、证书管理等。 |
|
|
用于管理 Ansible Automation Platform 组件的创建角色集合,包括用户和组(RBAC)、项目、作业模板和工作流、凭证等。此集合包括来自旧的 |
|
| 用于创建和管理执行环境镜像或从旧的 Tower virtualenvs 迁移到执行环境的一组角色。 |
很多机构使用 CI/CD 平台来配置管道或其他方法来管理这类基础架构。但是,原生使用 Ansible Automation Platform 时,可以将 webhook 配置为原生链接基于 Git 的存储库。这样,Ansible 可以响应 Git 事件来直接触发作业模板。这消除了对整个流程的外部 CI 组件的需求,从而减少了攻击面。
这些实践支持对所有基础架构和配置的版本控制。应用 Git 最佳实践以确保代码质量检查,然后再同步到 Ansible Automation Platform。相关的 Git 最佳实践包括:
- 创建拉取请求。
- 确保检查工具已就位。
- 确保没有提交纯文本 secret。
- 确保遵循 pre-commit hook 和任何其他策略。
CAC 还鼓励使用外部 vault 系统,无需将任何敏感数据存储在存储库中,或者根据需要处理需要单独处理 vault 文件。在源代码存储库中存储 Ansible Automation Platform 配置时,这尤其重要,因为自动化控制器凭证和 Event-Driven Ansible 凭证必须以纯文本形式提供给集合变量,不应提交到源存储库。有关使用外部 vault 系统的更多信息,请参阅本指南中的 外部凭证密码库注意事项 部分。
2.3.2. 配置集中式日志记录 复制链接链接已复制到粘贴板!
集中日志记录有助于监控系统安全性并执行大规模日志分析。机密性、完整性和可用性 (CIA)三方源自美国军事和政府的想法组合,是正确安全系统开发和最佳实践的基础。集中式日志记录处于完整性方面,以帮助识别数据或系统是否被篡改。登录到集中式系统通过在单一位置收集所有日志来实现跨多个系统的故障排除自动化,因此更容易地识别问题、分析趋势以及将不同服务器的事件相关联,特别是在复杂的 Ansible Automation Platform 部署中。手动检查各个机器会非常耗时,因此除了满足安全最佳实践外,通过调试功能进行集中式日志记录。这样可确保系统整体健康和稳定性,并帮助识别潜在的安全隐患。除了日志配置外,还需要考虑因为存储容量而记录失败,同时应考虑硬件故障和高可用性架构。
还有一些额外的优点,包括:
- 数据以 JSON 格式通过 HTTP 连接发送,使用自定义处理程序中设计的最小服务特定调整或通过导入的库。对控制器最有用的数据类型是作业事实数据、作业事件/作业运行、活动流数据和日志消息。
- 通过从基础架构的不同部分分析日志来深入了解自动化过程,包括 playbook 执行详情、任务结果和系统事件。
- 通过分析执行时间和资源使用情况,识别性能瓶颈并优化 Ansible playbook。
- 集中式日志记录通过为审计提供单一数据源来帮助满足合规要求。
- 第三方与 Splunk、Logstash、Elasticure 或 Loggly 等集中式日志管理平台集成,以收集和分析日志。
日志记录聚合器服务用于以下监控和数据分析系统:
- Splunk
- Loggly
- Sumologic
- 弹性堆栈(以前称为 ELK 堆栈)
2.3.2.1. 设置日志记录 复制链接链接已复制到粘贴板!
要将日志记录设置为集中日志的任何聚合器类型,请按照以下步骤操作:
流程
- 在导航面板中,选择 → → 。
- 在 Logging 设置页面中,单击 。
您可以配置以下选项:
- 日志记录聚合器 :输入您要将日志发送到的主机名或 IP 地址。
logging Aggregator Port :如果聚合器需要端口,请为其指定端口。
注意当连接类型是 HTTPS 时,您可以输入主机名作为带有端口号的 URL,之后不需要再次输入端口。但是,TCP 和 UDP 连接由主机名和端口号组合决定,而不是 URL。因此,对于 TCP 或 UDP 连接,请在指定字段中提供端口。如果在 Logging Aggregator 字段中输入了 URL,则将其主机名部分提取为主机名。
- 日志记录聚合器类型 :点击以从列表中选择聚合器服务:
- 日志记录聚合器用户名 :如果需要,请输入日志记录聚合器的用户名。
- 日志记录聚合器密码/令牌 :如果需要,请输入日志聚合器的密码。
-
将数据发送到日志聚合器表单的日志记录器 : 所有四种类型的数据都会默认预先填充。点字段旁的工具提示
图标了解每种数据类型的附加信息。删除您不想的数据类型。
- 集群范围的唯一标识符 :使用它来唯一标识实例。
- 日志记录聚合器协议 :点击以选择一个与日志聚合器通信的连接类型(协议)。后续选项因所选的协议而异。
- TCP 连接超时 :指定连接超时(以秒为单位)。这个选项只适用于 HTTPS 和 TCP 日志聚合器协议。
- 日志记录聚合器级别 阈值 :选择希望日志处理器报告的严重性级别。
-
可在日志操作队列中存储的最大消息数:Definess 的
rsyslog操作队列以存储的消息数量增长。这可能会影响内存用量。当队列达到这个数字的 75% 时,队列开始写入磁盘(rsyslog中的queue.highWatermark)。当它达到 90%、NotICE、INFO和DEBUG消息时,将开始丢弃(带有queue.discardSeverity=5的queue.discardMark)。 -
rsyslogd 操作排队(以 GB 为单位)的最大磁盘持久性 :如果
rsyslog操作需要时间处理传入的消息(默认为 1),则要存储的数据量(以 GB 为单位)。等同于操作中的rsyslogd queue.maxdiskspace设置(如omhttp)。它将文件存储在LOG_AGGREGATOR_MAX_DISK_USAGE_PATH指定的目录中。 -
rsyslogd 磁盘持久性的文件系统位置 :在外部日志聚合器停机后,应重试日志的位置(默认为
/var/lib/awx)。等同于rsyslogd queue.spoolDirectory设置。 - Log Format for API 4XX Errors: 配置特定的错误消息。如需更多信息,请参阅 API 4XX 错误配置。
设置以下选项:
Log System Tracking Facts Individually: 点击工具提示
图标了解其他信息,如您要将其打开还是默认关闭。
- 检查您选择的日志记录聚合的条目。
- 启用外部日志记录 :如果要将日志发送到外部日志聚合器,请选择此复选框。
- 启用/禁用 HTTPS 证书验证 :默认为 HTTPS 日志协议启用证书验证。如果您希望日志处理程序在建立连接前验证外部日志聚合器发送的 HTTPS 证书,请选择此复选框。
启用 rsyslogd 调试 :选择此复选框,为
rsyslogd启用高详细程度调试。对于为外部日志聚合调试连接问题非常有用。- 点 或 来取消更改。
2.3.2.2. 配置 LDAP 日志 复制链接链接已复制到粘贴板!
以下步骤启用 LDAP 日志记录:
要为 LDAP 启用日志记录,请使用以下流程:
流程
编辑网关设置文件:
-
在 Ansible Automation Platform2.5 容器化上,该文件为
~/aap/gateway/etc/settings.py(作为运行平台网关容器的用户)。 在基于 Ansible Automation Platform2.5 RPM 上,该文件为
/etc/ansible-automation-platform/gateway/settings.py。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
在 Ansible Automation Platform2.5 容器化上,该文件为
重启平台网关服务或容器:
在 Ansible Automation Platform2.5 Containerized 上,重启平台网关服务,以便重启平台网关容器:
注意确保使用
'--user' 标志运行 systemctl,如下所示:+
$ systemctl --user restart automation-gateway在基于 Ansible Automation Platform2.5 RPM 中,使用
automation-gateway-service命令:[ automation-gateway-service restart
2.3.2.3. 实施安全控制 复制链接链接已复制到粘贴板!
以下一些满足合规要求的示例来自美国国防部 安全技术实施指南,但返回完整性和安全性最佳实践。
自动化控制器必须使用外部日志供应商,这些供应商可在独立的受保护的存储库中收集用户活动日志,以防止修改或回复。自动化控制器必须配置为使用外部日志记录来编译来自服务器中多个组件的日志记录。发生事件必须时间与时间相关,才能准确进行诊断分析。此外,关联性必须满足某些容错标准。
以下步骤实现安全控制:
流程
- 以管理员身份登录自动化控制器。
- 在导航面板中,选择 → → 。
- 在 Logging 设置页面中,单击 。
设置以下字段:
-
将 日志记录聚合器 设置为
未配置。这是默认值。 -
将 Enable External Logging 设置为
On。 - 将 日志记录聚合器级别阈值 设置为 DEBUG。
- 将 TCP 连接超时设置为 5 (默认值)或组织超时。
-
将 Enable/disable HTTPS 证书验证 设置为
On。
-
将 日志记录聚合器 设置为
- 点击 。
自动化控制器必须分配日志记录存储容量,并在日志失败时默认关闭(除非可用性是一个覆盖问题)。当系统面临处理日志的风险时,它会检测到并采取措施来缓解故障。日志处理失败包括软件/硬件错误、日志捕获机制中的故障,以及达到或超过日志存储容量。在故障期间,必须将应用服务器配置为关闭,除非应用服务器是高可用性系统的一部分。当可用性是覆盖时,响应日志失败的其他批准操作如下:
- 如果因为缺少日志记录存储容量导致失败,则应用程序必须继续生成日志记录(如果需要,自动重启日志服务),以先先出行的方式覆盖最旧的日志记录。
如果日志记录发送到集中式集合服务器,并且与这个服务器的通信丢失或者服务器失败,应用程序必须在恢复通信前在本地对日志记录进行队列记录,或直到手动检索日志记录为止。在恢复与集中式集合服务器的连接后,必须采取措施将本地日志数据与集合服务器同步。
以下步骤实现安全控制:
打开 Web 浏览器,进入日志记录 API
/api/v2/settings/logging/确保您作为自动化控制器管理员进行身份验证。
在 Content 部分中,修改以下值:
-
LOG_AGGREGATOR_ACTION_MAX_DISK_USAGE_GB= 日志缓冲的定义要求。 -
LOG_AGGREGATOR_MAX_DISK_USAGE_PATH=/var/lib/awx..Click .
-
2.3.2.4. 为每个主机实施安全控制 复制链接链接已复制到粘贴板!
自动化控制器的日志文件必须通过明确定义的特权访问。自动化控制器日志文件的保密性会导致攻击者识别他们可能无法获取的系统的关键信息,使它们能够枚举更多信息以启用升级或随后的移动。
要实现安全控制,请使用以下流程:
流程
作为每个自动化控制器主机的系统管理员,设置自动化控制器 NGINX 日志目录的权限和所有者:
-
chmod 770 /var/log/nginx -
chown nginx:root /var/log/nginx
-
设置自动化控制器日志目录的权限和所有者:
-
chmod 770 /var/log/tower -
chown awx:awx /var/log/tower
-
设置自动化控制器 supervisor 日志目录的权限和所有者:
-
chmod 770 /var/log/supervisor/ -
chown root:root /var/log/supervisor/
-
在日志子系统失败时,自动化控制器必须配置为切换到另一个系统。自动化控制器主机必须能够切换到另一个自动化控制器主机,这些自动化控制器主机可以在检测应用程序日志处理失败时处理应用程序和日志记录功能。这可实现应用程序的持续操作和日志记录功能,同时尽量减少用户丢失和日志数据的操作。
- 如果自动化控制器不在 HA 配置中,管理员必须重新安装自动化控制器。
2.3.3. 为系统管理员实施安全控制 复制链接链接已复制到粘贴板!
自动化控制器必须生成适当的日志记录。自动化控制器的 Web 服务器必须记录与用户会话相关的所有详细信息,以支持故障排除、调试和取取分析。如果没有数据日志记录功能,组织会丢失重要审计和分析工具,以进行事件调查。
使用以下步骤将安全控制作为每个自动化控制器主机的系统管理员实现:
流程
- 在导航面板中,选择 → → 。此时会显示 System Settings 页面。
- 点 。
设置以下内容:
- 启用活动流 = On
- 为清单同步启用活动流 = On
- 机构管理员可以管理用户和团队 = On
- 机构管理员可见所有用户 = On
- 点击 。
2.3.4. 外部凭证库注意事项 复制链接链接已复制到粘贴板!
Secret 管理是维护安全自动化平台的基本组件。我们推荐以下 secret 管理实践:
- 确保没有对系统的访问权限的未授权用户,并确保只有需要访问权限的用户才被授予它。自动化控制器会加密密码和 API 令牌等敏感信息,但也存储密钥来解密。授权用户可能可以访问所有内容。
- 使用外部系统管理 secret。如果需要更新凭证,外部系统就可以检索更新的凭证,其复杂性比内部系统复杂。用于管理 secret 的外部系统包括 CyberArk、HashiCorp Vault、Microsoft Azure Key Management 等。如需更多信息,请参阅使用自动化执行的 Secret 管理系统 部分。
2.4. 第二天操作 复制链接链接已复制到粘贴板!
第 2 天运维包括集群健康和扩展检查,包括主机、项目和环境级别 Sustainment。您必须持续分析配置和安全偏移。
2.4.1. RBAC 注意事项 复制链接链接已复制到粘贴板!
作为管理员,您可以使用平台网关中内置的 基于角色的访问控制 (RBAC)来委派对服务器清单、机构等的访问权限。管理员也可以集中管理各种凭据,使最终用户能够在不向最终用户公开该机密的情况下使用所需的 secret。RBAC 控制允许 Ansible Automation Platform 帮助您提高安全性并简化管理。
RBAC 是向用户或团队授予角色的方法。RBAC 最容易考虑角色,它们精确定义了谁或什么可以看到、更改或删除要为其设置特定功能的"对象"。
您应该熟悉 Ansible Automation Platform 的 RBAC 设计的一些主要概念,包括角色、资源和用户。用户可以是一个角色的成员,授予他们对与该角色关联的任何资源或与"子代"角色关联的任何资源的访问权限。
角色基本上是一个能力的集合。用户通过为其分配的角色或通过从角色层次结构继承的角色获得对这些权限和自动化控制器资源的访问权限。
角色将一组能力与一组用户相关联。所有功能都源自角色内的成员资格。用户仅通过为其分配的角色或通过角色层次结构继承的角色获得权限。角色的所有成员都有授予该角色的所有权限。在一个机构中,角色相对稳定,而用户和能力则有很多,可能会快速变化。用户可以有多个角色。
有关角色层次结构、访问继承、角色构建、权限、用户角色、角色创建等详细信息,请参阅 使用基于角色的访问控制管理访问权限。
以下是具有角色和资源权限的机构示例:
图 2.2. 自动化控制器中的 RBAC 角色范围
用户访问权限基于管理系统对象(用户、组、命名空间)的权限,而不是单独为特定用户分配权限。您可以为您创建的组分配权限。然后,您可以为这些组分配用户。这意味着,组中的每个用户都有分配给该组的权限。
在 Automation Hub 中创建的团队可以包括系统管理员,包括负责管理内部集合、配置用户访问和存储库管理到组,具有组织并上传内部开发的内容到自动化中心。
可以对只有查看的访问启用,以进一步锁定私有自动化中心。通过启用只查看访问权限,您可以授予用户查看私有自动化 hub 上的集合或命名空间的访问权限,而无需进行登录。View-only 访问权限允许您与未授权用户共享内容,同时限制他们只能查看或下载源代码的权限,而无需编辑私有自动化中心上的任何内容。编辑 Red Hat Ansible Automation Platform 安装程序中的清单文件,为您的私有自动化中心启用只查看访问。
2.4.2. 更新和升级 复制链接链接已复制到粘贴板!
所有升级的系统版本不能比当前要升级到的版本低两个主要版本。例如,要升级到自动化控制器 4.3,您必须首先使用版本 4.1.x,因为没有从 3.8.x 或更早版本直接升级路径。如需更多信息,请参阅 升级到 Ansible Automation Platform。要运行自动化控制器 4.3,还必须有 Ansible 2.12 或更高版本。
2.4.2.1. 灾难恢复和连续性操作 复制链接链接已复制到粘贴板!
对 Ansible Automation Platform 进行常规备份是灾难恢复计划的关键部分。备份和恢复都是使用安装程序执行的,因此这些操作应该从本文档前面描述的专用安装主机执行。有关如何执行这些操作的详情,请参阅自动化控制器文档中的 备份和恢复 部分。
备份的一个重要方面是,它们包含数据库的副本以及用于解密数据库中存储的凭证的 secret 密钥,因此备份文件应存储在安全加密位置。这意味着,对端点凭证的访问会被正确保护。对备份的访问应限制为具有对自动化控制器和专用安装主机的 root shell 访问权限的 Ansible Automation Platform 管理员。
Ansible Automation Platform 管理员需要备份其 Ansible Automation Platform 环境的主要原因如下:
- 要从 Ansible Automation Platform 环境中保存数据副本,您可以在需要时恢复它。
- 如果您要创建新的 Ansible Automation Platform 集群或准备升级,使用备份将环境恢复到不同的服务器集合。
在所有情况下,推荐和安全的过程总是使用相同的 PostgreSQL 和 Ansible Automation Platform 版本来备份和恢复环境。
强烈建议在系统中使用一些冗余功能。如果 secret 系统停机,自动化控制器无法获取信息,并可能会因为恢复服务后可以恢复的方式失败。如果您认为为您生成的 SECRET_KEY 自动化控制器已被被破坏,且必须重新生成,您可以从安装程序运行一个工具,它的行为与自动化控制器备份和恢复工具非常相似。
要生成新的 secret 密钥,请执行以下步骤:
- 在执行任何其他操作前备份 Ansible Automation Platform 数据库!按照 备份和恢复 Controller 部分中描述的步骤操作。
-
使用您安装中的清单(与您运行备份/恢复的清单相同),运行
setup.sh -k。
以上密钥的备份副本保存在 /etc/tower/ 中。
2.4.3. 使用 HashiCorp vault 进行外部 secret 管理 复制链接链接已复制到粘贴板!
您可以将 HashiCorp Vault 与 Ansible Automation Platform 集成,以管理和检索敏感数据。
在企业环境中,拥有外部管理的 secret 是在多个服务间管理敏感数据的便捷方式。HashiCorp vault 的最常见和推荐的身份验证方法之一就是,在签发令牌前,使用带有策略和登录要求的 AppRoles。要将 Ansible Automation Platform 配置为使用 HashiCorp vault 中存储的 secret,请使用 HashiCorp Vault Secret Lookup 类型设置新凭证。有关如何执行此操作的详情,请参考 Hashicorp vault secret 查找。
输入相关信息,如可识别的凭证名称、机构以及 vault 服务器的 URL,例如 https://vault.domain.com:8200。
使用 Token、AppRole role_id 和 AppRole secret_id 等信息填充必要的字段,然后为 API 版本选择 v2。
要测试凭证以测试功能和操作,请使用以下流程:
流程
- 在单击创建凭据 之前, 请单击 。
在弹出窗口中,输入 Secret 的路径 和 Key Name。
注意如果存储一个键值对,则 Secret 的路径将以
kv前缀,例如kv/key_name。- 点 。
- 测试成功后,单击 。
- 完成后,Ansible Automation Platform 会被正确配置为使用 HashiCorp Vault 作为外部 secret 源。
要在 Ansible Automation Platform 中使用 HashiCorp vault 凭证,请使用类型 Machine Credential 创建新凭据。输入相关信息,如可识别的凭证名称和机构。
要配置 HashiCorp Vault 凭证的使用,请使用以下流程:
流程
-
要配置 用户名,点
图标。
- 选择在第 1 步中创建的 HashiCorp Vault 凭证。
- 填充 Secret 的路径 和 密钥名称。
- (可选)单击 。否则,请单击 。
2.4.3.3. 配置机器凭证的 SSH 私钥 复制链接链接已复制到粘贴板!
使用以下步骤:
流程
-
要配置 用户名,点
图标。
- 选择您创建的 HashiCorp Vault 凭证。
- 填充 Secret 的路径 和 密钥名称。
- 选择私钥的名称,作为 密钥名称。
- (可选)单击 。否则,请单击 。
第 3 章 受管节点配置 复制链接链接已复制到粘贴板!
Ansible Automation Platform 是一个无代理技术,它依赖于与它管理的设备(称为受管节点)进行远程连接来运行自动化任务。
本章提供了改进 Ansible Automation Platform 自动化受管节点的安全性问题,包括 Ansible Automation Platform 和受管节点之间的远程连接。
请注意,受管节点配置可能会根据操作系统、合规性配置集、配置和机构策略等因素而有所不同。
在实施前,此处提供的受管节点配置的任何建议都必须进行全面的测试和检查,以确保它们满足机构策略和要求。
3.1. Red Hat Enterprise Linux 受管节点配置 复制链接链接已复制到粘贴板!
下面的部分提供了 Red Hat Enterprise Linux (RHEL)受管节点的指导,但概念可能也适用于其他 Linux 发行版。
提供了用于手动配置 RHEL 受管节点的示例。这些步骤也可以使用 Ansible Automation Platform 自动执行,或者可以添加到使用 Red Hat Insights 镜像构建程序等工具创建的 标准操作环境 (SOE)或"冷镜像"中。
3.1.1. 创建具有访问限制的专用服务帐户 复制链接链接已复制到粘贴板!
Ansible Automation Platform 可以配置为使用各种用户或帐户连接到受管节点。
本指南建议为这一目的创建一个单一的专用服务帐户。此服务帐户必须是每个受管节点上的本地帐户,以确保自动化作业继续运行,即使外部身份验证机制遇到中断。这个建议适用,除非机构策略强制集中管理的服务帐户。服务帐户必须清楚地命名,以指示其用途,例如 ansible 或 aapsvc。
本节的其余部分使用 "ansible" 作为示例中本地服务帐户的假定名称。
本地服务帐户以以下方式配置:
- 它被授予足够权限来运行任何所需的自动化作业。
- 仅限于 SSH 密钥身份验证。不允许使用密码身份验证。
只有从 Ansible Automation Platform {ControllerNames}s 和执行节点的连接授予访问权限。
注意要以服务帐户以外的用户身份在 Ansible playbook 或作业模板中执行任务,请使用
become和become_user关键字。不需要以其他用户身份连接到受管节点。-
useradd命令可用于创建本地服务帐户。例如:
sudo useradd ansible \
--system --create-home \
--comment "Ansible Automation Platform service account"
sudo useradd ansible \
--system --create-home \
--comment "Ansible Automation Platform service account"
3.1.1.1. 为服务帐户配置 sudo 权限 复制链接链接已复制到粘贴板!
服务帐户需要足够的权限才能在受管节点上运行任何当前或将来的自动化作业。本节介绍 sudo 的使用,但其他特权升级方法可用。
由于 Ansible Automation Platform 默认为在基于 Linux 的受管节点上使用 ansible.builtin.sudo become 插件,因此该服务帐户必须使用 sudo 命令在 RHEL 受管节点上运行任何命令。
要配置此功能,请使用以下流程:
流程
创建文件
/etc/sudoers.d/ansible,并包含以下内容:# Rules for the ansible service account ansible ALL=(ALL) NOPASSWD: ALL
# Rules for the ansible service account ansible ALL=(ALL) NOPASSWD: ALLCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对文件设置限制权限:
sudo chmod 600 /etc/sudoers.d/ansible'验证该文件是否使用正确的语法:
sudo visudo -cf /etc/sudoers.d/ansible
3.1.1.2. 为服务帐户需要 SSH 密钥身份验证 复制链接链接已复制到粘贴板!
该服务帐户不得被允许使用带有与受管节点的 SSH 连接的密码身份验证。
使用以下步骤配置 SSH 守护进程:
流程
创建文件
/etc/sshd/sshd_config.d/60-ansible.conf,并包含以下内容:sshd config applied to the ansible service account Match User ansible PasswordAuthentication no Match all
# sshd config applied to the ansible service account Match User ansible PasswordAuthentication no Match allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证该文件是否使用正确的语法:
sudo sshd -t重启 SSH 守护进程
sudo systemctl restart sshd.service
假设禁止密码身份验证,则必须将至少一个 SSH 公钥附加到服务帐户的 authorized_keys 文件(通常位于 /home/ansible/.ssh/authorized_keys)。
这些公钥必须与用于在 Ansible Automation Platform 中建立机器凭证的私钥对应,因为这些凭证有助于连接到 RHEL 受管节点。
本指南为单个服务帐户提供与受管 RHEL 节点的连接,但这并不意味着在所有节点上使用单个 SSH 密钥。在大型组织中,管理 RHEL 服务器的单个团队可以在 Ansible Automation Platform 中生成自己的机器凭证。然后,团队可以在其特定 RHEL 服务器上的授权密钥文件中添加对应的密钥。这种方法确保通过使用通用服务帐户在机构范围内一致访问受管节点,同时让每个团队独立管理其分配节点的凭据。
3.1.1.3. 为服务帐户启用和配置 pam_access 控制 复制链接链接已复制到粘贴板!
要限制来自 Ansible Automation Platform 自动化控制器和执行节点的远程登录访问,并确保服务帐户完全被 Ansible Automation Platform 使用,请使用以下步骤:
流程
使用自动化控制器和执行节点的 FQDN,使用控制器节点和执行节点的 FQDN 将以下内容添加到
/etc/security/access.conf文件中:allow the ansible service account to log in from local sources and the hybrid controller or execution nodes, and deny all other sources +:ansible:LOCAL controller1.example.com controller2.example.com en1.example.com -:ansible:ALL
# allow the ansible service account to log in from local sources and # the hybrid controller or execution nodes, and deny all other sources +:ansible:LOCAL controller1.example.com controller2.example.com en1.example.com -:ansible:ALLCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在当前 authselect 配置集中启用
with-pamaccess功能。RHEL 默认包括的所有 authselect 配置集都有此功能。sudo authselect enable-feature with-pamaccess
3.1.2. 合规配置集注意事项 复制链接链接已复制到粘贴板!
在许多环境中,您可以使用 Ansible Automation Platform 管理将安全控制应用到受管 RHEL 节点的系统,以满足合规性配置文件的要求,如 CIS、PCI/DSS、DISA STIG 或类似。以下小节详细介绍了必须修改 Ansible Automation Platform 的特定安全控制集合,以便在这样的环境中正确管理 RHEL 节点。
3.1.2.1. 受管 RHEL 节点上的 fapolicyd 复制链接链接已复制到粘贴板!
当针对 RHEL 受管节点运行 Ansible Automation Platform 作业时,大多数任务都通过将 Python 代码复制到受管节点来执行,然后在本地执行。如果在受管节点上启用了 fapolicyd 服务,则作业将失败,因为 RHEL 附带的默认规则集可防止这个 Python 代码运行。
要防止这个问题发生,请使用以下方法之一:
- 选项 1:将 fapolicyd 服务设置为 permissive 模式
- 选项 2:创建自定义 fapolicyd 规则
3.1.2.2. 选项 1:将 fapolicyd 服务设置为 permissive 模式 复制链接链接已复制到粘贴板!
fapolicyd 服务可以被设置为 "permissive" 模式,这意味着它只记录 fapolicyd 规则违反情况,而不是强制执行它们。
要为 fapolicyd 配置 permissive 模式,请使用以下流程:
流程
-
编辑文件
/etc/fapolicyd/fapolicyd.conf,并设置 "permissive = 1"。 -
运行
systemctl restart fapolicyd.service重启fapolicy服务。
在此配置不符合所需的合规性配置集或本地策略的环境中,讨论与您的安全审核员相关的安全控制。
3.1.2.3. 选项 2:创建自定义 fapolicyd 规则 复制链接链接已复制到粘贴板!
如果 fapolicyd 服务必须强制执行其规则,请考虑设计一组自定义规则来允许 Ansible Automation Platform 执行其 Python 代码。
以下示例流程将 "ansible" 服务帐户视为可信实体,并使它在本地 Ansible 临时目录中执行内容(默认为 $HOME/.ansible/tmp)。
流程
使用以下内容创建文件
/etc/fapolicy/rules.d/50-ansible.rules:allow perm=any uid=ansible trust=1 : dir=/home/ansible/.ansible/tmp/重启 fapolicyd 服务:
sudo systemctl restart fapolicyd.service
这个示例规则可能需要修改来与受管 RHEL 节点上存在的任何其他 fapolicyd 规则一起使用,在投入生产前,安全审核员必须经过全面测试和批准。