1. Classificeren wat de berekening beschrijft en wat toegang geeft
Begin met de informatie die je programma daadwerkelijk gebruikt. De batchgrootte, de modelnaam en de verwerkingsmodus beschrijven een experiment. Een token dat een download autoriseert of een sleutel die opslag opent, geeft toegang. De eerste set moet uitlegbaar zijn; de tweede moet alleen beschikbaar blijven waar dat nodig is.
De grens blijkt niet alleen uit variabelenamen. Een pad kan een klant onthullen, een URL kan een identificatie bevatten en een kleine dataset kan vertrouwelijk zijn. Beoordeel dus ook de inhoud van de deelbare parameters. De configuratie publiceren en al zijn absolute paden publiceren zijn niet dezelfde beslissing.
De tabel biedt een werkclassificatie. Ze beschrijft niet de services die op een Kernodeck-machine zijn geïnstalleerd. Bepaal voor je project wie elk element mag lezen, op welk moment en in welke kopie; laat die beslissing niet aan de laatste export van een notebook.
Scroll door de tabel om alle kolommen te lezen.| Element | Rol | Voorgestelde verwerking |
|---|---|---|
| Batchgrootte, modus, drempel | Parameters van de berekening | Versioneer en valideer hun waarden. |
| Token, privésleutel, wachtwoord | Toegangsmiddelen | Afzonderlijk aanleveren en niet in de uitvoer opnemen. |
| Pad, URL, corpus-identificatie | Mogelijk gevoelige context | Controleer voordat je deelt; geef de voorkeur aan een logische identificatie. |
| Resultaten en logboeken | Bewijzen van uitvoering | Kies de velden die bewaard blijven en controleer de map die wordt verzonden. |
2. Kies één enkele prioriteitsregel
Een parameter die in de code, een bestand en een opstartoptie voorkomt, wordt dubbelzinnig als niemand weet welke wint. Stel een eenvoudige regel vast, bijvoorbeeld: gedocumenteerde standaardwaarden, dan het configuratiebestand, dan de openbare opties van de opdracht. Dat is een contract van je applicatie, geen universele prioriteit die Python levert.
Valideer na deze resolutie. Weiger een onbekende sleutel zodat een fout zoals batch_szie niet stilzwijgend door een standaardwaarde wordt vervangen. Maak onderscheid tussen een geheel getal, een tekenreeks die een geheel getal voorstelt en een boolean. Voeg vervolgens de nuttige beperkingen toe: positieve waarde, toegestane modus, coherente combinatie van parameters.
Sla ten slotte een effectieve configuratie op die beperkt is tot de toegestane velden. Ze verklaart wat het programma heeft gebruikt, ook wanneer een optie het bestand heeft vervangen. Verkrijg dat document niet door het hele configuratieobject te serialiseren voordat je er enkele bekende wachtwoorden uit haalt: kies eerst wat erin mag staan.
3. Werk een voorbeeld uit zonder een service te verbinden
Het volgende voorbeeld is didactisch en wordt niet uitgevoerd. Het beschrijft een fictieve bewerking voor het produceren van vectoren met een batch van acht elementen. Het woord embedding is hier een interfaciekeuze; er wordt geen model geladen en er wordt niet verondersteld dat een GPU-afhankelijkheid is geïnstalleerd. Er is geen geheim nodig om dit bestand te lezen of te valideren.
De standaardmodule tomllib, beschikbaar vanaf Python 3.11, leest het TOML-formaat. Ze zet de waarden van het document om in Python-objecten; ze beslist niet dat een batch van nul in je applicatie verboden is. De domeincontrole blijft expliciet na het lezen.
Dit fragment accepteert precies twee sleutels en twee modi. Om het in een project te gebruiken, sluit je vervolgens de argumenten, de foutafhandeling en de uitvoerpaden aan. De verwachte afwijzingen zijn gemakkelijk te beredeneren: batch_size op nul, batch_size als tekenreeks of het toevoegen van een sleutel token. Dit zijn gevallen die je bij jezelf moet controleren, geen resultaten die hier zijn gemeten.
batch_size = 8
mode = "embedding"import tomllib
with open("config.toml", "rb") as source:
config = tomllib.load(source)
if set(config) != {"batch_size", "mode"}:
raise ValueError("CONFIG_KEYS")
if type(config["batch_size"]) is not int or config["batch_size"] <= 0:
raise ValueError("CONFIG_BATCH_SIZE")
if config["mode"] not in ("embedding", "classification"):
raise ValueError("CONFIG_MODE")
public_config = {
"batch_size": config["batch_size"],
"mode": config["mode"],
}4. Lever het geheim alleen aan de stap die het nodig heeft
Een stap die op een reeds aanwezig bestand werkt, mag geen downloadtoken vereisen. Vraag het geheim op aan de grens waar toegang nodig wordt. Als die stap is ingeschakeld maar de toegang ontbreekt, stop hem dan met een melding die het verwachte kanaal aangeeft, zonder de ontvangen waarde te tonen of het hele verzoek te kopiëren.
Het kanaal hangt af van de beschikbare omgeving: secretmanager, bestand met inloggegevens met beperkte toegang of een injectiemechanisme dat uw organisatie voorziet. Een omgevingsvariabele kan als interface dienen, maar blijft gegevens die voor het proces toegankelijk zijn en in diagnostiek kunnen opduiken. Verwar gemak van injectie niet met volledige bescherming.
Beperk de toegang tot het nuttige bereik en voorzie in vervanging. Een verzoek om softwarevoorbereiding garandeert niet dat er een secretmanager aanwezig is. Controleer welk mechanisme daadwerkelijk beschikbaar is voordat u uw start eromheen bouwt, en vermijd vervolgens het geheim door te geven aan subprocessen die het niet nodig hebben.
5. Een nuttig logboek ontwerpen zonder de invoer te kopiëren
Definieer enkele gebeurtenissen: configuratie geaccepteerd, bestand gecontroleerd, partitie voltooid, uitvoer gevalideerd. Koppel er een uitvoerings-id, een stap en een teller aan. Een fout CONFIG_BATCH_SIZE volstaat om de betreffende regel terug te vinden; die hoeft niet het volledige bestand te bevatten.
OWASP raadt aan onder meer wachtwoorden, toegangstokens en sleutels uit logboeken te weren. Pas deze regel ook toe op exceptions, objecten die voor debugging worden getoond en celuitvoer. Maskering die pas op het laatste scherm gebeurt, haalt niet weg wat al in een bestand of schermafbeelding is geschreven.
Om een incident te delen, stelt u een kleine selectie samen: nuttige versies, toegestane parameters, de fout en een synthetisch voorbeeld dat het probleem reproduceert. Vermijd het automatisch archiveren van de hele map. Lees ook URL's, headers, paden en regels rond de fout na; een ogenschijnlijk onschuldige melding kan omringd zijn door gevoelige gegevens.
6. De scheiding verifiëren voordat u deelt
Bereid drie tests voor: geldige configuratie zonder externe stap, ongeldige configuratie en een stap die een ontbrekende toegang vereist. De eerste moet tot zijn functionele grens kunnen komen zonder onnodig geheim; de andere twee moeten verschillende fouten geven. Controleer ook dat een publieke wijziging van de batchgrootte in de effectieve configuratie zichtbaar wordt.
Om uw deelprocedure te controleren, gebruikt u een duidelijk fictieve sentinelreeks zonder toegangsmachtiging. Laat die tijdens een geïsoleerde oefening op dezelfde plaats als een geheim doorstromen en zoek er vervolgens naar in logboeken, exports en geselecteerde bestanden. Het ontbreken ervan is een beperkte controle van dat traject, geen bewijs dat alle lekken onmogelijk zijn.
Voeg de gepaste privébestanden toe aan uw Git-uitsluitingen, maar controleer ook bestanden die al worden gevolgd. De documentatie van Git vermeldt dat gitignore betrekking heeft op niet-gevolgde bestanden; een patroon toevoegen haalt een al geregistreerd geheim niet weg. Onderzoek wat u gaat doorgeven, niet alleen de regels die het zouden moeten uitsluiten.
7. Reageren op een verspreiding en een bruikbaar spoor bewaren
Als een toegang is blootgesteld, stop dan met het hergebruiken ervan en laat hem intrekken of vervangen bij het systeem dat hem heeft verstrekt. Een regel uit het huidige bestand verwijderen maakt eerdere kopieën niet onschadelijk. Identificeer de betrokken locaties om weg te halen wat kan en om de omvang van de verspreiding te begrijpen.
Uw reproduceerbare map kan vervolgens de naam van het gebruikte kanaal en de toegestane parameters bewaren, zonder het geheim zelf te bewaren. Een toekomstige start vraagt op het juiste moment om een geldige toegang. Zo krijgt u een overdraagbare procedure zonder de archieflog van het experiment in een toegangssleutelhanger te veranderen.
Deze methode betreft uw applicatie en de bijbehorende deliverables. Ze garandeert noch de isolatie van de hele omgeving, noch de afwezigheid van technische sporen elders. Om tot uitvoering te komen, combineert u haar met een gedocumenteerde omgeving, gecontroleerde gegevens en een opvolging die voortgang en gevalideerd resultaat onderscheidt.