使用 AWS CodeArtifact 阻止某些公共包

and*_*rry 5 packaging pypi amazon-web-services aws-codeartifact

我希望创建一个私有 CodeArtifact PyPI 存储库,其上游连接到公共 PyPI 存储库。私有仓库将存储具有特定前缀的包。

例子:

  • foo.数据库
  • foo.logging

如果从私有存储库请求的版本不可用,我想避免从公共 PyPI 存储库中提取上述包。任何带有foo前缀的包请求都应该被上游存储库阻止。

根据存储库策略文档...

codeartifact:ReadFromRepository 操作只能在存储库资源上使用。您不能将程序包的 Amazon 资源名称 (ARN) 作为资源,并使用 codeartifact:ReadFromRepository 作为允许对存储库中的程序包子集进行读取访问的操作。给定主体可以读取存储库中的所有包,也可以不读取任何包。

...我的印象是这是不可能的。有什么办法可以让这个工作吗?Artifactory 使用包含/排除模式来解决这个问题。我希望 CodeArtifact 中有类似的东西。

小智 3

CodeArtifact 不支持根据包名称前缀阻止来自上游的包。但 CodeArtifact 现在提供了包来源控制,可用于阻止来自上游的单个包。

如果您创建一个私有 CodeArtifact PyPI 存储库,其上游连接到公共 PyPI 存储库,然后将包的版本发布foo.databasesfoo.logging您的私有存储库,那么这些包将在您的私有存储库中进行初始化,并设置阻止这些包的版本上游存储库,这将阻止从公共 PyPI 存储库中提取这些包的任何版本。

由于该功能不适用于前缀,因此如果您稍后请求类似的内容foo.networking,则不会阻止从公共 PyPI 中提取,除非您首先将 的版本发布foo.networking到您的私有存储库或在包上手动配置包源控制foo.networking以设置上游: 堵塞。