安装JFrog Xray的最佳实践

请注意这篇博文指的是JFrog x射线v1.x。有关Xray当前版本的信息,请参阅这篇知识库文章。
JFrog于2016年7月首次发布了Xray,并获得了惊人的反响。客户对连接他们的工件存储库的能力感到非常兴奋,并让Xray自动对他们的工件进行深度递归扫描,以清除问题和漏洞。现在,几个月后,随着不同的经验和反馈从许多客户安装它,我们想分享一些最佳实践,将帮助您开始使用Xray。这篇文章假设你对x射线有一些熟悉,所以如果你是扫描工件仓库中的工件的新手,你可能想从我们的第一篇博文了解x射线,以便熟悉它。
微服务:伟大的东西来自于小包
Xray是一个由9个微服务组成的系统。有Installer微服务,当调用时,会启动5个Xray内部微服务和3个第三方微服务(RabbitMQ、MongoDB和Postgres)。
中心微服务是x射线服务器。它侦听端口8000上来自Artifactory和外部服务的所有传入请求,并从云端提取漏洞和组件数据jxray.jfrog.io和dl.bintray.com。

需要连接到这些url在线数据同步。x射线也可以配置通过代理服务器与这些url对话。但是,如果您公司的安全策略要求生产系统与外部网络完全隔离,则应该使用离线同步。
这里有三种方法可以使安装过程更顺利:
提高CPU密集型进程与更多的计算能力
Xray对工件进行深度递归扫描,将它们与所有依赖项一起编入索引。这确保了所有二进制文件都被挑选出来进行分析,即使它们深嵌在一个复杂的组件结构中。在此过程中,将创建一个组件图,其中包含所有索引二进制文件之间的相关性。该操作是计算密集型的,并且根据工件的大小和复杂性,计算需求会有所不同。例如,一个Docker镜像可能只有几个jar”和“js"文件内"战争文件,所有这些都驻留在tar.gz”文件。JFrog Xray识别每个二进制文件,而不考虑技术和二进制文件嵌入的层数。

因此,为了满足Xray深度递归扫描的计算需求,我们建议运行Xray的机器采用以下硬件配置:
| 最低 | 推荐 | |
| CPU | 8芯 | 16芯 |
| 内存 | 16 GB | 32 GB |
| 磁盘 | 100 GB | - - - - - - |
请注意:的高的最小磁盘空间需求是因为Xray递归地从它的父组件中提取每个工件,以确保它识别所有的二进制文件直到最深的层次。
增加文件最大限制,以适应深度递归扫描所需的文件描述符
在Xray的深度递归扫描期间,Xray和第三方微服务创建了许多打开文件,很快就达到了打开文件描述符的限制。为了避免这个过程中的缓慢,你应该增加Xray, RabbitMQ, PostgreSQL和MongoDB微服务的打开文件描述符限制/etc/security/limits.conf文件如下:
…x射线硬nofile 100000 x射线软nofile 100000 rabbitmq硬nofile 100000 rabbitmq软nofile 100000 postgres硬nofile 100000 postgres软nofile 100000 mongodb硬nofile 100000 mongodb软nofile 100000…
如果您的系统可以处理它,那么我们建议将打开的文件描述符限制设置为100,000,如上面的示例所示。要确定系统对打开的文件描述符的最大数量的容量,您可以使用:
猫/proc/sys/fs/file-max
确保x射线基础URL设置正确
为了让Xray索引和扫描工件,它必须与Artifactory有成功的双向通信,这需要正确设置Xray基础URL。例如,https://my-group.xray.io:8000/
安装x光是一件轻而易举的事。无论您是使用Docker安装还是Linux安装,这都是两个或三个简单命令的问题。我们在这篇文章中描述的三个最佳实践将确保您的安装不仅简单,而且流畅和高性能。
下面是两个有用的屏幕演示,重点介绍了JFrog Xray的最佳实践:如何设置打开文件描述符限制,以及如何使用Xray健康诊断。