繁体   English   中英

将包的 npm 发布到 AWS CodeArtifact 存储库失败,并出现错误“提供的包已配置为阻止新版本发布。”

[英]npm publish for a package to AWS CodeArtifact repo fails with error "The provided package is configured to block new version publishes."

我创建了一个 AWS CodeArtifact 存储库,其中包含与 npmjs.com 的上游连接。 在安装了 lodash 包的最新公开版本 ( 4.17.21 ) 后,我尝试将自修补版本发布到存储库 ( 4.17.50 )。 当我这样做时,我收到以下错误:

npm ERR! 400 Bad Request - PUT https://amazon-{redacted}.d.codeartifact.us-west-2.amazonaws.com/npm/test-repository/lodash - The provided package is configured to block new version publishes.

提供的包配置为阻止新版本发布

什么会导致此操作被阻止? 过去类似的发布已经成功,最近有什么变化吗?

CodeArtifact 最近发布了一个名为Package Origin Control (POC)的功能,以帮助避免公共(例如来自 npmjs.com)和私有包版本的意外混合。

此功能允许存储库所有者通过阻止发布新版本和/或将上游版本下载到存储库中来阻止包的新版本如何获取到存储库中。 这可以帮助用户防止“依赖替换”攻击,在这种攻击中,仅用于内部的包的包版本被恶意行为者发布到公共存储库,以欺骗构建系统无意中使用恶意外部版本。 . 关于该主题的博客文章: https ://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610。

CodeArtifact 存储库中的每个包现在都有两个源控制标志publishupstream 每个都可以设置为ALLOWBLOCK publish标志控制是否可以将包的新版本发布到存储库中, upstream标志控制是否可以通过上游存储库获得上游存储库中存在但尚未保留在存储库中的包的新版本。

如果一个包由于从上游下载而首先进入存储库,则该包的publish标志设置为BLOCK 这就是有问题的包裹所发生的事情。 如果您希望有意混合公共包和私有包,则需要将包的publish标志设置为ALLOW 您可以在 AWS 控制台的 CodeArtifact 包详细信息页面(存储库列表 -> 存储库视图 -> 包视图 -> 源控制部分)中执行此操作,也可以通过 AWS CLI 通过调用put-package-origin-configuration来执行此操作,如下所示:

aws codeartifact put-package-origin-configuration --domain test-domain
    --repository test-repository --format npm --package lodash
    --restrictions publish=ALLOW,upstream=BLOCK

注意:正如所写,此命令将允许发布成功,但会阻止将其他公共版本的lodash从 npmjs.com 拉入存储库。 虽然可以将限制设置为publish=ALLOW,upstream=ALLOW ,但最安全的配置将始终反转public / upstream标志以防止混合公共和私有版本。 如果您想发布公共包的修补版本,也可以临时设置限制,然后返回阻止未来的发布。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM