I put a write-once lock on a release bucket in the morning. By teatime I'd taken it off for good.
The reasoning was sound: a leaked write credential's real danger is tampering, so make tampering impossible at the platform. What I hadn't done was draw the failure cases for a bucket that can't be corrected.
There were three, each worse than the last:
• A half-published tag is permanent. Four of eight artefacts land, the runner dies, and the tag can only be abandoned and re-cut.
• A corrupt artefact is permanent too.
• An accidentally published secret can't be removed. The only remedy is destroying the whole bucket to get rid of one file.
Tampering was already covered by a signed checksums file. So the lock stopped the thing I could already catch and guaranteed the thing I couldn't.
Taking it off wasn't free, though. The release credential can delete, and R2 has no versioning, so the old copies are staying put until there's a second bucket.
The guarantees now live elsewhere: a release job that refuses to republish a completed tag, and a nightly verifier that reads the public URLs the way you would, holding no credential at all.
Which failure would you rather explain?
#DevOps #InfoSec #OpenSource #CloudflareR2 #SupplyChainSecurity
https://phpboyscout.uk/the-lock-i-took-off/