安装JFrog x射线的最佳实践

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

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

因此,为了满足Xray深度递归扫描的计算需求,我们建议运行Xray的机器采用以下硬件配置:
| 最低 | 推荐 | |
| CPU | 8芯 | 16芯 |
| 内存 | 16 GB | 32 GB |
| 磁盘 | 100 GB | - - - - - - |
请注意:的高的最低磁盘空间要求是因为Xray递归地从其父组件提取每个工件,以确保它能识别所有二进制文件,直到最深层。
增加文件最大限制以适应深度递归扫描所需的文件描述符
在Xray的深度递归扫描期间,Xray和第三方微服务创建了许多打开的文件,很快就达到了打开文件描述符的极限。为了避免这个过程的迟缓,你应该增加Xray、RabbitMQ、PostgreSQL和MongoDB微服务的打开文件描述符限制/etc/security/limits.conf文件如下:
...Xray hard nofile 100000 Xray soft nofile 100000 rabbitmq hard nofile 100000 rabbitmq soft nofile 100000 postgres hard nofile 100000 postgres soft nofile 100000 mongodb hard nofile 100000 mongodb soft 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运行状况诊断。
