Een gelekte sleutel is nog altijd de saaiste en meest voorkomende manier waarop iemand ergens binnenkomt. Dat gold ook bij het incident rond Hugging Face van afgelopen zomer: inloggegevens die ergens rondslingerden, waren het eerste bruikbare houvast.
De rem daarop is niet ingewikkeld. Je zorgt dat elke token zo weinig mogelijk mag, en dat je er één kunt weggooien zonder de rest te breken. Hugging Face heeft daar een aparte tokensoort voor.
De drie soorten, kort
Op huggingface.co/settings/tokens kies je bij het aanmaken uit drie rollen.
Read geeft leesrechten op alles wat jij mag lezen. Dus ook op je private repo’s en op die van elke organisatie waar je lid van bent. Handig voor even snel een gated model downloaden, riskant zodra hij ergens blijft staan.
Write doet daar schrijfrechten bovenop, op alle repo’s waar jij schrijfrechten hebt. Nodig als je modellen pusht of een model card aanpast.
Fine-grained begint bij niets. Jij vinkt aan welke specifieke repo’s of organisaties de token mag benaderen en welke handelingen hij daar mag doen. Hugging Face noemt dit expliciet de aanbevolen vorm voor productie: lekt hij, dan is de schade beperkt tot wat je hebt aangevinkt.
Zo maak je er een aan
- Ga naar je instellingen en open het tabblad Access Tokens.
- Klik op New token en kies rol Fine-grained.
- Geef de token een naam die zegt wáár hij draait. Niet “token2”, wel “prod-inference-server” of “colab-experimenten”.
- Vink alleen de repo’s aan die deze toepassing echt nodig heeft. Draait er een productie-app op één gated model, dan is dat één vinkje.
- Kopieer de waarde en plak hem meteen op zijn eindbestemming. Je krijgt hem niet nog een keer te zien.
Herhaal dit per toepassing. Je laptop, je notebook en je server krijgen elk een eigen token. Dat voelt omslachtig tot de eerste keer dat je er één moet intrekken.
Waar je hem neerzet
Niet in je code, niet in een image, niet in een commit. Een omgevingsvariabele of een secret manager, en verder niks:
import os
from transformers import AutoModel
model = AutoModel.from_pretrained(
"jouw-org/jouw-model",
token=os.environ["HF_TOKEN"],
)
Hugging Face scant repo’s op per ongeluk gepubliceerde sleutels, maar dat is een vangnet en geen plan.
Voor CI/CD: helemaal geen token
Draait je pipeline in GitHub Actions, GitLab CI of CircleCI, dan hoef je daar niets op te slaan. Met Trusted Publishers ruilt Hugging Face de OIDC-identiteit van je CI-provider bij elke run in voor een kortlevende token. Die kan repo-gebonden zijn, om modellen, datasets, Spaces of kernels te publiceren, of gebruikersgebonden, om gated repo’s te lezen met jouw rate limits.
Het scheelt je een secret dat nooit verloopt en dat iedereen met toegang tot je CI-instellingen kan uitlezen.
Als het misgaat
Is je eigen token gelekt, verwijder of ververs hem dan direct in het tabblad Access Tokens. Vind je die van iemand anders, dan kun je hem ook zelf ongeldig maken, zonder enige rechten op dat account:
curl -X POST "https://huggingface.co/api/credentials/revoke" \
-H "Content-Type: application/json" \
-d "{\"credentials\": [\"${LEAKED_HF_TOKEN}\"]}"
Je mag meerdere waardes tegelijk aanbieden, wat handig is voor een scanpijplijn die in batches meldt. Elke waarde die bestaat, werkt onmiddellijk nergens meer en de eigenaar krijgt bericht. Het endpoint antwoordt altijd met 202, ook op een token die niet bestaat, zodat niemand het kan gebruiken om te raden of een sleutel geldig is. Zet de waarde in een variabele of bestand, zodat hij niet in je shell-geschiedenis achterblijft.
Werk je binnen een organisatie
Op Team- en Enterprise-plannen kan een beheerder een tokenbeleid instellen, en dan gelden er extra regels. Een fijnmazige token die je op zo’n organisatie richt, komt eerst in de wacht te staan; in je tokenlijst zie je dan een oranje zandloper. Je krijgt een mail zodra hij is goedgekeurd of afgewezen. Afgewezen tokens blijven werken voor alles buiten die organisatie. Intrekken is definitief: dan maak je een nieuwe aan.
Staat het beleid op “alleen fijnmazige tokens”, dan worden je oude read- en write-tokens tegen die organisatie geweigerd met een 403. Ook dat is een goede reden om nu al om te schakelen.
