跳过内容

介绍“受信任的发布者”

从今天开始,PyPI 包维护者可以采用一种新的、更安全的发布方法,这种方法不需要与外部系统共享长期有效密码或 API 令牌。

关于受信任的发布

“受信任的发布”是我们使用 OpenID Connect (OIDC) 标准在受信任的第三方服务和 PyPI 之间交换短期有效身份令牌的术语。此方法可在自动化环境中使用,并且无需使用用户名/密码组合或手动生成的 API 令牌来验证 PyPI 发布时的身份。

相反,PyPI 维护者可以将 PyPI 配置为信任给定 OpenID Connect 身份提供者 (IdP) 提供的身份。这使 PyPI 能够验证和委托对该身份的信任,然后授权该身份从 PyPI 请求短期有效、范围严格的 API 令牌。这些 API 令牌永远不需要存储或共享,通过快速过期自动轮换,并提供已发布包与其源之间的可验证链接。

使用 GitHub Actions 进行受信任的发布

PyPI 目前支持使用 GitHub Actions 进行受信任的发布,使用 其对 OpenID Connect 的支持

将 PyPI 配置为信任给定的 GitHub 存储库和工作流程后,PyPA 的 'pypi-publish' GitHub Action 用户可以通过从其工作流程配置中删除 usernamepassword 字段,并添加生成身份令牌的权限来采用受信任的发布。

jobs:
   pypi-publish:
     name: upload release to PyPI
     runs-on: ubuntu-latest
+    permissions:
+      # IMPORTANT: this permission is mandatory for trusted publishing
+      id-token: write
     steps:
       # retrieve your distributions here

       - name: Publish package distributions to PyPI
         uses: pypa/gh-action-pypi-publish@release/v1
-        with:
-          username: __token__
-          password: ${{ secrets.PYPI_TOKEN }}

强烈建议使用 PyPA 的 GitHub Action,但不是必需的。有关如何手动交换令牌的更多详细信息,请参见 我们的文档

其他安全强化可用

PyPI 包维护者可以通过将受信任的发布者配置为仅从特定的 GitHub Actions 环境 发布来进一步提高其发布工作流程的安全性。

配置环境是可选的,但强烈建议:使用 GitHub 环境,您可以对受信任的 GitHub Actions 工作流程施加额外的限制,例如要求存储库维护者的受信任子集在每次运行时手动批准。

解除未来安全改进的阻碍

除了使发布现在更安全之外,受信任的发布者的可用性还解除了 PyPI 未来其他安全改进的阻碍。

配置和使用受信任的发布者提供了项目与其源存储库之间的“强链接”,这使 PyPI 能够验证相关元数据,例如项目的源存储库的 URL1。此外,使用受信任的发布者发布使 PyPI 能够以可验证的方式关联有关给定文件从何处发布的更多信息。

最后,尽管受信任的发布者目前仅限于 GitHub Actions,但用于实现此功能的大部分基础工作都是可推广的,并非特定于单个发布者。我们有兴趣支持从提供 OpenID Connect 身份的更多服务进行发布的能力。

立即开始

要开始在 PyPI 上使用受信任的发布者,请查看我们的文档:https://docs.pypi.ac.cn/trusted-publishers/

致谢

这项工作由 Google 开源安全团队提供资金,大部分开发工作由 Trail of Bits 完成,特别感谢贡献者 William Woodruff

还要感谢 PyPA 的 Sviatoslav Sydorenko,他维护了 'pypi-publish' GitHub Action,感谢他快速及时地为该操作添加了对受信任发布者的支持。

最后,我们要感谢所有测试版测试人员,包括 GitHub 员工,感谢他们与我们合作以确保此功能直观且有用,并在整个过程中提供宝贵的反馈意见以改进此功能。


Dustin Ingram 是 Python 包索引的维护者。


  1. 目前,此类信息由上传者提供,PyPI 未对其准确性进行验证。