通用存储库
您可以将存储库定义为通用的在这种情况下,它没有特定的类型,你可以上传任何类型的包。泛型存储库不维护单独的包索引。为了使用与特定包类型(例如yum, gem)相关联的客户端,您应该创建一个匹配的存储库。泛型存储库不维护单独的包索引,因为它们不特定于任何包类型。当你想代理不支持的包类型、存储安装程序、导航文件、音频文件等时,它们很有用。
上传包类型错误
虽然系统不会阻止您将错误类型的包上传到存储库,但我们强烈建议您保持存储库类型和上传的包之间的一致性。如果您将错误类型的包上传到存储库,Artifactory将不会索引包或更新存储库的元数据。
局部存储库
本地存储库是物理的、本地管理的存储库,您可以在其中部署构件。
本地存储库中的工件可以直接使用以下URL访问:
http:// <主机>:<端口> / artifactory / < local-repository-name > / < artifact-path >
有关配置本地存储库的详细信息,请参考到局部存储库页面.
远程存储库
一个远程存储库作为在远程URL(它本身可能是另一个Artifactory远程存储库)管理的存储库的缓存代理。工件根据控制缓存和代理行为的各种配置参数在远程存储库中存储和更新。
您可以从远程存储库缓存中删除工件,但不能实际将新工件部署到远程存储库中。
远程存储库中的工件可以直接使用以下URL访问:
http:// <主机>:<端口> / artifactory / < remote-repository-name > / < artifact-path >
如果一个远程工件还没有被存储,这个URL将把它获取到缓存中。
在某些情况下,直接访问已经存储在缓存中的工件是有用的(例如,避免远程更新检查)。
要直接访问已经存储在缓存中的工件,您可以使用以下URL:
http:// <主机>:<端口> / artifactory / < remote-repository-name >缓存/ < artifact-path >
代理vs镜像
远程存储库充当代理不是镜子。工件不会预取到远程存储库缓存。它们只被获取和存储对需求当客户要求时。
因此,远程存储库在创建后不应该立即在其缓存中包含任何工件。只有当客户端开始使用远程存储库并发出请求时,工件才会被提取到缓存中。
有关配置远程存储库的详细信息,请参阅远程存储库页面。
虚拟存储库
虚拟存储库(或“存储库组”)将具有相同包类型的多个存储库聚合在一个公共URL下。
通用虚拟存储库
根据其性质,包类型被指定为的虚拟存储库通用的可以聚合任何类型的存储库,但是通用虚拟存储库不维护任何元数据。
默认虚拟存储库(已弃用)
Artifactory提供了一个使用全局虚拟的选项,其中包含所有本地和远程存储库。
默认情况下,此选项是禁用的,以启用默认虚拟存储库编辑artifactory.system.properties
位于JFROG_HOME美元/ artifactory / var / etc / artifactory
并将以下标志设置为假
:
##禁用全局'repo' artifact .repo.global.disabled=false
此更改需要重新启动Artifactory服务。
一旦启用,存储库可在:
http:// <主机名>:<口> / artifactory /回购
虚拟分辨率命令
当从虚拟存储库请求工件时,存储库搜索或解析的顺序为l首先是Ocal存储库,然后是rEmote存储库缓存,最后rEmote存储库本身。
中所述的配置中,存储库的查询顺序由它们在配置中列出的顺序决定一般决议令在下面。
对于虚拟存储库,可以在中查看有效搜索和解析顺序包括存储库列表视图中的基本设置选项卡。这在嵌套虚拟存储库时特别有用。有关配置虚拟存储库的详细信息,请参阅虚拟存储库页面。
联合存储库
从JFrog Artifactory 7.18.3, JFrog平台允许您创建联邦存储库,允许将工件及其元数据与位于多站点环境中的远程JFrog部署(JPDs)上的其他联邦类型的存储库镜像。联邦存储库的功能类似于JPD上的本地存储库,但是在逻辑上与位于其他JPD上的其他联邦成员组合在一起,以创建一个联邦。有关更多信息,请参见联合存储库.
一般决议令
类的相应部分中对每种类型(本地、远程和虚拟)的存储库进行相应排序,从而设置搜索和解析它们的顺序配置存储库页面。要设置顺序,您需要将存储库添加到所选存储库列表中,以搜索它们以解析工件的顺序。
存储库搜索的顺序还受到其他因素的影响,例如安全特权、包含/排除模式以及处理快照和发布的策略。
常见的设置
其中一些设置对于本地、远程和虚拟存储库是通用的。这些在基本对应的TAB新增/编辑屏幕.根据为存储库指定的包类型,可以在特定于类型的部分中找到其他设置。
包类型 |
的包装类型。这必须在创建存储库时指定,一旦设置,就不能更改。 |
库的关键 |
存储库密钥。存储库的强制标识符,必须是唯一的。不能以数字开头,也不能包含空格或特殊字符。对于本地存储库,我们建议使用“-local”后缀(例如:“libs-release-local”)。 |
仓库布局 |
设置存储库用于存储和标识模块的布局。建议使用与所定义的包类型对应的推荐布局,并将上传的包编入索引,并相应地计算元数据。 |
公共描述 |
描述存储库内容和用途的自由文本字段。 如果您选择在此字段中插入一个链接,单击该链接将提示用户确认他们可能被重定向到一个新域。 |
内部描述 |
一个自由文本字段,用于添加关于存储库的其他注释。这些仅对管理员可见。 |
包括和排除模式 |
的包括模式和排除模式当试图解析不同工件的位置时,字段提供了一种过滤特定存储库的方法。 在每个字段中,您可以指定一个类似ant的模式列表来过滤和过滤工件查询。过滤的工作原理是从包含的模式(默认为全部)中减去排除的模式(默认为none)。 例子: 考虑一个存储库的包含模式和排除模式如下: 包含模式:org/apache/**,com/acme/**排除模式:com/acme/exp-project/** 在这种情况下,将搜索存储库 |
启用x射线索引 |
启用存储库上的索引,以进行安全性和遵从性分析。可以使用JFrog x光. |
使用排除模式避免安全风险
本节解释如何使用排除模式来避免以下安全风险。
使用排除模式防止内部构件的暴露
您部署的任何专有构件都存储在本地存储库中,以便它们可用于安全的和授权的内部使用。任何通过名称搜索内部工件的人都将通过Artifactory从本地存储库中提取它。
但是,考虑一下,如果对内部工件的请求被不经意地指向,会发生什么外组织的。
关于这种情况的两个例子是:
- 在请求的工件名称中有一个简单的拼写错误
- 开发人员请求一个版本号不存在的快照。
在这种情况下,由于系统没有在本地存储库中找到所请求的工件,它将继续搜索系统中定义的远程存储库。通过搜索所有在返回“Not found”之前,在系统中定义的远程存储库。
这带来了安全风险,因为对远程存储库发出的任何请求都可能被记录下来公开查询的所有细节,包括可能包含敏感业务信息的完整工件名称.
为远程存储库使用排除模式以避免名称空间阴影攻击等安全风险的最佳实践
为避免暴露上述敏感业务信息,我们强烈建议采用以下最佳实践:
- 组织中使用的远程存储库列表应该在一个虚拟存储库下管理,所有请求都指向该虚拟存储库
- 中的所有内部构件都应指定排除模式字段的虚拟存储库(或者每一个远程存储库)使用通配符封装尽可能广泛的内部构件规范。
使用排除模式防止暴露内部包
代理不受信任的公共远程存储库或受到损害的存储库可能会使您暴露于恶意构件。有时,这些存储库允许任何人部署自定义包。例如,对于npm,公共存储库为npmjs
,任何人都可以部署他/她拥有的任何包的任何版本。如果一个包没有所有者(以前没有人部署过它的某个版本),任何人都可以部署它并认领它。
例如,让我们假设您有一个名为“almo-common-utils”
它的源代码是公共可访问的,例如,如果它被绑定为公共可访问的产品或web应用程序的一部分,它是在Node和JFrog Artifactory中编写的,它有一组远程(代理公共存储库),本地(用于内部共享模块)hth华体会最新官方网站和虚拟存储库。
考虑以下几点:
- 在公共存储库中,任何人都可以发布一个非作用域库,并将其命名为任何他们想要的名称。
almo-common-utils”
(除非名称冲突)。 - 没有名为"
almo-common-utils
"在公共存储库中(因为它是一个内部公司库),因此不存在名称冲突。 - 您有项目声明依赖在“
almo-common-utils
“使用版本范围。例如,指定与主要版本兼容的最新版本的范围。
这就带来了安全风险,因为攻击者可以通过预先了解库来攻击未受保护的组织。”almo-common-utils \”
,正在使用的库的主要版本(假设他们知道版本3在组织中广泛使用),以及源代码的内容。
攻击者可以克隆和修改源代码,在其中嵌入任何恶意软件,但仍然保持与原始代码的兼容性,并将其上传到存储库作为“almo-common-utils
: 3.99.99”
.这将创建一个内部库的版本更新劫持,当“almo-common-utils: ^ 3.0.0
“是要求的,是假的”almo-common-utils
从存储库中获取。
为了避免暴露内部包和内部包版本劫持,我们强烈建议采用以下方法:
- 在远程存储库上使用排除模式。在远程存储库中排除您不想在组织之外搜索的包。您可以通过前缀(来排除。
.npm / almo * / * *
),按范围(.npm / @almo / *
)或按姓名(.npm / almo-encoder / * *
).通过在任何公共远程存储库上设置这些排除模式,您实际上不会从公共存储库合并这些包。 - 只创建和发布有作用域的包。在公共存储库中为您的公司注册一个官方组织,以拥有您的组织的范围,并且始终只发布有范围的包。这也简化了排除模式,因为您只需要排除作用域包在远程存储库中排除正在搜索的所有包。
下面是一个阻塞包的示例范围"almo”从远程存储库。
使用Include模式避免性能问题
通过确保只有特定类型的构件可以驻留在本地存储库中,包含模式可以帮助您避免本地存储库中的混乱。在典型场景中,系统将引用大型通用存储库,例如JCenter或者Maven Central来解析工件。
此外,Artifactory可以引用任意数量的附加存储库,这些存储库可以承载更专门化和特定的工件集。
如果Artifactory接收到对一组确定的工件(例如,工件的特定版本)的请求,那么它将根据其解析顺序在不同的存储库中搜索,直到找到该工件。
然而,如果Artifactory接收到对一组不确定工件的请求(例如,的所有版本maven-metadata.xml
)然后它必须搜索所有直到它能够提供完整的响应为止。
在大多数情况下,组织下载的大部分工件将来自一个大型的通用存储库,但是是在不确定的请求中性能下降,因为Artifactory继续搜索所有专门的存储库才能返回响应.
为远程存储库使用包含模式以避免不必要和浪费的搜索的最佳实践
为了避免在响应不确定请求时执行不必要和浪费的搜索,我们强烈建议所有专门的存储库都配置适当的包括模式只指定组织可能需要的工件集。
在这种情况下,通常在通用存储库中找到的工件的非确定性请求将跳过专用存储库,从而提高性能。
设置安全远程存储库和本地存储库的优先级
适用于所有存储库类型,不包括CocoaPods, Git LFS, NuGet V2, Opkg, RPM, Rust, Vagrant和VCS存储库)。
通过启用本地和远程存储库的“优先级解析”字段,可以将本地和远程存储库声明为“安全”。在解析虚拟存储库时,“设置优先级解析”优先于解析顺序。将存储库设置为优先级将导致元数据只从使用该字段设置的存储库合并。如果在这些存储库中没有找到包,Artifactory将合并来自存储库的未设置优先级分辨率字段的元数据。
本地和远程存储库
除了上述设置外,本地和远程存储库还在特定于类型的部分中为相关包类型共享以下设置。
最大快照唯一性 |
指定应该存储的同一工件的惟一快照的最大数量。一旦达到这个数量并上传一个新快照,则会自动删除存储时间最早的快照。 空白(默认值)表示不限制快照的唯一性。 |
处理版本 |
如果设置了,Artifactory允许您将版本构件部署到这个存储库中。 |
处理快照 |
如果设置了,Artifactory允许您将快照构件部署到这个存储库中。 |