PyPI now supports digital attestations

(blog.pypi.org)

152 points | by miketheman 16 hours ago

16 comments

  • belval 14 hours ago
    I have a bit of uneasiness about how this is heavily pushing GitHub actions as the correct way to publish to PyPI. I had to check PEP740 to make sure it was not directly supported by Microsoft.

    > The generation and publication of attestations happens by default, and no changes are necessary for projects that meet all of these conditions: publish from GitHub Actions; via Trusted Publishing; and use the pypa/gh-action-pypi-publish action to publish.

    If you then click on "The manual way" it adds a big disclaimer:

    > STOP! You probably don't need this section; it exists only to provide some internal details about how attestation generation and uploading work. If you're an ordinary user, it is strongly recommended that you use one of the official workflows described above.

    Where the only official workflow is "Use GitHub Actions".

    I guess I am an idealist but as a maintainer this falls short of my expectations for the openness of Python and PyPI.

    • woodruffw 14 hours ago
      > Where the only official workflow is "Use GitHub Actions".

      The standard behind this (PEP 740) supports anything that can be used with Trusted Publishing[1]. That includes GitLab, Google Cloud, ActiveState, and can include any other OIDC IdP if people make a good case for including it.

      It's not tied to Microsoft or GitHub in any particular way. The only reason it emphasizes GitHub Actions is because that's where the overwhelming majority of automatic publishing traffic comes from, and because it follows a similar enablement pattern as Trusted Publishing did (where we did GitHub first, followed by GitLab and other providers).

      [1]: https://docs.pypi.org/trusted-publishers/

      • belval 14 hours ago
        I get that, that's why I didn't go "This is Embrace Extend Extinguish", but as constructive feedback I would recommend softening the language and to replace:

        > STOP! You probably don't need this section;

        In https://docs.pypi.org/attestations/producing-attestations/#t...

        Perhaps also add a few of the providers you listed as well?

        > The only reason it emphasizes GitHub Actions is because that's where the overwhelming majority of automatic publishing traffic comes from

        GitHub being popular is a self-reinforcing process, if GitHub is your first class citizen for something as crucial as trusted publishing then projects on GitHub will see a higher adoption and become the de-facto "secure choice".

        • woodruffw 14 hours ago
          > but as constructive feedback I would recommend softening the language and to replace:

          I can soften it, but I think you're reading it excessively negatively: that warning is there to make sure people don't try to do the fiddly, error-prone cryptographic bits if they don't need to. It's a numerical fact that most project owners don't need that section, since most are either using manual API tokens or are publishing via GitHub Actions.

          > Perhaps also add a few of the providers you listed as well?

          They'll be added when they're enabled. Like I said in the original comment, we're using a similar enablement pattern as happened with Trusted Publishing: GitHub was enabled first because it represents the majority of publishing traffic, followed by GitLab and the others.

          > GitHub being popular is a self-reinforcing process, if GitHub is your first class citizen for something as crucial as trusted publishing then projects on GitHub will see a higher adoption and become the de-facto "secure choice".

          I agree, but I don't think this is PyPI's problem to solve. From a security perspective, PyPI should prioritize the platforms where the traffic is.

          (I'll note that GitLab has been supported by Trusted Publishing for a while now, and they could make the publishing workflow more of a first class citizen, the way it is on GHA.)

          • belval 13 hours ago
            > I agree, but I don't think this is PyPI's problem to solve. From a security perspective, PyPI should prioritize the platforms where the traffic is.

            To me that's a bit of a weird statement, PyPI is part of the Python foundation, making sure that the project remains true to its open-source nature is reasonable?

            My concern is that these type of things ultimately play out as "we are doing the right thing to limit supply chain attacks" which is good an defendable, but in ~5 years PyPI will have an announcement that they are sunsetting PyPI package upload in favor of the trusted provider system. pip (or other tooling) will add warnings whenever I install a package that is not "trusted". Maybe I am simply pessimistic.

            That being said we can agree to disagree, I am not part of the PSF and I did preface my first comment with "I guess I am an idealist".

            • woodruffw 13 hours ago
              > making sure that the project remains true to its open-source nature is reasonable?

              What about this, in your estimation, undermines the open-source nature of PyPI? Nothing about this is proprietary, and I can't think of any sane definition of OSS in which PyPI choosing to verify OIDC tokens from GitHub (among other IdPs!) meaningfully subverts PyPI's OSS committment.

              > PyPI package upload in favor of the trusted provider system. pip (or other tooling) will add warnings whenever I install a package that is not "trusted". Maybe I am simply pessimistic.

              Let me put it this way: if PyPI disables API tokens in favor of mandatory Trusted Publishing, I will eat my shoe on a livestream.

              (I was the one of the engineers for both API tokens and Trusted Publishing on PyPI. They're complementary, and neither can replace the other.)

              • mananaysiempre 9 hours ago
                > What about this, in your estimation, undermines the open-source nature of PyPI?

                Absence of support for self-hosting, in the spirit of freedom 0 = OSD 5&6? Or, for that matter, for any provider whose code is fully open source?

                • woodruffw 9 hours ago
                  > Absence of support for self-hosting, or for that matter for any non-proprietary service?

                  This has nothing to do with self-hosting, whatsoever. You can upload to PyPI with an API token; that will always work and will not do anything related to Trusted Publishing, which exists entirely because it makes sense for large services.

                  PyPI isn't required to federate with the server in my basement through OpenID Connect to be considered open source.

          • BiteCode_dev 13 hours ago
            I'm with @belval on this one, it's ok to prioritize github, but people that want the standard to implement an alternative should not feel like they are doing something that may not be supported.

            It kinda feels like that right now.

            • woodruffw 12 hours ago
              Again, to be clear: the standard does not stipulate GitHub or any other specific identity providers. The plan is to enable GitLab and the other Trusted Publisher providers in short order.

              This is exactly the same as Trusted Publishing, where people accused the feature of being a MSFT trojan horse because GitHub was enabled first. I think it would behoove everybody to assume the best intentions here and remember that the goal is to secure the most people by default.

              • int_19h 12 hours ago
                I think the point is that this needs to be made clearer in the official docs from the get go.
                • woodruffw 12 hours ago
                  It's said explicitly in the second sentence in the usage docs[1].

                  > Attestations are currently only supported when uploading with Trusted Publishing, and currently only with GitHub-based Trusted Publishers. Support for other Trusted Publishers is planned. See #17001 for additional information.

                  [1]: https://docs.pypi.org/attestations/producing-attestations/

            • aseipp 11 hours ago
              Anyone can run an OIDC system if they want. But PyPI is not under an obligation to trust an OIDC provider running on a random rpi3 in your basement. More than that, GitHub is "trusted" because we can be pretty sure they have an on-call staff to handle incidents, that they can reliably say "This token was provided on behalf of this user at this time for this build", etc.

              Even if you standardized the more technical parts like OIDC claim metadata (which is 100% provider specific), it wouldn't really change the thrust of any of this — PyPI is literally trusting the publisher in a social sense, not in some "They comply with RFC standards and therefore I can plug in my random favorite thing" sense.

              This whole discussion is basically a non-issue, IMO. If you want to publish stuff from your super-duper-secret underground airgapped base buried a mile underneath the Himalayas, you can use an API token like you have been able to. It will be far less hassle than running your own OIDC solution for this stuff.

              • immibis 1 hour ago
                If I can't build on a rpi3 in my basement and am forced to use GitHub that's exactly against the spirit of open source
          • guappa 10 hours ago
            > error-prone cryptographic bits if they don't need to

            They can't. Because you wouldn't accept their key anyway.

            • woodruffw 10 hours ago
              I think you're missing something. The key in question is a short-lived ECDSA key that lives inside a publishing workflow and is destroyed after signing; neither GitHub nor the Sigstore CA generates a signing key for you.

              PyPI will accept any key bound to an identity, provided we know how to verify that identity. Right now that means we accept Trusted Publishing identities, and GitHub identities in particular, since that's where the overwhelming majority of Python package publishing traffic comes from. Like what happened Trusted Publishing, this will be expanded to other identities (like GitLab repositories) as we roll it out.

              • guappa 8 hours ago
                How does pypi know I'm not github? Because I can sign with my keys and not with github's key.

                Never mind all the low level details of the temporary keys and hashes and all of that. This is an high level comment not a university book about security.

      • freeone3000 10 hours ago
        It requires an OIDC IdP, though… with PGP, I can verify that my identity is constant, but now, I’m reliant on some chosen third-party. And it has to keep being the same one, to boot! I don’t like the lock-in this causes, and I definitely don’t like the possibility of my right to publish being revoked by a third party.
        • beng-nl 8 hours ago
          I’m only now learning about what OIDC IdP is (for those like me: openid connect identity provider). But from my reading, a self hosted gitlab can function as an oidc idp.

          That would be enough control, right?

          • chippiewill 7 hours ago
            You can't use a self-hosted Gitlab because you can only use a "trusted publisher".

            There's no hard technical reason for that. It's mostly that PyPI only want to trust certain issuers who they think will look after their signing keys responsibly.

            • woodruffw 2 hours ago
              There is a technical reason for it, and it’s explained in an adjacent thread. Accepting every single small-scale IdP would result in a strictly worse security posture for PyPI as a whole, with no actual benefit to small instances (who are better off provisioning API tokens the normal way instead of using Trusted Publishing).
            • intelVISA 3 hours ago
              Sounds like PyPI have been corrupted? Hopefully The Foundation can remind them of their mission.
      • guappa 10 hours ago
        Except that also for trusted publishing, they only allowed github in the beginning and eventually added a couple of other providers. But if you're not google or microsoft you won't be added.
        • woodruffw 10 hours ago
          These kinds of comments are borderline mendacious: you can observe, trivially, that 50% of the Trusted Publishers currently known to PyPI are neither Google nor Microsoft controlled[1].

          If PyPI accepts two more likely ones, a full 2/3rds will unrelated to GitHub.

          [1]: https://docs.pypi.org/trusted-publishers/adding-a-publisher/

          • guappa 8 hours ago
            Ping me when one of them will be an open source entity rather than a company.
          • immibis 1 hour ago
            Wow. I get to choose one from a total of FOUR large corporations! Amazing openness!
          • cpburns2009 5 hours ago
            Wow, you can use a whole two other providers from your list: Gitlab and ActiveState. Color me unimpressed.
      • zahlman 4 hours ago
        "Ordinary user" here.

        It comes across like the goal of this system is to prove to my users a) who I am; b) that I am working in cooperation with some legitimate big business. I don't understand why I should want to prove such things, nor why it's desirable for b) to even be true, nor why my users should particularly care about a) at all, whether I can prove it or not.

        I think my users should only care that the actual contents of the sdist match, and the built contents of the wheel correspond to, the source available at the location described in the README.

        Yes, byte-for-byte reproducible builds would be a problem, for those who don't develop pure Python. Part of why sdists exist is so that people who can't trust the wheel, like distro maintainers, can build things themselves. And really - why would a distro maintainer take I take "I can cryptographically prove the source came from zahlman, and trust me, this wheel corresponds to the source" from $big_company any more seriously than "trust me, this wheel corresponds to the source" directly from me?

        If I have to route my code through one of these companies ("Don't worry, you can work with Google instead!" is not a good response to people who don't want to work with Microsoft) to gain a compliance checkmark, and figure out how someone else's CI system works (for many years it was perfectly possible for me to write thousands of lines of code and never even have an awareness that there is such a thing as CI) so that I can actually use the publishing system, and learn what things like "OIDC IdP" are so that I can talk to the people in charge...

        ... then I might as well learn the internal details of how it works.

        And, in fact, if those people are suggesting that I shouldn't worry about such details, I count that as a red flag.

        I thought open source was about transparency.

      • silverwind 14 hours ago
        Why does this need to allowlist CI providers in first place? Why not publish an open interface any CI provider can integrate against?
        • woodruffw 14 hours ago
          Because the security benefit of Trusted Publishing via OIDC versus normal API tokens is marginal at small scales, in two senses:

          1. The primary benefit of Trusted Publishing over a manual API token is knowing that the underlying OIDC IdP has an on-call staff, proper key management and rotation policies, etc. These can be guaranteed for GitHub, GitLab, etc., but they're harder to prove for one-off self-hosted CI setups. For the latter case, the user is no better off than they would be with a manual API token, which is still (and will always be) supported.

          2. If the overwhelming majority of traffic comes from a single CI/CD provider, adding more code to support generic OIDC IdPs increases PyPI's attack surface for only marginal user benefit.

          There also is no "open interface" for PyPI to really use here: this is all built on OIDC, but each OIDC provider needs to have its unique claims mapped to something intelligible by PyPI. That step requires thoughtful, manual, per-IdP consideration to avoid security issues.

          • chippiewill 7 hours ago
            I still think this is overly strict. Supporting arbitrary OIDC providers is not excessively complex or particularly rare, the major cloud providers all support it in one way or another [1][2][3], as does Hashicorp Vault [4]. I disagree that the primary benefit over a manual API token is _knowing_ that the OIDC IdP is following the best practices you talk about. Having it rely on asymmetric keys makes the process more secure and scalable than API tokens for those that choose to use it.

            I think there's a separate question around trust. But I think blocking non-trusted publishers from using a more secure form of authentication isn't the answer. Instead I think it makes more sense to use nudges in the PyPI UI and eventually of consumers (e.g. pip) to indicate that packages have come from non-trusted publishers.

            [1] https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_pr... [2] https://learn.microsoft.com/en-us/graph/api/resources/federa... [3] https://cloud.google.com/identity-platform/docs/web/oidc [4] https://developer.hashicorp.com/vault/docs/auth/jwt

          • freeone3000 10 hours ago
            I think I would be better off with API key + PGP than API key alone. And that’s being phased out?
            • woodruffw 10 hours ago
              You can no longer upload a PGP signature to PyPI, if that's what you mean. That was phased out last year (to virtually no complaint since nobody was actually verifying any of the signatures, much less attempting to confirm that their keys were discoverable[1]).

              [1]: https://blog.yossarian.net/2023/05/21/PGP-signatures-on-PyPI...

              • guappa 8 hours ago
                > to virtually no complaint since nobody was actually verifying any of the signatures

                And this is in no way a consequence of pypi stopping to host public keys right? Say the whole story at least… Say that there used to be a way to verify the signatures but you dropped it years ago and since then the signatures have been useless.

                • woodruffw 8 hours ago
                  If it did, it was well before I ever began to work on PyPI. By the time I came around, PGP signature support was vestigial twice over and the public key discovery network on the Internet was rapidly imploding.

                  (But also: having PyPI be the keyserver defeats the point, since PyPI could then trivially replace my package's key. If that's the "whole story," it's not a very good one.)

                  • freeone3000 7 hours ago
                    This attestation doesn’t change a ton with that, though. The point is to provide chain of custody — it got to my computer, from pypi, from ???. The PGP signature, much like a self-signed android app, verifies that it continues to be the same person.
          • antononcube 13 hours ago
            > [...] the user is no better off than they would be with a manual API token, which is still (and will always be) supported.

            This is good to know. I did not see related statements in of the documents linked to this discussion, though.

            • antononcube 10 hours ago
              I am not sure why my comment above is downvoted -- if you know where the perpetual optionality of digital attestations is officially stated, please, provide a link.
        • SethMLarson 14 hours ago
          Because every CI/ID provider has a different set of claims and behaviors that would constitute a "secure" policy for verification. If there was one singular way to do that then we could, but there isn't yet so PyPI needs to onboard providers piecemeal. The work to add a new provider is not massive, the reason there are not tons of providers isn't because the work is hard but rather because people are voting with their feet so Github and Gitlab make sense as initial providers to support.
      • benatkin 12 hours ago
        That's good. IIRC the feature was launched with GitHub as the only option, which is the same state of affairs of https://jsr.io/ right now.

        IMO the launch should have been delayed until there was more than one trusted publisher.

    • hifromwork 13 hours ago
      Even more, the previous way was to use GPG signatures, which were recently deprecated and removed. So you don't really have a choice.

      >Where the only official workflow is "Use GitHub Actions".

      Well you can do it manually with other solutions... as long as they are one of the four trusted publishers (see "Producing attestations manually does not bypass (...) restrictions on (...) Trusted Publishers":

      https://docs.pypi.org/trusted-publishers/adding-a-publisher/...

      This means that you literally can't do it manually, you have to rely on one of:

      * Github

      * Google Cloud

      * ActiveState (I'm not familiar with it)

      * Github.com (not just github, only that one instance)

      Really surprising development, IMO.

      • burnt-resistor 26 minutes ago
        It looks a lot like reinventing the wheel, but as an octagon.
    • doctorpangloss 10 hours ago
      On the one hand, you are totally right, GitHub Actions are the VS Code of automation. People choose them because they are broke, they work well enough, and the average person chooses things based on how it looks. GitHub Actions looks easy, it's cozy, it's comfy, VS Code looks like a code editor, everything has to be cozy and comfy.

      On the other hand, considering all of that, you can see why Python would arrive at this design. They are the only other people besides NPM who regularly have supply chain attack problems. They are seemingly completely unopinionated about how to fix their supply chain problems, while being opinionated about the lack of opinions about packaging in general. What is the end goal? Presumably one of the giant media companies, Meta, Google or Microsoft maybe, have to take over the development of runtime and PEP process, but does that even sound good?

      • LtWorf 9 hours ago
        I think the end goal is to only allow github/google whatever accounts to publish code on Pypi, so importing whatever will be USA-sanctions safe.

        The burden to ban russians/koreans/iranians will be on those big companies and pypi will be able to claim they respect the rules without having the resources themselves to ban accounts from sanctioned countries.

        So in my opinion, in the future tooling will have some option to check if the software was uploaded via microsoft et al and can be considered unsanctioned in USA.

        Or they might just say that's how you upload now and that's it.

        • doctorpangloss 9 hours ago
          > so importing whatever will be USA-sanctions safe...

          You are talking about guys who can barely figure out how to structure a Python package repository. They are not doing this kind of 4D chess.

          And anyway, none of that makes any sense.

          • LtWorf 8 hours ago
            The people paying for this, not them.
        • woodruffw 8 hours ago
          None of this is true. There is no plan to disable API token uploads to PyPI or to mandate Trusted Publishing, much less attestations. It's entirely intended to be a misuse-resistant way to upload to the index in the "happy case" where the package uses a CI/CD workflow that supports OpenID Connect.

          (I'm disappointed by the degree to which people seem to gleefully conspiracize about Python packaging, and consequently uncritically accept the worse possible interpretation of anything done to try and improve the ecosystem.)

          • zahlman 3 hours ago
            >(I'm disappointed by the degree to which people seem to gleefully conspiracize about Python packaging, and consequently uncritically accept the worse possible interpretation of anything done to try and improve the ecosystem.)

            I sympathize, but there are obvious reasons for this: low trust in the Python packaging system generally (both because of recent PSF activity and because of the history of complications and long-standing problems), and the fact that many similar things have been seen in the Linux and open-source worlds lately (for one example, Linux Mint's new stance on Flatpak and how they present Flatpak options in the Software Manager). (Edit: it also kinda rhymes with the whole "Secure Boot" thing and how much trouble it causes for Linux installation.)

          • LtWorf 8 hours ago
            I don't think you can predict the future any more than me.
            • woodruffw 8 hours ago
              I don't baselessly speculate about it. But yes, I do think I can predict with some confidence that PyPI is not going to remove API token access.
            • doctorpangloss 8 hours ago
              I understand the desire to raise awareness about your fringe concern. But it makes no sense.
    • ryanisnan 12 hours ago
      I think you're being overly critical. When it says that it adds support for Trusted Publishers, it links directly to this page: https://docs.pypi.org/trusted-publishers/.

      This page clearly explains how this uses OIDC, and uses GitHub Actions as an example. At no point in my read did I feel like this was shilling me a microsoft product.

      • guappa 10 hours ago
        Try to run your own gitlab instance and use this to publish. See what happens…

        At this moment this only supports github.

    • didntcheck 14 hours ago
      I might be reading this wrong but doesn't it include four workflows, including Gitlab? The "manual way" section is grouped under the Github tab, which indicates to me that it's only explaining how the Github-specific workflow works?

      https://docs.pypi.org/trusted-publishers/creating-a-project-...

      • belval 13 hours ago
        I was referring to the "Get Started" section that links to a producing attestation page that can be found here: https://docs.pypi.org/attestations/producing-attestations/#t....

        > Support for automatic attestation generation and publication from other Trusted Publisher environments is planned. While not recommended, maintainers can also manually generate and publish attestations.

      • woodruffw 13 hours ago
        You're on a slightly different page: Trusted Publishing supports four different providers, but this initial enablement of attestations (which are built on top of Trusted Publishing) is for GitHub only. The plan is to enable the others in short order.
    • immibis 1 hour ago
      And the in-detail explanation is full of references to specific third-party services, like Fulcio and SigStore...
    • LtWorf 10 hours ago
      Funny how I have a talk about the evolution of pypi's security at the upcoming minidebconf this weekend.

      I guess I'll have to update my slides :D

      But well as a debian developer my advice is to just use debian and completely ignore pypi, so I might be slightly biased.

      • zahlman 3 hours ago
        Does a .deb file even allow for installing for an arbitrary Python (i.e. not the system installation)? Am I supposed to find them through Apt and hope the Debian version of the package has a `python3` prefix on the name? Is that going to help if there are dependencies outside the Apt system?
      • mistrial9 4 hours ago
        except that is impractical at best. The Debian (and Ubuntu) python packaging groups have been overwhelmed since Python2.7. no way at all does the Debian packaging ecosystem reasonably satisfy python packages.. And there is more.. the Debian system does what it must do -- ensure system Python has integrity with major software stacks and the OS use of Python. Super! that is not at all the needs of users of python. As you know, Python has passed Javascript as the most used language on Github. There is tremendous pace and breadth to several important Python uses, with their libraries.

        Please reconsider this position with Debian and python packaging.

    • ikiris 7 hours ago
      I think y’all are being overly aggressive against what is from an outside perspective looks like a mvp targeting the majority use case.

      If the dev’s lower in the comments claim that other support is soon to be added doesn’t pan out then sure this is a valid argument, but it feels very premature and ignores the reality of launch expectations of most agile based teams.

  • ris 8 hours ago
    I'm not really convinced of the value of such attestations until a second party can reproduce the build themselves on their own hardware.

    Putting aside the fact that the mechanisms underpinning Github Actions are a mystery black box, the vast vast vast majority of github workflows are not built in a reproducible way - it's not even something that's encouraged by Github Actions' architecture, which emphasises Actions' container images that are little more than packaged installer scripts that go and download dependencies from random parts of the internet at runtime. An "attestation" makes no guarantee that one of these randomly fetched dependencies hasn't been usurped.

    This is not to go into the poor security record of Github Actions' permissions model, which has brought us all a number of "oh shit" moments.

  • jonnycomputer 12 hours ago
    Supply chain security is very important, and this seems like an important step. Seems absolutely essential that something like the Mozilla foundation, or EFF, or some other open-source friendly entity help provide such a service, instead of corralling users into companies with exploitative business models.

    I am in no hurry to be pushed into using Github, Gitlab or whatever else. Programmer's open source code has been monetized by these companies to feed AI LLM beasties, and it's fundamentally objectionable to me. I self-host my code using Gitea for that reason.

  • krnavy 14 hours ago
    After 2FA, the previous PyPI buzzword that was forced on everyone, JFrog discovered a key leak that compromised everything:

    https://news.ycombinator.com/item?id=40941809

    JFrog also discovered multiple malicious package exploits later.

    Now we get a Github centric new buzzword that could be replaced by trusted SHA256 sums. Python is also big on business speak like SBOM. The above key leak of course occurred after all these new security "experts" manifested themselves out of nowhere.

    The procedure remains the same. Download a package from the original creators, audit it, use a local repo and block PyPI.

    • SethMLarson 13 hours ago
      Hello! I believe I'm one of the "manifested" security experts you're hinting at :)

      Good security doesn't demand perfection, that's why security is both prevention and preparedness. The response from our admin was in every way beyond what you'd expect from many other orgs: prompt response (on the order of minutes), full audit of activity for the credential (none found), and full public disclosure ahead of the security researcher's report.

      > JFrog also discovered multiple malicious package exploits later.

      If you're referencing malicious packages on PyPI then yes! We want to keep PyPI freely open to all to use, and that has negative knock-on effects. Turns out that exploiting public good code repositories is quite popular, but I maintain that the impact is quite low and that our ability to respond to these sorts of attacks is also very good due to our network of security engineers and volunteers who are triaging their reports. Thanks to the work of Mike Fiedler (quarantining packages, API for reporting malicious packages, better UI for triagers) our ability to respond to malicious packages will become even better.

      > Now we get a Github centric new buzzword that could be replaced by trusted SHA256 sums.

      In a way, this feature is what you're describing but is easier to automate (therefore: good for you as a user) and is more likely to be correct because every attestation is verified by PyPI before it's made available to others (which is also good for users). The focus on GitHub Actions is because this is where many Python projects publish from, there is little incentive to create a feature that no one will use.

      > Python is also big on business speak like SBOM.

      Indeed, there is legislation in many places that will require SBOMs for all software placed in their markets so there is plenty of interest in these standards. I'm working on this myself to try to do the most we can for users while minimizing the impact this will have on upstream open source project maintainers.

      • zahlman 3 hours ago
        >In a way, this feature is what you're describing but is easier to automate (therefore: good for you as a user) and is more likely to be correct because every attestation is verified by PyPI before it's made available to others (which is also good for users).

        How long should I expect it to take until I can automatically generate an attestation from `twine`? Or does someone else have to sign off on it through some OpenID mumbo-jumbo before I can qualify as "trusted"?

        Automating the creation of SBOMs sounds even further out, since we're still struggling with actually just building sdists in the first place.

    • zahlman 3 hours ago
      After reading the underlying report (https://jfrog.com/blog/leaked-pypi-secret-token-revealed-in-...), I can't help but think: "where is the defense in depth?" Since `.pyc` files are just a cache of compilation that's already generally pretty quick, this could have been prevented by systems that simply didn't allow for pushing them into the Docker image in the first place. Or by having `PYTHONDONTWRITEBYTECODE=1` set on the developer's machine.

      (Also, now I'm trying to wrap my head around the fact that there's such a thing as "Docker Hub" in the first place, and that people feel comfortable using it.)

    • untitaker_ 12 hours ago
      [flagged]
  • ashvardanian 15 hours ago
    Here is the GitHub issue you can subscribe to for automatically generated attestations in the GitHub CI PyPi upload action: https://github.com/pypa/gh-action-pypi-publish/issues/288
    • woodruffw 15 hours ago
      Just a note: that issue is for connecting the already-present attestations to GitHub's attestations feature[1]. Attestations are already automatically generated and uploaded to PyPI regardless of that issue.

      (That issue will still be great to resolve, but just to avoid any confusion about its scope.)

      [1]: https://docs.github.com/en/actions/security-for-github-actio...

  • SethMLarson 14 hours ago
    Congratulations to everyone involved in this work! This is an incredible building block for not just supply-chain security both inside and downstream of the PyPI ecosystem but also for data analysis of open source projects (through strong linkage back to source repositories). Thank you all <3
  • pabs3 5 hours ago
    Wonder when PyPI will be doing bootstrappable and reproducible builds.

    https://bootstrappable.org/ https://reproducible-builds.org/

    • stavros 5 hours ago
      Given that it doesn't do builds, never?
  • OutOfHere 2 hours ago
    Are tools like uv, rye, hatch, etc. going to facilitate this?
  • dlor 15 hours ago
    This is awesome to see, and the result of many years of hard work from awesome people.
  • woodruffw 15 hours ago
    I'm very excited this has come to fruition!

    PyPI's user docs[1] have some more details, as does the underlying PEP[2].

    [1]: https://docs.pypi.org/attestations/

    [2]: https://peps.python.org/pep-0740/

  • cpburns2009 14 hours ago
    Great, now how do you use attestations with Twine when publishing packages on PyPI outside of the Github ecosystem?
    • guappa 10 hours ago
      You don't. The whole point is that you can no longer sign anything. Microsoft signs for you.

      And of course the signature means "this user can push to github" and nothing more.

      • remram 7 hours ago
        Hopefully the attestation is bound to a specific commit, so you can know the binaries came from the source?

        Otherwise I don't get it.

    • hifromwork 13 hours ago
      You need to rely on one of the four trusted publishers. You can't do it yourself: https://docs.pypi.org/trusted-publishers/adding-a-publisher/
  • antononcube 15 hours ago
    It looks like another process certain software engineers want to program and facilitate. I hope it is and stays optional.
  • Uptrenda 2 hours ago
    Despite crypto getting easier and easier + more main stream. You often don't see it used that often. Even in ((('"```blockchain'"```))) projects (wink emoji; skull emoji; frown; picture of a chart crashing.) I welcome these additions to PyPI. I am a proud Python Chad and always will be.
  • trishankkarthik 15 hours ago
    Very cool, and congrats!

    The corresponding ToB blog post says the following:

    > Longer term, we can do even better: doing “one off” verifications means that the client has no recollection of which identities should be trusted for which distributions. To address this, installation tools need a notion of “trust on first use” for signing identities, meaning that subsequent installations can be halted and inspected by a user if the attesting identity changes (or the package becomes unattested between versions).

    Agree: signing is only as good as verification. However, trust-on-first-use (TOFU) is not the most secure way to map packages to attestations because nothing stops attackers who have taken over PyPI from tampering with the _unsigned_ mapping of identities to attestations in package lockfiles for new clients (certainly in containerized environments where everything could look new), and even just new versions of packages.

    Although [PEP 458](https://peps.python.org/pep-0458/) is about signing the Python package index, it sets the foundation for being able to securely map packages to signed in-toto _policies_, which would in turn securely map identities to attestations. I think it is worth noting how these different PEPs can work together :)

  • amelius 6 hours ago
    I'm curious what would happen if a maintainer's PC is compromised. Is there any line of defense left at that point?
  • Comma2976 10 hours ago
    Great, now all that is missing is a decent packaging system for Python.