标准 Ansible Tower 设置的安全性适用于自动部署典型的环境。但是,在管理特定操作系统环境、自动化和自动化平台时,可能需要一些额外的最佳实践才能确保其安全性。本文档介绍了在自动化环境中确保安全性的最佳实践。
应用程序的安全性会受底层系统安全性的影响。为了确保 Red Hat Enterprise Linux 的安全性,请参阅:
Red Hat Enterprise Linux 7: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/
Red Hat Enterprise Linux 8: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/security_hardening/index
Ansible 和 Ansible Tower 的一个通用目的是提供一个自动化平台。这意味着,一旦启动了一个 Ansible playbook(通过 Tower,或直接通过命令行),playbook、清单和 Ansible 的凭证将被视为可靠的来源。如果特定的安全政策需要针对特定 playbook 内容、作业定义或清单内容进行外部验证,这些过程必须在自动化操作启动(无论是通过 Tower Web UI 或 Tower API) 之前进行。
使用源控制、分支和强制代码审核是 Ansible 自动化的最佳方法。有很多工具可帮助以这种方式创建使用源控制的进程流。
在更高的级别上,有很多工具允许针对任意工作流创建批准和基于策略的操作,包括自动化。这些工具可通过 Tower 的 API 来使用 Ansible 执行自动化。
授予系统某些部分的访问权限可能会带来安全隐患。请应用以下方法帮助保证访问安全:
限制对系统管理帐户的访问最小化对维护一个安全系统至关重要。系统管理员/root 用户可以访问、编辑和破坏任何系统应用程序。因此,尽量使具有 root 访问权限的用户和组量少。不要为不信任的用户分配 sudo root 或 awx 的权限。当通过某些机制(如 sudo)为用户提供了受限的管理访问权限时,这些访问权限仍有可能进行大量操作。允许执行 shell 的命令,或可以修改文件的任何命令,都应该视为等同于具有完整的 root 访问权限。
在 Tower 中,任何 Tower ‘系统管理员’ 或 'superuser' 帐户都可以编辑、修改和更新 Tower 中的任何清单或自动化定义。这只应该分配给尽量少的、需要进行底层 Tower 配置和灾难恢复的用户。
根据最佳实践方案原则,除了用于管理目的之外,Ansible Tower 不需要进行本地用户访问。非管理员用户不应该具有可以访问 Tower 所在系统的权限。
如果自动化凭证仅存储在 Tower 中,则可进一步加以保护。OpenSSH 等服务可以配置为只允许来自特定地址的连接使用凭证.。自动化使用的凭证可能与系统管理员用于灾难恢复或其他 ad-hoc 管理的凭证不同,以允许更轻松地进行审核。
不同的自动化任务可能需要对一个系统有不同的访问级别。例如,您可能需要进行底层的系统自动化来应用补丁或执行安全检查;也可能需要进行高层的自动化来部署应用程序。通过对不同的自动化操作使用不同的密钥或凭证,可以最小化一个关键安全漏洞对系统的不良影响,同时可简化基准审核。
Tower 和其它地方提供了一些资源来保证系统的安全性。请考虑使用以下功能:
对于任何管理访问,审核和监视都非常关键。对于整个系统来说,可以使用内置的审计功能支持 (https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/chap-system_auditing.html)) 以及内置的日志功能支持。
Ansible Tower 使用内置的 Activity Stream 支持,它可以记录 Tower 内部的所有更改,以及自动化日志。
最佳实践推荐集中进行日志收集和审核,而不是在本地系统中进行。建议将 Ansible Tower 配置为在您的环境中使用任何 IDS 和/或日志/审核 (Splunk) 标准。Ansible Tower 包括了内置的、针对 Elastic Stack, Splunk, Sumologic, Loggly 和其他系统的日志集成功能。详情请参阅 Tower 日志记录和聚合。
不要禁用 SELinux,也不要禁用 Tower 现存的多用户限制机制。使用 Tower 的角色访问控制 (RBAC) 来代表运行自动化所需的最低级别权限。使用 Tower 的团队(Team)来为用户组分配权限,而不是单独为用户分配权限。详情请参阅 Ansible Tower User Guide 中的 基于角色的访问控制 。
对于一个大型机构,在 Tower 中维护完整的用户会非常耗时,且容易出错。Ansible Tower 支持通过 LDAP 、SAML 2.0 和特定的:ref:OAuth providers <ag_authentication> 连接到外部账户源。