Migrering af repos med secrets i historikken
fremforge kører en gitleaks-pre-receive-hook på hvert push, også det første spejl-push, der bringer en kundes historik ind i en fremforge-organisation. Hvis kilderepoet har secrets i en hvilken som helst gammel commit (en gammel .env, en lækket API-nøgle, en privat SSL-nøgle osv.), fejler import-pushet, og migreringen går i stå.
Denne side beskriver de to understøttede muligheder. Mulighed A er den anbefalede vej for de fleste teams; mulighed B er en sidste udvej.
Mulighed A: rotér secretet og omskriv historikken (anbefales)
Bedst når:
- Det lækkede secret er ægte (API-nøgle, privat SSH-nøgle, certifikat, adgangskode). Det skal gøres ugyldigt, uanset hvor repoet ligger: så længe det ligger i Git-historikken hos en hvilken som helst vært, er det eksponeret.
- Teamet kan bruge omkring en time på at omskrive historikken og force-pushe til kilden.
Fremgangsmåde:
- Rotér først det lækkede secret. Før du rører Git: skift API-nøglen, tilbagekald SSH-nøglen, rotér certifikatet. Det lækkede secret skal være ugyldigt, før historikken omskrives; så er værdien harmløs, selv hvis omskrivningen ikke fanger alt.
- Find den eller de berørte commits. gitleaks-outputtet fra fremforges importforsøg angiver reglen og commit-SHA’en. Sørg for, at du ved, hvilket secret og hvilke commits det drejer sig om.
- Omskriv historikken med
git filter-repo. (upstream-dokumentation)# Install: brew install git-filter-repo (or pip install git-filter-repo) # Verify upstream is clean: git clone --mirror <source-url> repo.git cd repo.git # Replace the secret value across history (string-replace shape): echo 'literal:AKIAEXAMPLE12345===>REDACTED' > replace.txt git filter-repo --replace-text replace.txt # OR: drop the file containing the secret across history: git filter-repo --invert-paths --path path/to/leaky/file - Force-push den omskrevne historik til kilderepoet først.
- Det er omskrivningen hos kilden, der gør rettelsen varig. Hvis du kun pusher den omskrevne historik til fremforge, har en angriber, der klonede kilden før omskrivningen, stadig den lækkede værdi.
- GitHub:
git push --force-with-lease --mirror - GitLab og ADO: det samme. Begge afviser som standard force-push til beskyttede branches; slå beskyttelsen midlertidigt fra, push, og beskyt igen.
- Kør migreringen efter den almindelige fremgangsmåde, se GitHub / GitLab / Azure DevOps.
- Kontrollér efter importen, at fremforges gitleaks-log viser nul blokeringer for migrerings-pushet.
Forbehold:
- Forks og kloner indeholder stadig den oprindelige historik. Der er ingen måde at få fat i alle kloner på, og det er derfor, trin 1 (rotér secretet først) er det trin, det hele hviler på.
- En omskrivning af historikken ødelægger alle åbne PR’er, MR’er og branches i kilden. Aftal det med teamet, før du trykker enter; nogle værter lukker PR’er pænt ved rebase, andre viser dem som “merged in N+1 commits”.
- Integriteten af tags og signaturer går tabt: et signeret tag, der peger på en omskrevet commit, er ikke længere gyldigt. Tag igen efter omskrivningen.
Mulighed B: start fra et tomt repo, og push kun den seneste commit (sidste udvej)
Bedst når:
- Kildens historik er for indviklet til at blive omskrevet rent.
- Teamet er villigt til at give afkald på al blame- og log-historik; kun den nuværende tilstand betyder noget.
- Typisk for arkiverede projekter, der spejles “til opbevaring” og ikke udvikles aktivt.
Fremgangsmåde:
- Klon kilderepoets seneste træ (en hvilken som helst branch) til en arbejdsmappe.
rm -rf .git && git init && git add . && git commit -m "Initial import: <source-url>@<commit-sha>".- Push det nye repo med én commit til fremforge efter den almindelige fremgangsmåde.
- Tilføj en NOTES.md eller et link i CHANGELOG, der peger tilbage til kilden, til teammedlemmer, der har brug for hele historikken.
Hvad du mister:
- Al historik i
git blame/git log. - Alle gamle diffs fra PR’er og MR’er (de bliver hos kildeværten, indtil du sletter den).
- Alle gamle commit-signaturer.
Valget mellem de to
| Spørgsmål | Mulighed A | Mulighed B |
|---|---|---|
| Er secretet stadig gyldigt? | rotér først | ikke relevant |
| Skal historikken bevares? | omskrevet | kasseret |
| Ét push? | ja | ja |
| Fortsætter nyt arbejde i samme repo? | ja | ja |
| Findes der stadig forks/kloner med lækket? | kun en restrisiko, hvis det ikke er roteret | ikke relevant (historikken er ikke i fremforge) |
| Kræver det en handling fra en operatør? | nej | nej |
Vælg A, medmindre der er en tungtvejende grund imod.
Relateret
- GitHub-migrering · GitLab-migrering · Azure DevOps-migrering
- pre-migration-check.sh: bladrer gennem kildens repos, krydstjekker kompatibiliteten af Marketplace-actions og viser konfigurationen af webhooks, branch-beskyttelse og pipelines. Det scanner IKKE for secrets i historikken (det er gitleaks’ opgave, kørt lokalt som beskrevet ovenfor)
- Sikkerhed og forsyningskæde: den gitleaks-hook, denne side handler om