防范恶意公共包
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
借助 Azure Artifacts 上游源,开发人员可以方便地使用统一源从 Artifact 源和常用公共注册表(如 NuGet.org 或 npmjs.com)发布和使用包。 以前,项目源合并了源本身和所有配置的上游源中的可用包版本列表。
允许外部源版本是一项功能,使开发人员能够选择是否要使用外部源包版本。 它控制可从特定包的公共注册表访问哪些包。
禁用 “允许外部版本 ”切换时,将阻止公共注册表中的版本,并且无法下载。 这增加了额外的安全层,通过防止从公共注册表暴露到潜在的恶意包。
但是,如果用户愿意,他们可以启用 “允许外部版本 ”切换,以允许从公共注册表访问和使用包。
注意
此设置不会对已保存到源的任何包版本进行更改。 由于更改此设置,对这些包版本的访问不会更改。
适用的场景
以下部分演示了外部版本设置阻止外部源包版本的各种常见方案,以及不需要阻止访问公共包的其他方案。
公共版本被阻止
专用包版本公开
在此方案中,团队具有公开的专用包。 在这种情况下,外部版本设置将导致源阻止使用该包名称从公共源使用任何新版本。
同时具有专用包和公共包
在此方案中,如果团队使用专用包和公共包的组合,则禁止外部源包阻止来自公共注册表的任何新包版本。
不会阻止公共版本
所有包都是专用包*
如果所有现有包都是私有的,并且团队没有计划使用任何公共包,则外部版本设置在此方案中不会影响团队的工作流。
所有包都是公共的
在此方案中,如果团队专门使用公共包,无论是从公共注册表还是其他开源存储库,则设置不会以任何方式影响其工作流。
公共包专用
在这种情况下,当公共包转换为专用包时,外部版本设置不会以任何方式影响团队的工作流。
允许外部版本
注意
必须是 源所有者 才能允许外部源版本。 有关详细信息,请参阅 源权限。
登录到 Azure DevOps 组织,并导航到你的项目。
选择“ 项目”,然后从下拉菜单中选择源。
选择包,然后选择省略号按钮以获取更多选项。 选择“ 允许外部源版本”。
选择切换按钮以允许外部版本。 完成后,选择“ 关闭 ”。
允许使用 REST API 的外部版本
使用 PowerShell 允许外部版本
-
为个人访问令牌创建环境变量。
$env:PATVAR = "YOUR_PERSONAL_ACCESS_TOKEN"
将个人访问令牌转换为 baser64 编码字符串并构造 HTTP 请求标头。
$token = [Convert]::ToBase64String(([Text.Encoding]::ASCII.GetBytes("username:$env:PatVar"))) $headers = @{ Authorization = "Basic $token" }
构造终结点 URL。 示例://pkgs.dev.azure.com/MyOrg/MyProject/_apis/packaging/feeds/MyFeed/nuget/packages/pkg1.0.0.nupkg/upstreaming?api-version=6.1-preview.1
项目范围的源:
$url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=6.1-preview.1"
组织范围的源:
$url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=6.1-preview.1"
运行以下命令以检索包的上游行为状态。 $url
和 $headers
上一节中使用的变量相同。
Invoke-RestMethod -Uri $url -Headers $headers