使用 Amazon CodeArtifact 包组配置提高软件供应链的安全性 新闻博客

利用 Amazon CodeArtifact 提升软件供应链安全性

关键要点

Amazon CodeArtifact 新增了包组配置功能,方便管理员集中管理多个包的配置。包组允许定义内部开发者的包发布和上游更新的权限,有助于加强安全性。代码Artifact 是一个完全托管的包存储服务,可与流行的构建工具和包管理器协同使用。通过严格的审核机制,确保只允许经过验证的包在内部共享,从而降低供应链攻击的风险。

从今天起,软件包库的管理员可以使用新的 AWS CodeArtifact 包组配置功能,集中管理多个软件包的配置。包组允许你定义内部开发者如何更新软件包或从上下游库获取更新。现在,你可以允许或阻止内部开发者发布软件包,以及控制某个包组的上游更新权限。

CodeArtifact 是一个完全托管的包存储服务,使组织能够安全地存储和共享应用开发所需的软件包。你可以将 CodeArtifact 与流行的构建工具和包管理器结合使用,例如 NuGet、Maven、Gradle、npm、yarn、pip、twine 和 Swift Package Manager 等。

CodeArtifact 支持按需从公共库如 npmjscom、mavenorg 和 pypiorg导入软件包。这让开发者可以从一个单一的可信来源即 CodeArtifact 仓库拉取他们所需的所有包。

小型应用程序的依赖包通常超过十个,而大型企业应用程序可能有数百个。利用这些包,开发者能更快速地开发和测试,解决常见的编程挑战,如网络访问、密码学函数或数据格式处理。这些包可能由组织内的其他团队生成,或由第三方如开源项目维护。

为降低供应链攻击的风险,某些组织会对内部库的可用软件包及其更新权限进行人工审核。在软件库中更新软件包的方式主要有三种:由组织中的选定开发者推送软件包更新、从内部上游库导入软件包或从外部公共库导入流行的开源软件包。

以下是展示开发者与包的不同互动模型的示意图:

每天免费2小时加速器下载

管理库时,确保定义好软件包的下载和更新方式非常重要。如果从外部上游库允许软件包的安装或更新,这可能会造成 拼写攻击 或 依赖混淆 等安全隐患。例如,假设一个恶意参与者发布了一个众所周知软件包的恶意版本,名称略有不同。比如,把 coffeescript 改成了 cofeescript,仅改动了一个字母。如果你的库配置允许从外部上游库获取数据,开发者在夜班糊涂地输入 npm install cofeescript 而不是 npm install coffeescript,就会导致恶意代码的注入。

CodeArtifact 为更新软件包提供了三种权限设置。管理员可以选择允许或阻止来自内部 publish 命令、内部上游库或外部上游库的安装和更新。

到目前为止,库管理员必须逐个管理这些重要的安全设置。通过今天的更新,管理员可以为一组软件包同时定义这三种安全参数。这些软件包通过其类型、命名空间和名称进行识别。此新功能是在域级别而非仓库级别操作,使管理员能够在其域内所有仓库中强制执行包组的规则,无需在每个仓库内维护 软件包来源控制 配置。

让我们详细看看如何运作

假设我在 CodeArtifact 中管理一个内部包库,并且我只希望分发经过我组织验证的版本的 AWS SDK for Python,也被称为 boto3。

我导航到 AWS 管理控制台 的 CodeArtifact 页面,创建一个名为 pythonaws 的库,以供内部开发者使用经过审查的包。

这将会创建一个暂存库,所有来自 pypi 的外部包会首先在 pypistore 内部库中进行暂存,我将在此处进行验证,然后再提供给 pythonaws 库。开发者将在此连接以下载包。

默认情况下,当开发者在 CodeArtifact 中进行身份验证并输入 pip install boto3 时,CodeArtifact 将从公共的 pypi 仓库下载包,暂存至 pypistore,并将其复制到 pythonaws 中。

现在,假设我希望阻止 CodeArtifact 从外部 pypi 仓库获取软件包更新。我希望 pythonaws 只提供我从 pypistore 内部库审批的包。

借助我们今天发布的新功能,我现在可以为这组包应用此配置了。我导航到我的域,选择“包组”选项卡,然后选择“创建包组”按钮。

我输入包组定义。这一表达式定义了包含在该组中的包。包通过包格式、可选命名空间和名称三者的组合进行识别。

以下是可用于每个允许组合的模式的几个示例:

所有包格式:/特定包格式:/npm/包格式和命名空间前缀:/maven/comamazon包格式和命名空间:/npm/awsamplify/包格式、命名空间和名称前缀:/npm/awsamplify/ui包格式、命名空间和名称:/maven/orgapachelogginglog4j/log4jcore

我邀请你阅读 文档 来了解所有可能性。

在我的例子中,Python 包不具有命名空间概念,我希望该组包括所有来自 pypi 的,名称以 boto3 开头的包。因此,我写下 /pypi//boto3。

接下来,我定义我的包组的安全参数。在此示例中,我希望我的组织开发者无法发布更新。我也不希望 CodeArtifact 从外部上游库获取新版本。我只想允许我内部暂存库的包更新。

我取消勾选所有“从父组继承”框,将“发布”和“外部上游”设置为“阻止”,将“内部上游”设置为“允许”。然后,我选择“创建包组”。

一旦定义完成,开发者将无法安装与 pythonaws 库中授权的版本不同的包。当开发者尝试安装 boto3 包的另一个版本时,会收到错误信息。这是预期的结果,因为 boto3 包的最新版本在上游暂存库中不可用,并且存在一个阻止从外部上游库获取包或包更新的规则。

同样,假设你的管理员希望保护组织不受依赖替换攻击。所有你的内部 Python 包名称均以公司名称mycompany开头。管理员希望阻止开发者意外地从 pypiorg 下载以 mycompany 开头的包。

管理员创建一个规则,模式为 /pypi//mycompany,发布权限为 允许,外部上游为 阻止,内部上游为 阻止。在这种配置下,内部开发者或 CI/CD 管道可以发布这些包,但 CodeArtifact 将不从 pypiorg 导入任何以 mycompany 开头的包,例如 mycompanyfoo 或 mycompanybar,从而避免此类攻击。

包组在 CodeArtifact 可用的所有 AWS 区域 中均可使用,且不收取额外费用。它帮助你更好地控制软件包如何以及何时进入内部库,进而帮助预防各种供应链攻击,例如 拼写攻击 或 依赖混淆。这是你可以立即添加到基础设施即代码IaC工具中的一项额外配置,以创建和管理你的 CodeArtifact 存储库。

去 今天配置你的第一个包组 吧。

使用 Amazon CodeArtifact 包组配置提高软件供应链的安全性 新闻博客

sb

Sbastien Stormacq

Sbastien 自上世纪八十年代中期第一次接触 Commodore 64 开始写代码。通过结合他的热情、热忱、客户倡导、好奇心和创造力,他激励开发者发挥 AWS 云的价值。他的兴趣包括软件架构、开发工具和移动计算。如果你想推销某样东西给他,确保它有一个 API。关注他的推特 @sebsto。

亚马逊托管的 Apache Flink 服务现已支持 Apache Flink 版本 119 大数

Amazon托管的Apache Flink服务现已支持Apache Flink版本119作者:Francisco Morillo 和 Lorenzo Nicora 日期:2024年7月8日关键要点Am...

使用 AWS IoT 为现代连接车辆平台提供安全性 官方博客

保护现代联网车辆平台的 AWS IoT 解决方案关键要点本文介绍了 AWS IoT 的新架构指导和设计模式,旨在帮助企业提高联网车辆平台的安全性。随着汽车行业的数字化转型,确保车辆安全和监控变得尤为重...