Naar de hoofdinhoud

Beveiligingsfuncties in één oogopslag

Alles wat fremforge levert, in één tabel die je snel doorloopt. Elke rij linkt naar de eigen pagina met de configuratie, de manier om af te wijken en de documentatie van de onderliggende tool.

fremforge is bewust transparant over de opensourcetools onder elke maatregel: klanten die onder BSI C5, ISO 27001, BaFin of door ENISA gereguleerde toetsing vallen, hebben het audittraject op toolniveau nodig, en we hebben liever dat je in onze broncode kunt grep’en dan dat je een black box moet terugontleden. Het onderscheid zit in de integratie (hooks, RBAC, auditketen, opslag in de EU, geen Microsoft, geen AWS), niet in de scanner.

Maatregelen bij het pushen van code

MaatregelWat het doetToolPer tenant in te stellen
Push-beschermingSecretscan vóór ontvangst (pre-receive); weigert commits met inloggegevens voordat ze in de git-geschiedenis komenGitleaks v8 (120+ patronen)Afwijkingsregels + omzeilen per patroon
BranchbeschermingRegels per branch: verplichte reviewers, statuscontroles, verplichte ondertekende commits, blokkeren van force-pushesForgejo nativeJa (per branch)
TweefactorauthenticatieTOTP voor elk gebruikersaccount; afdwingen van WebAuthn is beschikbaar op organisatieniveau (gebruikers registreren WebAuthn zelf op de beveiligingspagina van hun Forgejo-gebruikersinstellingen). Per organisatie af te dwingenForgejo native + eigen hooks voor afdwingingJa (afdwingen voor de hele organisatie, per gebruiker opt-in)
OIDC-MFA-verificatieControleer cryptografisch dat je IdP bij elke aanmelding MFA heeft bevestigd, via de OIDC-claim amr (RFC 8176). Vervangt het oude, door de operator bevestigde selectievakje “trust IdP MFA”: het token zegt ["pwd","mfa"], anders is het geen MFAEigen middleware voor claimcontroleBeleid voor vereiste amr per tenant
SSO-break-glassIs je IdP niet beschikbaar, verkeerd geconfigureerd of is de SSO-koppeling kapot, dan kunnen aangewezen eigenaren van de organisatie de toegang herstellen via een apart beheerde route met noodinloggegevens. Vastgelegd in de auditlogEigen ontwikkeling (door fremforge geschreven)Aangewezen eigenaren per tenant
Sleutelloos commits ondertekenen (sigstore / gitsign)Ondertekenen gebonden aan OIDC: je IdP-identiteit (Entra, Okta, Google Workspace, Authentik) ondertekent de commit via een Fulcio-certificaat van 10 minuten. Forgejo toont Verified by sigstore: <email> via <IdP>. Root-CA in DEW KMS van T Cloud Public (HSM volgens FIPS 140-2 Level 3, Duitsland). Fulcio op sign.frem.sh, TSA op tsa.frem.sh. Bewust geen Rekor / transparantielog: alleen tijdstempels verankerd door de TSA, zodat handtekeningen in geen enkele log van derden terechtkomenZelf gehoste Fulcio v1.8.5 + TSA op T Cloud Public eu-de, aan klantzijde gitsignOrganisatiebeheer → Toegestane OIDC-uitgevers + strengheidsniveau
Commits ondertekenen met een SSH-sleutelOnderteken commits met dezelfde SSH-sleutel die Forgejo voor pushen gebruikt. Het label “Verified” verschijnt native in de webinterface. Werkt naast sleutelloos ondertekenen; de beheerder van de organisatie stelt de strengheid inOpenSSH + allowedSignersFile van ForgejoPer gebruiker in te schakelen
Commits ondertekenen met GPGDe standaardroute git commit.gpgsign. Upload de publieke sleutel in je gebruikersinstellingen; Forgejo verifieert en toont het label “Verified”GnuPG + Forgejo nativePer gebruiker in te schakelen

Scannen op codekwaliteit en kwetsbaarheden

Deze scanners draaien centraal op de eigen scanners van fremforge, bij elke pull request en op de standaardbranch. Er is geen workflowbestand om in je repository’s te installeren. De resultaten staan onder Beveiliging › Bevindingen.

MaatregelWat het doetToolIn te stellen
SASTStatische analyse bij elke PR en op de standaardbranch, centraal uitgevoerd op de eigen scanners van fremforge: er is geen workflowbestand in je repo om te installeren of te onderhouden. Vindt injectie, XSS, hardgecodeerde secrets en gevaarlijke API’s in C, C++, C#, Go, Java, JavaScript en TypeScript, Kotlin, PHP, Python, Ruby, Rust, Scala, Swift en BashOpenGrep met GitLab sast-rules, de C/C++-regels van 0xdea en eigen regels van fremforgeBlokkeerniveau; je eigen OpenGrep-regels, die elk eerst op een eigen voorbeeld worden gecontroleerd
Secretscanninggitleaks bij elke pull request (de controle fremforge/secret-scan) en een wekelijkse doorzoeking van de volledige geschiedenis van elke repository; push-bescherming blokkeert secrets al bij het pushenGitleaksControle op pull requests aan of uit
IaC-scanningControles op verkeerde configuratie met trivy config (Dockerfile, Compose, Kubernetes, Helm, Terraform en meer) bij elke PR, als de controle fremforge/iac-scan met een eigen tabblad voor bevindingen, plus de eigen Rego-controles van je organisatie; blokkeert alleen op wat een PR toevoegt; bevindingen in het compliancerapport gegroepeerd per CIS-benchmark en NIS2-gebiedTrivyModus en drempel onder Beveiliging › Beleid › Scanners
Scannen van afhankelijkheden (OSV)Scan van afhankelijkheden op CVE’s/GHSA’s bij elke PR, centraal uitgevoerd op de eigen scanners van fremforge. Toont oplosbare CVE’s met de voorgestelde upgradeosv-scannerErnstdrempel
BereikbaarheidMarkeert elke bevinding in afhankelijkheden en images als bereikbaar, niet bereikbaar of onbekend, met het bewijs (bestand en regel, of de getroffen functie), en sorteert lijsten, Aanbevelingen en het overzicht daarop. Go: govulncheck op de binaries in je images. JavaScript en TypeScript: Jelly, op importniveau tenzij de advisory functies noemt. Python, Java en Kotlin: op importniveau, ook via andere pakketten, nooit unreachable. Niets wordt verborgen of genegeerd; wat een merge blokkeert, verandert niet, tenzij je daarvoor kiestgovulncheck, Jelly, importlezers van fremforgeOptionele SLA-vermenigvuldiger (1-4) voor niet-bereikbare bevindingen; optioneel “pull requests niet blokkeren op niet-bereikbare bevindingen”
Bekend misbruiktMarkeert bevindingen waarvan de CVE als misbruikt staat vermeld in de EU Vulnerability Database van ENISA of de KEV-catalogus van CISA: een label en een filter, gesorteerd vóór EPSS, nooit een verlengde SLA, AutoFix als eerste. Beide lijsten worden dagelijks ververstMirrors van ENISA EUVD + CISA KEV-
BeveiligingsfixesEén klik opent één pull request die een kwetsbare afhankelijkheid ophoogt naar de laagste versie die elke open advisory oplost (de ecosystemen op Ondersteunde ecosystemen), of de FROM-basis van een image ophoogt; Alles in deze repository herstellen per repository. Nooit automatisch samengevoegd. Optionele AI-fixes voor een korte lijst SAST-regels gebruiken alleen je eigen modelprovider en staan standaard uitGehoste Renovate; je eigen AI-provider voor SAST-fixesLimieten per repo en per organisatie; AI-fixes standaard uit
Fixes op basis van regelsFix-PR openen bij een secretbevinding verplaatst het inloggegeven naar een omgevingsvariabele (Go, Python, JavaScript, TypeScript); bij zes IaC-controles zet het de eigenschap op de veilige waarde. Een vaste regel, geen AI: er verlaat niets fremforge. Eerst op syntaxis gecontroleerd en opnieuw gescand, nooit automatisch samengevoegdgitleaks en Trivy, de scanners die de bevinding melddenLimieten per repo en per organisatie
Scannen van containerimagesDe centrale scanner van fremforge draait Trivy (geen installatiestap): trivy fs en trivy config bij elke PR, trivy image op elk image in je registry en elk image dat via de dependency proxy wordt opgehaald. Bevindingen staan onder Beveiliging › Bevindingen › Containerimages, gekoppeld aan het image en de commit. Een blokkeeractie voor images (none, warn, block_pull) geldt voor bevindingen op of boven de imagedrempel, standaard highTrivyBlokkeeractie, drempel en ignorebestanden
LicentiescanningLicentiedetectie met Trivy bij elke PR, centraal uitgevoerd op de eigen scanners van fremforge. Deelt de licentie van elke afhankelijkheid in een van 7 ernstcategorieën van het SPDX-beleid in (permissief → wederkerig → beperkt → verboden); blokkeert de merge bij bevindingen op of boven de ingestelde drempel. Te zien onder Beveiliging › Bevindingen › LicentiesTrivyBlokkeerniveau + SPDX-allowlist + negeren per bevinding
OpenSSF ScorecardWekelijkse score voor goede praktijken per repo. Geen workflow per repo: draait wekelijks op geïsoleerde platforminfrastructuur met een alleen-lezen bot per tenant met alleen-lezen toegang tot de repo; ongewijzigde repo’s worden overgeslagen, en alleen de score-JSON wordt bewaard. Toont tekortkomingen (branchbescherming, afdwingen van MFA, vastgepinde afhankelijkheden, dekking van code review) als kolom op de pagina RepositoriesscorecardWekelijkse cadans + overslaan bij ongewijzigde HEAD
Kwaadaardige pakkettenOSV-advisories MAL-* vergeleken met de SBOM van de standaardbranch van elke repository en met de taalpakketten in elk gepubliceerd containerimage, na elke push en dagelijks. Altijd critical; pulls van images met een open bevinding worden geweigerdosv-scanner + TrivyNegeren met reden en einddatum
PakketbeleidEén beleid per organisatie bepaalt welke pakketten uit de registry mogen worden gedownload: kwetsbaarheidsdrempels (ernst, CVSS, EPSS, fix beschikbaar), SPDX-licentielijsten, allow- en denylists met versiebereiken, en een minimumleeftijd. Uitzonderingen moeten door een tweede persoon worden goedgekeurd. Afdwingen weigert met 403, Schaduw (de standaard) legt vast; een bestand met bekende malware wordt in elke modus geweigerd. Containerimages: alleen schaduwSyft + osv-scannerModus, regels, afwijkingen per type, uitzonderingen
Malwarescan bij uploadsClamAV over Git-LFS-objecten, webbijlagen en pakketuploads. De dependency proxy scant opgehaalde pakketten en imagelagen met ClamAV als je organisatie dat inschakelt (standaard uit)ClamAV met signaturen van SaneSecurity, YARA-Forge Core en Linux Malware DetectAfwijken bij signaturen met bekende fout-positieven
Beveiligingspoort voor workflowsEen controle vóór ontvangst ontleedt elke gewijzigde workflow-YAML en weigert pushes die het volgende introduceren: docker://-verwijzingen naar registry’s die niet op de allowlist staan, gevaarlijke injectiepatronen met pull_request_target + script, niet-vastgepinde uses:-verwijzingen naar organisaties die niet worden gespiegeldEigen regels (door fremforge geschreven)Afwijkende allowlist voor docker-URI’s per tenant
IP-allowlistEén lijst per organisatie met toegestane CIDR-bereiken voor elk HTTPS-oppervlak: webbeheer, fremforge-API, webinterface van de repository, REST API van Forgejo, Git over HTTPS, LFS en package registries. Git over SSH valt erbuiten. Voorvertoning die alleen audit doet, en een break-glass van 24 uur voor eigenarenEigen regels (door fremforge geschreven)CIDR-lijst per tenant + schakelaar voor runners

Herkomst in de supply chain

MaatregelWat het doetToolIn te stellen
SBOM’sSBOM’s in CycloneDX 1.6 en SPDX 2.3, centraal gegenereerd bij elke PR (beide formaten worden bij het inlezen geaccepteerd). Een release publiceren koppelt de SBOM die al voor die commit bestaat aan de release, zonder opnieuw te scannen, dus een release-SBOM heeft geen build nodig en verschijnt direct. Op te vragen onder Beveiliging › Componenten › SBOM’sSyftBewaartermijn + release-refs
Ondertekende publicatieattestatieEen DSSE-envelop met in-toto-/SLSA-herkomst, aan serverzijde door fremforge gegenereerd bij de Forgejo-webhooks release.published / package: geen workflowbestand in je repo’s. fremforge berekent de hash van elk bestand en ondertekent met een Ed25519-sleutel van het platform (keyid fremforge-slsa-builder-v1, builder https://frem.sh/runner-controller/v1), naast het bestand geüpload als <asset>.intoto.jsonl, plus een tweede, sleutelloze handtekening tegen de zelf gehoste Fulcio + RFC3161-TSA van fremforge als <asset>.sigstore.json. Geen publieke Sigstore, geen Rekor, geen transparantielog. Verifieer lokaal met de gepubliceerde trust root; zie SLSA-herkomst. Bewust niet als SLSA-niveau beschreven: het bevestigt wat er is GEPUBLICEERD, niet hoe het is gebouwd; de herleiding en wat ontbreekt staan in SLSA-herkomstEigen ondertekenaar aan serverzijde (Node stdlib crypto, Ed25519 DSSE) + zelf gehoste Sigstore—
Images ondertekenen en verifiëren met cosignDe centrale pull-request-controle fremforge/cosign-verify verifieert de handtekeningen van op digest vastgepinde images, afkomstig van de eigen workflows van je organisatie via de Sigstore van fremforge of van de publieke Sigstore, en meldt wanneer controleren niet lukte. De controle is informatief. Het handtekeningbeleid voor images kan bij het pullen ook ondertekende images eisen, met de identiteiten die je vertrouwt. De CI van de klant ondertekent met haar eigen OIDC-identiteit: geen langlevende ondertekeningssleutelscosign + zelf gehoste FulcioHandtekeningbeleid (schaduw of afdwingen)
Workflows vastpinnenEen dagelijkse scan toont elke uses: in .forgejo/workflows/, .gitea/workflows/ en .github/workflows/ die naar een tag of branch wijst in plaats van naar een commit-SHA van 40 tekens, en elk docker://-stapimage waarnaar met een tag in plaats van een digest wordt verwezen; met één klik open je een pull request die de actions vastpintEigen ontwikkeling (door fremforge geschreven)—
Mirror voor actionsuses: actions/checkout@v4 verwijst naar frem.sh/actions/checkout: een native Forgejo-pull-mirror van upstream, elke 8 uur gesynchroniseerd. Geen ophalen van github.com tijdens de build op het kritieke pad van de klant. Gespiegelde organisaties zijn onder meer actions, docker, pnpm, aws-actions, azure, google-github-actions, peter-evans, softprops, sonarsource, step-security, dornyNative pull-mirror van Forgejo (actions alleen uit de EU opgehaald)(Beheerd door de operator; transparant voor klanten)
Compatibiliteit met de MarketplaceDe 20 meestgebruikte actions uit de GitHub Marketplace zijn gecontroleerd en werken ongewijzigd op fremforge: GITHUB_TOKEN, GITHUB_SHA, GITHUB_REF, GITHUB_API_URL enzovoort worden allemaal identiek gevuldForgejo Actions-runtime—
Updates van afhankelijkhedenVersie-updates door Renovate voor elke aangemelde organisatie, elke nacht, plus Nu uitvoeren. Vindt verouderde afhankelijkheden, actionversies en basisimages van containers. Repository’s kunnen zich afmeldenRenovate + eigen orkestratieAfmelden per repo

Isolatie tijdens uitvoering (gehoste CI-runners)

MaatregelWat het doetToolIn te stellen
Sandbox van de gehoste runnersEén commit = één eigen VM = één kernel. Het platform start per commit een nieuwe, kortlevende ECS-VM, registreert forgejo-runner --ephemeral zodat elke registratie door één taak wordt verbruikt, en vernietigt de VM zodra de jobs van die commit klaar zijn. Twee klanten, en twee commits, delen nooit een kernel; jobs van dezelfde commit kunnen de VM delen, dus behandel een pipeline als één vertrouwensdomein. Elke VM heeft een eigen ENI + Security Group (netwerkisolatie) en geen IAM-agency (geen toegang tot de platform-API van binnenuit). Een vangnet buiten de normale route ruimt verweesde VM’s op waarvan de runner zich nooit registreerde of nooit klaar kwam. Hetzelfde model als de gehoste runners van GitHub en GitLabT Cloud Public ECS + ENI per VM + forgejo-runner (act_runner)VM-flavor (plafond voor CPU/RAM), limiet voor gelijktijdigheid per tenant
Limiet voor gelijktijdige jobs per tenantGegarandeerd 2 gelijktijdige jobs per gebruiker (minimaal 10, maximaal 60), en tot 60 als er capaciteit vrij is (gehost bij GitHub: Free 20, Pro 40, Team 60). Hoger op aanvraagAfdwinging op platformniveauOverschrijving per tenant
Pool van runnerminutenseat_cap × 1000 min/month. Tenants in een proefperiode hebben een vaste pool van 500 min; zie Facturatie. Tenants met ingeschakelde overschrijding blijven draaien; bij anderen wordt het toewijzen geweigerdControle vóór toewijzing tegen gemeten gebruikOverschrijving van de limiet per tenant
EgressproxyKlantworkflows bereiken het publieke internet via de egressproxy voor runners (weigert alleen SSRF, laat CGNAT toe: net als de gehoste runners van GitHub)Eigen proxy (door fremforge geschreven, op basis van Hono)—
Looptijd van een jobStandaard 60 min per job, harde bovengrens van 360 min. Een aparte opruimer verwijdert verweesde VM’s, met een absolute grens van 6 u 10 minOpruimer buiten de normale routetimeout-minutes per stap

Secrets en toegangsbeheer

MaatregelWat het doetToolIn te stellen
DeploysecretsVersleutelde secrets per omgeving. In rust AES-256-GCM met een MASTER_ENCRYPTION_KEY in DEW KMS. Alleen ontsleuteld binnen de runner-VM die ze nodig heeft. Sleutelrotatie ondersteunt een venster met twee sleutels (huidige + vorige) voor rotatie zonder onderbrekingEigen ontwikkeling (Node crypto) + afbakening per omgeving + DEW KMSPer omgeving / per repo / per organisatie
RBAC en afbakening per tenantDe native RBAC van Forgejo + de tenantlaag van fremforge; alle endpoints van de platform-API dwingen de tenant_id uit de JWT af, geen gegevenslekken tussen tenants. Organisatiebeheer → LedenForgejo + middleware van de fremforge-APIGranulariteit per team
OIDC single sign-onDe voorkeursroute voor een IdP. Koppel Okta, Entra, ADFS, Google Workspace, Authentik, Keycloak, Auth0 (elke OpenID Connect-provider) voor inkomende federatie. Domeinverificatie, just-in-time aanmaken van gebruikers, groepen koppelen aan teams. In te stellen onder Organisatiebeheer → SSO → Auth-bronnenNative OIDC-auth-bron van ForgejoIdP-configuratie per tenant
SAML 2.0 single sign-onNog niet beschikbaar. Koppel Entra ID of ADFS in plaats daarvan via OIDC——
Gebruikers aanmaken met SCIM 2.0Push gebruikers vanuit je IdP naar je fremforge-organisatie via SCIM 2.0. Authenticatie met een bearer-token per tenant, een rotatievenster met twee tokens, idempotente CRUD op Forgejo-gebruikers. Werkt met elke IdP die SCIM ondersteuntEigen API-endpoints onder /<slug>/scim/v2/*SCIM-token per tenant
SSH-CASSH-toegang tot git gebruikt een door een CA ondertekend certificaat, geen losse sleutelvingerafdrukken. Certificaat per gebruiker met TTL; in te trekken via de beheerinterface van de organisatieOpenSSH-CA + certificaatuitgifte beheerd door fremforgeTTL + intrekken per gebruiker
AuthenticatiebeleidBundel schakelaars voor afdwinging per organisatie: sleutels in hardware (alleen WebAuthn, geen TOTP), maximale levensduur van PAT’s (onder de platformstandaard van 90 dagen), ondertekende commits verplicht (niet-ondertekende pushes blokkeren), SSH uitgeschakeld (alleen HTTPS), 2FA verplicht, alleen aanmelden via SSO (lokale Forgejo-gebruikersnaam/-wachtwoord blokkeren). Spiegelt het oppervlak voor enterprisebeleid van GHEC. Elke schakelaar schrijft bij een wijziging een auditgebeurtenisGedragen patches op Forgejo + hooks voor afdwinging van fremforgeBeleidsbundel per tenant
Allowlist voor e-maildomeinenAllowlist per organisatie met patronen voor e-mailhostnamen. Is die ingeschakeld, dan kunnen leden alleen adressen in de stijl van @acme.com toevoegen die overeenkomen met de ingestelde patronen. Sluit bij forensisch onderzoek de route “commits claimen als attacker@arbitrary-domain.com” af. Bestaande e-mailadressen worden niet automatisch verwijderd; aanmelden via OIDC is uitgezonderd (de IdP staat ervoor in). Patronen ondersteunen exacte vormen en *.subdomainEigen regels + Bunny-edge-intercept op /user/settings/account/emailPatronen per tenant + vlag voor afdwingen
WorkflowsecretsActions-secrets op organisatie- en repositoryniveau, in elke CI-job als omgevingsvariabelen geïnjecteerd. Forgejo slaat ze versleuteld op; het fremforge-beheer stuurt CRUD door met auditgebeurtenissen (de waarde wordt nooit in de fremforge-database of de auditlog opgeslagen). Een secret overschrijven met hetzelfde formulier is de rotatierouteNative secrets van Forgejo + beheerproxy van fremforgePer organisatie / per repo / per omgeving
Workflow-OIDC voor cloudauthenticatieRunner-VM’s krijgen per job een nieuwe OIDC-JWT met aud=fremforge. Trust policies in de cloud van de klant gebruiken die om kortlevende inloggegevens in te ruilen (geen langlevende AWS-sleutels, JSON-bestanden van GCP-serviceaccounts of Azure-clientsecrets in workflowsecrets)Eigen OIDC-issuer, ondertekend met de runner-OIDC-sleutel van fremforge (rotatie elke 180 d; handmatig, automatische rotatie nog niet uitgerold)—
Authenticatie voor agentsDrie patronen aan de kant van de IdP voor niet-menselijke aanroepers: (1) Directe JWT-bearer van de IdP van de klant: gebruik een JWT van een Entra-workload-identity, een Okta-serviceaccount of een Google-serviceaccount rechtstreeks als Authorization: Bearer op elk /api/v1/*-endpoint; (2) RFC 8693-tokenuitwisseling + OBO: POST /_app/api/v1/auth/token-exchange accepteert subject_token en optioneel actor_token; de persoon is de actor in de audit en de agent een detail van de rij (fields.agent), zonder eigen agentidentiteit; (3) RFC 6749 client_credentials: POST /_app/api/v1/oauth/token voor apps zonder IdP. Audiencebinding per tenant (https://frem.sh/<slug>), claimcontroles per bron (tid/hd), een UNIQUE op databaseniveau die voorkomt dat twee tenants dezelfde issuer claimen voor directe bearerEigen ontwikkeling (auth_sources + oauth_clients + pijplijn voor tokenuitwisseling met jose)Opt-in per bron; scopelimiet per client

DevOps-observeerbaarheid

MaatregelWat het doetToolIn te stellen
DORA-dashboardDe vier standaard-DORA-metrieken (Deployment frequency, Lead time for changes, Change-failure rate, MTTR), berekend over een voortschrijdend venster van 30 dagen uit de deploygebeurtenissen die voor je tenant zijn vastgelegd. Ingelezen via de Forgejo-webhook release plus een handmatige POST /_app/api/v1/dora/deployments voor workflows die geen releases taggen. Te zien onder Organisatiebeheer → DORAEigen ontwikkeling (door fremforge geschreven, op de tenantdatabase)Voortschrijdend venster + handmatig inlezen
BeveiligingsoverzichtBeveiliging › Overzicht: open bevindingen per scanner, met links naar elk tabblad, en de checklist voor de inrichtingEigen aggregator—
Paneel runnergebruikAantal runnerminuten per maand + tabel met de duur per job onder Organisatiebeheer → Bouwen en uitrollen → CI-gebruik. Voedt de factuurregels via de tabel metering_eventsEigen ontwikkeling (aggregatie van runner_jobs)—

Houding ten opzichte van AI

MaatregelWat het doetToolIn te stellen
Eigen AI: toegang voor agentsfremforge is AI-agnostisch. Claude Code / Cursor / Windsurf / Codex CLI / Aider van de klant werken met hetzelfde Git- en REST-oppervlak als mensen (OpenAPI-specificatie, machineleesbaar). Samen met Authenticatie voor agents (directe JWT-bearer van de IdP, RFC 8693-tokenuitwisseling + OBO, RFC 6749 client_credentials) authenticeren agents zich als volwaardige principals, zonder een PAT van een mens te lenen. Geen AI-product dat aan de forge vastzit, geen agentfuncties die een bepaalde leverancier vereisenGit + REST volgens de standaardenBeheerd door de klant
AI-integraties (BYOK)Organisatiebeheer → AI-integraties: registreer de sleutel van je eigen AI-leverancier (Anthropic, OpenAI, Mistral en andere). Maakt mogelijk: AI-review van PR’s (stelt reviewcommentaar op de diff op), AI-uitleg bij Renovate (samenvattingen van changelogs in begrijpelijke taal bij PR’s die afhankelijkheden ophogen), en de gateway /_app/api/v1/orgs/<slug>/ai/complete voor LLM-aanroepen vanuit workflowsEigen gateway (door fremforge geschreven)Leverancier + sleutel per organisatie

Compliance en audit

MaatregelWat het doetToolIn te stellen
AuditlogElke handeling die de status wijzigt (push, rolwijziging, secret aangemaakt, runneroverschrijving, factuurwijziging) wordt vastgelegd met actor + tijdstip + voor/na. Bewaring in twee lagen: een doorzoekbare hete laag (90 / 180 / 365 / 730 dagen, per tenant in te stellen) + een archief met cryptografische keten van 3 jaar in OBS WORM van T Cloud PublicEigen alleen-toevoegen-opslag (tabel audit_events)Bewaartermijn per tenant
AuditketenAuditlog met hashketen + lineaire hashketen die elke 2 min in OBS WORM van T Cloud Public wordt verankerd. Een verificatie-cron controleert de integriteit van de keten elk uur + een volledige doorloop elke 30 min. Klanten kunnen verifiëren dat “er achteraf geen gebeurtenis is verwijderd of gewijzigd”Eigen ontwikkeling (door fremforge geschreven, afgestemd op BSI C5)—
SIEM-streamingRealtime stroom van auditgebeurtenissen naar een endpoint van de klant (Splunk HEC, Sentinel, ELK, OpenSearch, generieke HTTPS-webhook). Relay in de EU, er verlaten geen gegevens de regio eu-de. De gezondheid van het endpoint per tenant is zichtbaar voor de operator en de tenantbeheerderEigen doorstuurder + tabel siem_endpointsEndpointconfiguratie per klant
Gegevensexport (overdraagbaarheid onder de AVG)Selfservice-export van tenantgegevens: repo’s (als git-bundles), issues, pull requests en releases (NDJSON), pakketinventaris, scanbevindingen, status van het pakketbeleid, ondertekende attestaties, SBOM’s van repository’s en containerimages, auditgebeurtenissen (NDJSON), met een DSSE-ondertekend manifest. Gedownload via een ondertekende OBS-URL die 7 dagen geldig is. Vereist voor overdraagbaarheid volgens art. 20 AVG + offboardingEigen exporteurOp elk moment te starten
LevenscyclusbeleidAutomatisering van bewaring en verwijdering per tenant: archiveren van verouderde repo’s, gedrag bij de limiet van runnerminuten, bewaartermijn van de auditlog, respijtperiode bij opschorting van een tenant, SLA voor het wissen van gegevens aan het einde van het contractEigen ontwikkeling (tabel tenant_lifecycle)Beleid per tenant
Repo-mirroring (inkomende migraties)Spiegel repo’s van klanten van GitHub, GitLab, Bitbucket of elke andere Git-host naar fremforge, met authenticatie via inloggegevens + periodieke synchronisatie. Gebruikt tijdens gefaseerde migraties; de mirror kan weg zodra de overstap klaar isNative pull-mirror van Forgejo + beheerproxy van fremforgeBron + interval per repo
MeldingsvoorkeurenRoutering van gebeurtenissen voor de hele organisatie: welke auditgebeurtenissen mail/webhook/SIEM opleveren, welke rollen bij Critical-bevindingen worden opgeroepen, escalatiecontacten bij factuurgebeurtenissenEigen ontwikkeling (tabel notification_preferences)Routering per tenant
Melden van kwetsbaarhedensecurity.txt gepubliceerd, security@frem.sh met een SLA van 24 u voor ontvangstbevestiging, publieke bedankpagina, beleid zonder rechtszaken bij onderzoek te goeder trouw——
Fix-by-SLASLA-label per organisatie naast elke open bevinding. Standaarddeadlines (Critical 7 d / High 30 d / Medium 90 d / Low geen), per tenant aan te scherpen. Verankerd in NIST SP 800-40r4Eigen ontwikkeling (door fremforge geschreven)Aanscherping per tenant

Wat we uitdrukkelijk niet doen

Wat we niet doenWaarom
Geen Microsoft-voetafdruk (geen GitHub, geen Azure AD, geen Office 365, geen Defender, geen GHAS CodeQL)Europese soevereiniteit + Schrems II; zie trust
Geen Sigstore / Fulcio / Rekor die in de VS wordt gehost in het verificatiepadIdem. fremforge draait een eigen Fulcio + TSA op T Cloud Public eu-de, met de root-CA in DEW KMS (HSM volgens FIPS 140-2 Level 3, Duitsland). Geen publieke Sigstore, geen Rekor / transparantielog: bewust alleen tijdstempels van de TSA
Geen afhankelijkheid van AWS, GCP of een andere door de VS gecontroleerde cloud op het kritieke pad van het platformIdem
Geen lettertypen van derden via een CDN (Google Fonts enz.)Zelf gehost op www.frem.sh/fonts/ via de Europese edge van Bunny
Geen propriëtaire scanners van derden: elke scanner is open source of van fremforge zelf, en elke regelset, advisorydatabase en bron van malwaresignaturen erachter staat met naam en licentie in de stuklijstHet audittraject van de klant vereist transparantie met toolnamen
Geen langlevende inloggegevens van serviceaccounts in klantworkflowsAlleen OIDC voor cloudauthenticatie; langlevende sleutels zijn een optionele, verouderde route

Transparantie over tools: de volledige stuklijst

Heb je dit nodig voor een RFP, een BSI C5-audit of een interne beveiligingsreview, dan staat de gezaghebbende lijst, met versies, bronnen en de platformcomponenten, op docs.frem.sh/security/bill-of-materials/. De tabel hieronder is een beknopte selectie.

LaagToolWaar gebruiktLicentie
Kern van versiebeheerForgejo v15Repohosting, code review, runnerprotocol van ActionsGPLv3
CI-runnerbinaryforgejo-runner (act_runner) v13.2.0Kortlevende ECS-VM per jobMIT
SecretscanningGitleaks v8Pre-receive-hookMIT
SASTOpenGrep v1.21Analyse bij een PRLGPLv2.1
CVE-scanning van containersTrivyCI van de klant + ingebakken in het runner-imageApache 2.0
Scannen van afhankelijkhedenosv-scannerAnalyse bij een PRApache 2.0
SBOM-generatieSyftWorkflow bij releasetagsApache 2.0
Images ondertekenen + verifiërencosignControle bij het pullen, en de informatieve pull-request-controle fremforge/cosign-verifyApache 2.0
Sleutelloos code ondertekenen: CAFulcio v1.8.5 (Helm-chart 2.9.0)Zelf gehost op T Cloud Public eu-de op sign.frem.shApache 2.0
Sleutelloos code ondertekenen: TSASigstore TSA (timestamp authority)Zelf gehost op T Cloud Public eu-de op tsa.frem.shApache 2.0
gitsign aan klantzijdegitsignGit-client van de klant; commits ondertekenen gebonden aan OIDCApache 2.0
Ophogen van afhankelijkhedenRenovateGehoste bot, cron elke 15 min, afmelden per repoAGPLv3
Images bouwen (rootless)kanikoContainerbuild in klantworkflowsApache 2.0
MalwarescanningClamAVScan vóór ontvangst + LFS-uploadGPLv2
Score voor goede praktijken van OpenSSFscorecardWekelijks per repoApache 2.0
CDN + WAF van het platformBunny CDNEdge in de EU, geen Cloudflare/Fastly(Leverancier: gevestigd in de EU, geen subverwerker in de VS)
CloudplatformT Cloud Public (Deutsche Telekom)Rekenkracht, opslag, netwerk, database(Leverancier: uitsluitend regio eu-de)
E-mail (transactioneel)Lettermint (NL)Authenticatiemails, facturen, meldingen(Leverancier: EU)
Mailboxmailbox.orgOperationele mailbox(Leverancier: EU)
BetalingenMollie (NL)Facturatie(Leverancier: EU)
BoekhoudingDinero (DK)Uitgifte van facturen(Leverancier: EU)

Elke leverancier op deze lijst is contractueel in de EU gevestigd, zonder subverwerker in de VS in het gegevenspad. Zie de trustpagina voor de volledige verwerkersovereenkomst en de keten van subverwerkers.

Roadmap (op basis van vraag)

FunctieStatusAanleiding
Eigen KMS voor MASTER_ENCRYPTION_KEY (een door de klant geleverde DEW-CMK in het eigen T Cloud Public-account van de klant)OntworpenEerste klant tekent
SLSA-buildherkomst (vastleggen van de digest van de output tijdens de build, zodat de ondertekende verklaring naar een echte buildrun verwijst: de voorwaarde om enig SLSA-niveau te claimen; aan beide clausules van Build L3 wordt al voldaan)AfgebakendVraag van klanten
MCP-ondertekening + verificatie voor de supply chain van AI-agentsOntworpenIndustriestandaard wordt definitief