1. Hesaplamayı tanımlayanı ve erişim sağlayanı sınıflandırmak
Programınızın gerçekte tükettiği bilgilerle başlayın. Parti boyutu, model adı ve işleme modu bir deneyimi tanımlar. Bir indirmeye izin veren jeton veya bir depolamayı açan anahtar erişim sağlar. İlk küme açıklanabilir olmalıdır; ikincisi yalnızca gerekli olduğu yerde kullanılabilir kalmalıdır.
Sınır yalnızca değişken adlarından ibaret değildir. Bir yol bir müşteriyi açığa çıkarabilir, bir URL bir kimlik bilgisi içerebilir ve küçük bir veri örneği gizli olabilir. Bu nedenle paylaşılabilir parametrelerin içeriğini de değerlendirin. Yapılandırmayı yayımlamak ile tüm mutlak yollarını yayımlamak aynı karar değildir.
Tablo bir çalışma sınıflandırması sunar. Bir Kernodeck makinesinde kurulu hizmetleri tanımlamaz. Projeniz için her öğeyi kimin, ne zaman ve hangi kopyada okuyabileceğini tanımlayın; bu kararı bir notebook'un son dışa aktarımına bırakmayın.
Tüm sütunları görmek için tabloyu kaydırın.| Öğe | Rol | Önerilen işlem |
|---|---|---|
| Parti boyutu, mod, eşik | Hesaplama parametreleri | Değerlerini sürümleyin ve doğrulayın. |
| Jeton, özel anahtar, parola | Erişim araçları | Ayrı olarak sağlayın ve çıktılara dahil etmeyin. |
| Yol, URL, korpus kimliği | Potansiyel olarak hassas bağlam | Paylaşmadan önce doğrulayın; mantıksal bir kimliği tercih edin. |
| Sonuçlar ve günlükler | Yürütme kanıtları | Saklanan alanları seçin ve iletilen klasörü denetleyin. |
2. Tek bir öncelik kuralı seçin
Kodda, bir dosyada ve bir başlatma seçeneğinde bulunan bir parametre, hangisinin kazandığını kimse bilmiyorsa belirsiz hale gelir. Basit bir kural belirleyin, örneğin: belgelenmiş varsayılan değerler, ardından yapılandırma dosyası, ardından komutun genel seçenekleri. Bu, Python tarafından sağlanan evrensel bir öncelik değil, uygulamanızın bir sözleşmesidir.
Bu çözümlemeden sonra doğrulayın. Bilinmeyen bir anahtarı reddedin; böylece batch_szie gibi bir yazım hatası sessizce bir varsayılan değerle değiştirilmesin. Bir tamsayıyı, bir tamsayıyı temsil eden bir dizeyi ve bir boolean'ı ayırt edin. Ardından yararlı kısıtlamaları ekleyin: pozitif değer, izin verilen mod, tutarlı parametre kombinasyonu.
Son olarak, izin verilen alanlarla sınırlı etkin bir yapılandırma kaydedin. Bir seçenek dosyayı geçersiz kıldığında bile programın ne kullandığını açıklar. Bu belgeyi, bilinen birkaç parolayı çıkarmadan önce tüm yapılandırma nesnesini serileştirerek elde etmeyin: önce neyin yer alabileceğini seçin.
3. Herhangi bir hizmete bağlanmadan bir örnek üzerinde çalışın
Aşağıdaki örnek eğitim amaçlıdır ve yürütülmemiştir. Sekiz öğelik bir partiyle kurgusal bir vektör üretme işlemini tanımlar. Buradaki embedding sözcüğü bir arayüz tercihidir; hiçbir model yüklenmez ve hiçbir GPU bağımlılığının kurulu olduğu varsayılmaz. Bu dosyayı okumak veya doğrulamak için hiçbir gizli bilgi gerekmez.
Python 3.11'den itibaren kullanılabilen standart tomllib modülü TOML biçimini okur. Belgedeki değerleri Python nesnelerine dönüştürür; uygulamanızda sıfır değerinde bir partinin yasak olduğuna karar vermez. Alan denetimi okumadan sonra açık kalır.
Bu kesit tam olarak iki anahtar ve iki modu kabul eder. Bunu bir projede kullanmak için ardından bağımsız değişkenleri, hata yönetimini ve çıktı yollarını bağlayın. Beklenen reddetmeler akılda tutması kolaydır: sıfır batch_size, dize biçiminde batch_size veya bir token anahtarı eklenmesi. Bunlar sizin tarafınızda doğrulanacak durumlardır, burada ölçülen sonuçlar değildir.
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. Gizli bilgiyi yalnızca ona ihtiyaç duyan adıma sağlayın
Halihazırda mevcut bir dosya üzerinde çalışan bir adım, indirme jetonu gerektirmemelidir. Sırrı, erişimin gerekli hale geldiği sınırda isteyin. Bu adım etkinleştirilmiş ancak erişimi eksikse, beklenen kanalı belirten bir mesajla durdurun; alınan değeri göstermeyin ve tüm isteği kopyalamayın.
Kanal, mevcut ortama bağlıdır: sır yöneticisi, kısıtlı erişimli kimlik bilgileri dosyası veya kuruluşunuzun öngördüğü enjeksiyon mekanizması. Bir ortam değişkeni arayüz olarak hizmet edebilir, ancak süreç tarafından erişilebilen ve tanılama çıktılarında görünebilen bir veri olarak kalır. Enjeksiyon kolaylığını tam korumayla karıştırmayın.
Erişimi yararlı kapsamla sınırlayın ve değiştirilmesini planlayın. Bir yazılım hazırlama talebi, sır yöneticisinin mevcut olduğunu garanti etmez. Başlatma sürecinizi onun üzerine kurmadan önce gerçekten mevcut olan mekanizmayı doğrulayın, ardından sırrı buna ihtiyaç duymayan alt süreçlere iletmekten kaçının.
5. Girdiyi kopyalamadan yararlı bir günlük tasarlama
Birkaç olay tanımlayın: kabul edilen yapılandırma, denetlenen dosya, tamamlanan bölümleme, doğrulanan çıktı. Bunlara bir çalıştırma tanımlayıcısı, bir adım ve bir sayaç ekleyin. Bir CONFIG_BATCH_SIZE hatası ilgili kuralı bulmak için yeterlidir; tam dosyayı içermesine gerek yoktur.
OWASP, özellikle parolaların, erişim jetonlarının ve anahtarların günlüklerden çıkarılmasını önerir. Bu kuralı istisnalara, hata ayıklama için görüntülenen nesnelere ve hücre çıktılarına da uygulayın. Yalnızca son ekranda uygulanan maskeleme, bir dosyaya veya ekran görüntüsüne çoktan yazılmış olanı ortadan kaldırmaz.
Bir olayı paylaşmak için küçük bir seçki hazırlayın: yararlı sürümler, izin verilen parametreler, hata ve sorunu yeniden üreten sentetik örnek. Tüm klasörün otomatik arşivinden kaçının. Ayrıca URL'leri, başlıkları, yolları ve hatanın yakınındaki satırları yeniden gözden geçirin; görünüşte zararsız bir mesaj hassas verilerle çevrili olabilir.
6. Paylaşmadan önce ayrımı doğrulama
Üç deneme hazırlayın: uzak adımı olmayan geçerli yapılandırma, geçersiz yapılandırma ve erişimi eksik olan bir adım gerektiren yapılandırma. Birincisi gereksiz sır olmadan işlevsel sınırına kadar gidebilmelidir; diğer ikisi farklı hatalar vermelidir. Ayrıca yığın boyutunda yapılan genel bir değişikliğin etkin yapılandırmada göründüğünü doğrulayın.
Paylaşım prosedürünüzü kontrol etmek için, açıkça hayali ve erişim gücü olmayan bir sentinel dizesi kullanın. İzole bir alıştırmada onu bir sırrın geçeceği aynı konumdan geçirin, ardından günlüklerde, dışa aktarımlarda ve seçilen dosyalarda arayın. Bulunmaması bu yol için sınırlı bir kontroldür, tüm sızıntıların imkânsız olduğunun kanıtı değildir.
Uygun özel dosyaları Git hariç tutmalarınıza ekleyin, ancak halihazırda izlenen dosyaları da kontrol edin. Git belgeleri, gitignore'un izlenmeyen dosyalarla ilgili olduğunu belirtir; bir kalıp eklemek, zaten kaydedilmiş bir sırrı kaldırmaz. Yalnızca onu dışlaması gereken kuralları değil, ileteceğiniz şeyi de inceleyin.
7. Bir sızıntıya tepki verme ve kullanılabilir bir iz saklama
Bir erişim açığa çıktıysa, onu yeniden kullanmayı bırakın ve onu veren sistem nezdinde iptal ettirin veya değiştirtin. Geçerli dosyadan bir satırı silmek, önceki kopyaları zararsız hale getirmez. Kaldırılabilecekleri çıkarmak ve yayılmanın kapsamını anlamak için ilgili konumları belirleyin.
Yeniden üretilebilir klasörünüz daha sonra, sırrın kendisini saklamadan kullanılan kanalın adını ve izin verilen parametreleri saklayabilir. Gelecekteki bir başlatma, doğru zamanda geçerli bir erişim isteyecektir. Böylece, deneyin arşivini bir erişim anahtarlığına dönüştürmeden aktarılabilir bir prosedür elde edersiniz.
Bu yöntem uygulamanızı ve teslim edilebilirlerini kapsar. Ne tüm ortamın yalıtımını ne de başka yerlerde teknik izlerin bulunmamasını garanti eder. Yürütmeye geçmek için bunu belgelenmiş bir ortamla, denetlenen verilerle ve ilerleme ile doğrulanmış sonucu birbirinden ayıran bir izlemeyle birlikte kullanın.