Hoppa till huvudinnehållet

Åtkomstlogg för registry

Granskningsloggen registrerar administrativa åtgärder. Åtkomstloggen för registry registrerar något annat: varje anrop som en klient gör mot din organisations paket- och container-registry. Det omfattar varje nedladdning, varje metadataläsning (en npm-packument, ett enkelt PyPI-index, en Maven maven-metadata.xml), varje uppladdning och varje borttagning, och det inkluderar anrop som en policy blockerade. Ingenting samplas, med två undantag för rutinmässig CI-trafik genom beroendeproxyn. Båda gäller bara ett anrop som ett Forgejo Actions-jobb gjorde, som proxyn tillät och besvarade utan fel:

  • CI-metadataläsningar registreras inte (sedan 2026-10-12). Ett paketindex eller en versionslista (en npm-packument, ett enkelt PyPI-index, en Maven maven-metadata.xml) som läses av ett jobb sparas inte. En enda paketinstallation gör hundratals sådana läsningar, och de säger ingenting som nedladdningen efter dem inte redan säger.
  • CI-nedladdningar som levereras från proxyns cache räknas i stället för att loggas en och en (sedan 2026-10-13). När ett jobb laddar ned en paketfil som proxyn redan har, läggs nedladdningen till i hämtningsstatistiken i stället för att sparas som en händelse: en räkning per UTC-dag, paketversion och repo, med id:n för de Actions-körningar som hämtade den. Du kan alltså fortfarande se vilken version av vilket paket som kom in i vilket bygge, per körning, i hämtningsstatistiken.

Allt annat är fortfarande en händelse var, CI inräknat:

  • varje nedladdning som proxyn hämtade från uppströms-registryt (en cachemiss), och varje nedladdning från ditt eget registry
  • varje anrop som en policy nekade, blockerade eller skulle ha blockerat
  • varje anrop som misslyckades (status 400 eller högre)
  • varje anrop som gjordes av en person, en bot, en registry-robot eller anonymt, metadataläsningar och cacheträffar inräknade

En CI-nedladdning som räknas i hämtningsstatistiken behåller paket, version, dag, repo och körning, samt antalet hämtningar. Den behåller inte det som en händelse innehåller utöver det: filnamnet, storleken, den exakta tiden för varje hämtning (statistiken har dagens första och sista), klientadressen, user agent och anrops-id. Den levereras inte till en SIEM-endpoint och finns inte i access-log.ndjson; den finns i API:t för hämtningsstatistik och i metadata/pulled-versions.ndjson i dataexporten. Händelser som sparades före de här datumen behålls under sin normala lagringstid.

Vad en händelse innehåller

FältBetydelse
occurred_atNär fremforge besvarade anropet (UTC).
originVilken komponent som såg anropet: registry för paketregistryt. Beroendeproxyn skriver proxy.
surfaceapi (/api/packages/…), oci (/v2/…, container-registryt) eller web (en fil som laddats ned från webbgränssnittet).
org, package.type, package.name, package.version, package.fileVad som efterfrågades.
repoFör ett anrop som gjorts med en jobbtoken från Forgejo Actions: jobbets repo, <owner>/<repo>. Annars tomt.
actionsFör ett anrop som gjorts med en jobbtoken från Forgejo Actions: körningen det kom från, {repo_id, run_id, run_number, job_id}. run_number är körningens sida, /<owner>/<repo>/actions/runs/<run_number>; run_id är GITHUB_RUN_ID. null för alla andra anrop, och för anrop som registrerades före 2026-10-08.
package.digestsha256:<hex> för filen eller manifestet som levererades eller sparades, när registryt angav det.
actiondownload, metadata, upload, delete eller other.
actorVem registryt autentiserade: {type: "user" | "bot" | "anonymous", id, login}. En token eller en session löses upp till den användare den tillhör, och jobb i Forgejo Actions visas som en bot.
client_ipKlientadressen så som fremforges edge såg den. Den är tom när fremforge inte kunde verifiera adressen, till exempel för ett anrop som inte kom via edge.
user_agentKlientens User-Agent, avkortad vid 256 tecken.
http.method, http.status, http.bytesAnropsmetoden, svaret och storleken där den är känd. Storleken är okänd för en nedladdning som omdirigeras till objektlagring. Ett HEAD-anrop visas som GET, eftersom CDN:et vidarebefordrar HEAD-anrop till registryt som GET.
decision, decision_reasonallowed; blocked; would_block (en policy i skuggläge, eller blockeringsåtgärden warn för din image-skanning, skulle ha nekat det, och anropet gick igenom); eller pending_refused (din paketpolicy nekar filer vars skanning inte är klar än, och den här filens var inte det; klienten fick 503 med Retry-After, och ett nytt försök när skanningen är klar lyckas). decision_reason anger regeln som avgjorde, till exempel malware, image_malware, image_cve, registry_scan:<reason> eller immutable_retired (se oföränderliga paketversioner).

Registreras aldrig: en åtkomsttoken, en Authorization-header, en cookie eller en query-sträng. En försignerad lagrings-URL visas till exempel aldrig i en händelse.

Läsa den

Med en token som har audit:read:

curl -sS -H "Authorization: Bearer $FFP_TOKEN" \
  "https://frem.sh/_app/api/v1/orgs/acme/access-log?action=download&type=npm&since=2026-10-01"

Resultaten kommer med de nyaste först. Skicka en sidas next-värde som cursor för att få nästa sida, och sluta när next är null. Cursorn är en keyset, så händelser som kommer in medan du bläddrar flyttar aldrig eller upprepar en rad. Filter: since, until, origin, action, decision, type, name, version, actor (ett login, eller anonymous) och ip. En sida rymmer upp till 500 händelser. Se API-referensen för hela formen.

Vilka sårbara versioner som hämtas

Hämtningsstatistiken räknar de lyckade nedladdningarna i den här loggen per paketversion och konsument, tillsammans med de CI-cacheträffar som räknas där i stället för att loggas, och kopplar dem till de säkerhetsmeddelanden som din paketpolicy använder. Den besvarar “vilka sårbara versioner hämtades de senaste 30 dagarna, och av vem” utan att du behöver bläddra igenom de råa händelserna, och run_id besvarar “vilka versioner hämtade det här bygget”.

Vidarebefordra den till ditt SIEM

Åtkomsthändelser kan levereras till en SIEM-endpoint i samma signerade kuvert som granskningshändelser. Åtgärden är registry.access.<action> (till exempel registry.access.download), och hash_chain är null eftersom åtkomsthändelser inte ingår i granskningsloggens hashkedja. Leveransen är avstängd som standard, eftersom nedladdningstrafiken är långt större än granskningstrafiken. Slå på den per endpoint med include_access_log:

curl -sS -X PATCH -H "Authorization: Bearer $FFP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"include_access_log": true}' \
  https://frem.sh/_app/api/v1/orgs/acme/siem/endpoints/$ENDPOINT_ID

En endpoints åtgärdsprefix gäller även för åtkomsthändelser. Till exempel vidarebefordrar registry.access.upload bara uppladdningar. Den CI-trafik som inte sparas som händelser (ovan) levereras inte heller.

I dataexporten

En dataexport innehåller access-log.ndjson med varje åtkomsthändelse som fremforge fortfarande har för organisationen, ett JSON-objekt per rad i samma form som API:t returnerar, och metadata/pulled-versions.ndjson med hämtningsstatistiken, där CI-cacheträffar räknas. Båda filerna omfattas av exportens signerade manifest.

Hur länge den sparas

Åtkomsthändelser sparas enligt organisationens access_log-inställning för lagring av bevis: 30 till 730 dagar. Om den inte är satt följer den lagringstiden för granskningsloggen (90, 180, 365 eller 730 dagar, inställd under Autentiseringspolicy → Lagringstid för granskningslogg; standard 90). Äldre händelser tas bort en gång om dagen. Så länge ett legal hold gäller tas ingenting bort.

Vem som kan se adresserna

Åtkomstloggen innehåller personuppgifter: dina användares inloggningsnamn och IP-adresser. API:t, SIEM-leveransen och exporten visar båda som de registrerades, eftersom det här är din organisations egen post. fremforges verktyg för personalen ser båda endast som nyckelbaserade pseudonymer. Loggrader som plattformen skriver för sin egen drift innehåller ingen av dem.

Begränsningar

  • Git clone och fetch, och läsningar via REST-API:t (/api/v1), är inte registry-anrop och finns inte i den här loggen än.
  • Borttagning av en paketversion via REST-API:t (DELETE /api/v1/packages/...) eller webbgränssnittet registreras inte här. De borttagningar som en registry-klient gör under /api/packages registreras.
  • Ett anrop som plattformen nekade innan registryt svarade, till exempel en uppladdning som avvisades av skannern för skadlig kod, har ingen autentiserad aktör och visas som anonymous.
  • Leveransen från registryt till loggen sker i omgångar varannan sekund eller var 500:e händelse. Om plattformen startas om mitt i en omgång kan händelserna från de sista sekunderna gå förlorade. Avsiktliga bortfall loggas och larmas på vår sida.