PyPI により、パスワードやトークンに縛られずにパッケージを公開できるようになりました

PyPI

PyPI は、Python プログラミング言語によるサードパーティ アプリケーションの公式ソフトウェア リポジトリです。

数日前、PythonパッケージリポジトリであるPyPI(Python Package Index)が、パッケージを公開するための新しい安全な方法を提供し始めたことが発表されました。これにより、固定パスワードやAPIアクセストークンを外部システム(GitHub Actionsなど)に保存する必要がなくなります。

この新しい認証方法は「信頼できる発行者」と呼ばれ、外部システムの侵害や、事前に定義されたパスワードやトークンが不正な手に渡ることによって悪意のあるアップデートが公開されるという問題を解決するために設計されています。

本日より、PyPI パッケージのメンテナーは、外部システムと共有するための長期間有効なパスワードや API トークンを必要としない、より安全な新しい公開方法を採用できるようになりました。

この新しい認証方法は、他の従来の PyPI 認証方法と比較して、ユーザビリティとセキュリティに大きな利点があることが言及されています。

  • ユーザビリティ: 信頼された発行により、ユーザーは PyPI で API トークンを手動で作成し、それらをコピーして CI プロバイダーに貼り付ける必要がなくなりました。 唯一の手動の手順は、PyPI でエディターを構成することです。
  • セキュリティ: 通常の PyPI API トークンは長期間有効です。つまり、パッケージ リリースを侵害する攻撃者は、正当なユーザーが通知して手動で取り消すまで、それを使用できます。 同様に、パスワードを使用してアップロードするということは、攻撃者がアカウントに関連付けられた任意のプロジェクトをアップロードできることを意味します。 Trusted Publishing は、これらの問題の両方を回避します。発行されたトークンは自動的に期限切れになり、アップロードが承認されたパッケージのみに制限されます。

この新しい認証方法に関して、従来のログイン/パスワードやアクセストークンによって手動で生成される永続的なAPIを使用する代わりに、外部サービスとPyPIディレクトリ間で交換される時間制限付き認証トークンを使用してパッケージ公開操作を検証するOpenID Connect(OIDC)標準に基づいていることが述べられています。

「信頼できるパブリケーション」とは、OpenID Connect (OIDC) 標準を使用して、信頼できるサードパーティ サービスと PyPI の間で有効期間が短い ID トークンを交換することを指す用語です。 この方法は自動化された環境で使用でき、公開時にユーザー名とパスワードの組み合わせや手動で生成された API トークンを使用して PyPI で認証する必要がなくなります。

一方、PyPI 側では、パッケージ メンテナーは、外部サービスが非ライブ トークンを要求するために使用する外部 OpenID プロバイダー (IdP) に提供された識別子を信頼できることも言及されています。

生成されたOpenID Connectトークンは、プロジェクトとドライバ間の関係を証明し、 PyPIが追加のメタデータ検証(公開されたパッケージが特定のレポジトリに関連付けられていることの確認など)を実行できるようにします。これらのトークンは永続的なものではなく、特定のAPIに紐付けられており、短い有効期間後に自動的に期限切れとなります。

代わりに、PyPI メンテナーは、特定の OpenID Connect ID プロバイダー (IdP) によって提供される ID を信頼するように PyPI を構成できます。 これにより、PyPI はその ID への信頼を確認して委任できるようになり、PyPI から限定されたスコープで有効期間が短い API トークンを要求することが承認されます。 これらの API トークンは、保存または共有する必要がなく、有効期限が切れると自動的にローテーションされ、公開されたパッケージとそのソースの間の検証可能なリンクが提供されます。

現在、 GitHub Actionsで起動されたコントローラーでは、 Trusted Publishersメカニズムを使用する機能が既に実装され、動作しています。最後に、重要な点として、Trusted Publishersは今後、他の外部サービスでもサポートされる予定であることも述べられています。

最後に、これについてさらに詳しく知りたい場合は、以下のリンクから詳細をご覧いただけます。


Googleで優先ソースとして追加する