Güvenlik
Bir güvenlik incelemesini tek sayfada yanıtlar. Ne saklanıyor, başka bir yere ne gönderiliyor, kim okuyabiliyor ve mcpd'de hangi denetimler yok.
Aşağıdaki her şey daemon'un kendi kaynak kodundan ve API'nin üretildiği
spec/mcpd.spec.json dosyasından alınmıştır. Bir denetim yoksa
bu sayfa bunu söyler; eksiği bir güvenlik anketinde bulmanızı beklemez.
mcpd neyi saklar
mcpd, ajanınızın konuşmalarının metnini saklar. Amacı budur ve bir inceleme
buradan başlamalıdır. model_generation türündeki bir span
input ve output taşır: modele gönderilen prompt'un
tamamı ve geri gelen metnin tamamı. Çoğu kullanıcı için elindeki en hassas
veri budur.
Altı sinyalin tamamında saklanan serbest biçimli alanlar şunlardır:
| Sinyal | Taşıdığı içerik |
|---|---|
| Span'ler | input, output, attributes, metadata ve hata mesajı |
| Loglar | mesaj ve yapılandırılmış fields |
| Metrikler | labels |
| Puanlar | reason ve metadata |
| Geri bildirim | serbest metin comment alanı ve metadata |
| Yön notları | cümlenin kendisi, text alanında |
Payload'ın yanında her sinyal, bir çalıştırmayı sisteminizin geri kalanına
bağlayan ilişkilendirme alanları taşır: proje, ortam, servis adı ve sürümü,
oturum, thread, kullanıcı, kaynak, çalıştırma, istek, deney ve release.
user_id, maskelemeyi kapatmadığınız sürece girişte özetlenir.
Diğerleri gönderildiği gibi saklanır; birine bir kimlik koyarsanız o alanı,
bir kişinin teşhis edilebileceği bir alan olarak görün.
Token sayıları ve bir maliyet değeri alım sırasında hesaplanır ve çalıştırmayla birlikte saklanır. Model çağrısıyla ilgili hiçbir şey bir sağlayıcıdan çekilmez.
Nereye yazılır
Başlangıçta seçilen tek bir arka uç. Varsayılan, --data ile
ayarlanan ./mcpd.db yolundaki gömülü bir SQLite dosyasıdır. Tam
metin dizini de aynı dosyada durur, yani depo yedeklenecek tek bir dosya ve
korunacak tek bir dosyadır. --postgres-url veya
--clickhouse-url veriyi, bunun yerine sizin çalıştırdığınız bir
veritabanına koyar.
Kalıcı çalıştırmalar, açık olduklarında, trace deposu hangisi olursa olsun
ilkinin yanındaki ikinci bir SQLite dosyasında durur. Bu dosya her
çalıştırmanın girdisini, durum verisini, çıktısını ve ilişkilendirmesini,
her adımın girdisini, çıktısını ve hatasını gönderildikleri gibi tutar:
maskelenmeden ve user_id özetlenmeden, çünkü sonraki bir adım
onları geri okur ve yeniden yazılmış bir değer çalıştırmanın yaptığı şeyi
değiştirirdi. Bir çalıştırmanın trace deposuna yazdığı span'ler diğer her
span gibi maskelenir. Çalıştırma dosyasını trace deposunu koruduğunuz gibi,
ya da daha sıkı koruyun. Saklama da özneye göre silme de, sona ermiş
çalıştırmalar için ona erişir;
Çalıştırmalar
sayfasına bakın.
mcpd yazdığı şeyi şifrelemez. Durağan veri şifrelemesi gömülü depoda birimin, diğer ikisinde veritabanının işidir.
Makineden ne çıkar
Varsayılan yapılandırmada hiçbir şey. Daemon tam olarak dört yerde dışarı istek yapar ve bunların her biri siz yapılandırana kadar kapalıdır. Güncelleme denetimi yok, kullanım raporlaması yok, hiçbir türde telemetri yok.
| Hedef | Ne gönderilir | Şu olmadıkça kapalı |
|---|---|---|
| Depolama arka ucu | mcpd'nin sakladığı her şey, kendi bağlantınız üzerinden. | --postgres-url veya --clickhouse-url ayarlarsanız. Varsayılan depo yerel bir dosyadır ve hiç ağ gerektirmez. |
| İletme |
Saklanan her span, {endpoint}/v1/traces adresine
OTLP JSON olarak yeniden yayılır. Buna payload da dahildir:
input ve output, her biri 32 KiB ile
sınırlanarak input.value ve output.value
öznitelikleri olarak dışarı çıkar. Zaten maskelenmiş değerler maskeli
kalır, özetlenmiş bir user_id özet hâliyle iletilir.
| --forward-endpoint ayarlarsanız veya yapılandırma dosyasına bir forward bloğu koyarsanız. |
| İzleyici ve hedef webhook'ları | Sabit bir JSON gövdesi: izleyicinin veya hedefin kimliği ve adı, proje, koşul, neyi izlediği, eşik, okuma değeri, örnek sayısı, tek satırlık bir ayrıntı ve bir zaman damgası. İçinde prompt veya tamamlama metni yoktur. | Yapılandırma dosyasındaki bir izleyici veya hedef bir webhook adı verir. |
| Yargıç model |
Ölçüt, artı çalıştırmanın sorusu ve yanıtı, her biri 4.000 karakterde
kesilerek {endpoint}/chat/completions adresine
POST edilir. Saklanan prompt ve tamamlama metnini bir model sağlayıcısına
gönderen tek yol budur.
| Yapılandırma dosyasındaki bir judge bloğu bir endpoint, bir model ve en az bir ölçüt adı verir ve bir çağıran o puanlayıcıyı adıyla ister. |
İkilinin / altında sunduğu arayüz kendi içine derlenmiştir. Yazı
tipleri, stilleri ve betikleri aynı kökenden gelir ve üçüncü taraf isteği
yapmaz.
Anahtarlar ve kapsamlar
Kimlik doğrulama API anahtarlarıyla yapılır. Hesap yok, oturum yok, giriş
yok. Bir anahtar Authorization: Bearer … olarak veya
X-Mcpd-Key başlığında sunulur; karşılaştırmadan önce iki taraf
da SHA-256 ile özetlenir, böylece ne yapılandırılmış anahtarın uzunluğu ne de
ilk yanlış karakterin konumu zamanlamadan gözlenebilir.
Verdikleri erişimin genişliğine göre sıralı altı kapsam vardır:
| Kapsam | Neye izin verir | Neden kendi kapsamı |
|---|---|---|
ingest | Sinyal yazar. Hiçbir şey okumaz. | Bu anahtar, span yayan her konteynerde bulunur; üçüncü taraf kod çalıştıranlarda da. Aynı anahtar saklanan her prompt'u da açmamalıdır. |
read | Saklanan sinyalleri okur. | Prompt'lar okuma tarafındadır. |
write | Saklanan veriyi değiştirir: puanlar, geri bildirimler, veri kümeleri, deneyler ve onaylar. | Bu işleyicilerin birkaçı yol üzerinde bir payload okur. Bir üretim çalıştırmasını bir veri kümesine almak o çalıştırmanın input ve output alanlarını okur, bu da bir span yaymaktan fazlasıdır. |
execute | Çalıştırma başlatır, iptal eder, sinyal gönderir ve çalıştırmalara olay yayımlar. | Bir çalıştırma başlatmak para harcar ve sistemlerinize uzanır. Puan kaydedebilen bir anahtar iş de başlatabilmemelidir. |
worker | Adım talep eder ve adımlara ne olduğunu bildirir. | Adım gövdelerini çalıştıran süreçteki anahtardır. Bir talep adımın input alanını ve önceki her adımın output alanını geri verir, yani payload okur; çalıştırma başlatabilmemeli ve saklanan veriyi değiştirebilmemelidir. |
admin | Veriyi yok eder ve denetim günlüğünü okur. | Silmek okumak değildir. |
Bir endpoint'in hangi kapsamı aldığı spesifikasyonda endpoint başına bildirilir ve üretilen HTTP API referansında yayımlanır; böylece “bu endpoint neye ihtiyaç duyar” sorusunun belge başına bir değil, tek bir yanıtı olur.
Geri düşme ve elinizdeki anahtar için anlamı
Ayarlanmamış bir write listesi ingest listesine,
ayarlanmamış bir admin listesi read listesine geri
düşer. Ayarlanmamış execute ve worker listeleri
write listesine, o da ayarlanmamışsa ingest
listesine geri düşer. Bir yükseltmenin, dar kapsamlar var olmadan önce
yapılandırılmış her dağıtımda erişimi iptal etmesini bu engeller. Bir admin
anahtarı da execute ve worker için kabul edilir;
böylece bir operatör bir çalıştırmayı elle yürütebilir. Bunlar birlikte,
yalnızca bir ingest anahtarı ile bir read anahtarı tutan bir daemon'da şu
anlama gelir:
- ingest anahtarı puan ve geri bildirim de ekler, çalıştırma başlatır ve adım talep eder, ve
- read anahtarı trace de siler ve admin geri düşmesi üzerinden çalıştırma başlatır ve adım talep eder.
Yani --admin-key ayarlanana kadar bir read anahtarı aynı zamanda
bir silme anahtarıdır; --execute-key,
--worker-key ve --admin-key ayarlanana kadar da iki
anahtar da çalıştırma yüzeyine erişir. Anahtarları bu bilgiyle dağıtın.
Hiçbir şey kendiliğinden daralmaz. Her kapsamın bir seçeneği vardır:
--ingest-key, --read-key,
--write-key, --admin-key,
--execute-key ve --worker-key; her biri bir liste
alır ve hepsi yapılandırma dosyasında proje başına da ayarlanabilir.
Anahtar yoksa her kapsam açıktır
Bu varsayılan bilinçlidir: bir dizüstünde ilk çalıştırma bir kimlik bilgisi
gerektirmemelidir. Aynı zamanda dışarı açılmış bir örnekle ilgili en tehlikeli
tek şeydir, bu yüzden daemon loopback dışı bir adrese bağlandığında, ona
erişmemesi gereken bir çağırana açık her yüzey için başlangıçta bir uyarı
loglar. Her uyarı yüzeyi ve onu kapatan seçenekleri adlandırır. Bir portu
dışarı açmadan önce mcpd config çalıştırın: bir çağrının
çözüldüğü yapılandırmayı yazdırır, sonra çıkar. Kapsam başına bir satır taşır
ve bir kapsamın hangi listeye geri düştüğünü söyler, yani
admin auth key required (read keys) satırı read
anahtarlarının hâlâ silebildiğini anlatır.
Docker ve Kubernetes
çıktıyı gösterir.
erişilebilir olmadan önce kapalı
mcpd --ingest-key "$INGEST" --read-key "$READ" Proje bir kiracılık sınırıdır
Üst düzeyde yapılandırılan bir anahtar her projeye yetki verir. Bunun yerine
yapılandırma dosyasının projects bloğunda adlandırılmış bir
projenin altında listelenen anahtar yalnızca o projeye yetki verir ve her
proje kapsam başına kendi listesini tutar. Bir anahtar birden çok projenin
altında görünebilir; bir platform ekibi, sunucunun tamamını elinde tutmadan
işlettiği her şeyi kapsayan bir anahtarı böyle tutar.
Yazma yolunda denetim istek başına değil, sinyal başınadır:
- Bir yığın birden çok proje adlandırabilir. Anahtarın erişemediği bir projeyi adlandıran sinyaller düşürülür ve yanıtta gerekçesiyle birlikte reddedilmiş olarak bildirilir, böylece yanlış projeye yönlendirilmiş bir filo zaten okuduğu yanıttan fark edilir. Yığının geri kalanı saklanır.
Okuma yolunda, bir projeyi adlandıran her endpoint onu anahtarın yetkisiyle
karşılaştırır: trace'ler, span'ler, loglar, metrikler, puanlar, geri
bildirimler, analitik, veri kümeleri, deneyler ve denetim günlüğü. Bir veri
kümesinin içindeki öğeler veri kümesinin kimliğiyle adreslenir; daemon o
veri kümesinin hangi projeye ait olduğunu bulup anahtarı ona göre denetler,
yani projeyi açamayan bir anahtar o projeden alınmış öğeleri okuyamaz. Var
olmayan bir kimlik, anahtarın erişemeyeceği bir kimlikle aynı şekilde
reddedilir, böylece endpoint hangi kimliklerin var olduğunu sınamak için
kullanılamaz. Üç endpoint hiç proje almaz ve okuma kapsamını tutan her anahtarla, hangi
projelere sınırlanmış olursa olsun, erişilebilir: proje listesi,
puanlayıcı kataloğu ve depolamanın yetenek kümesi
(GET /v1/api/capabilities). Proje listesi anahtarın yetkisine
göre süzülür, yani projeye sınırlanmış bir anahtar yalnızca erişebildiği
projeleri görür. Paylaşılan bir örnekte proje adları çoğu zaman ekip veya
müşteri adlarıdır. İzleyici durumu ile hedef durumu da bu listedeydi;
artık anahtarın proje yetkisine göre süzülüyor, ki baştan beri öyle
olmalıydı: bir izleyici izlediği projeyi adıyla taşır ve gönderdiği
webhook’u da yanında getirir. API bu webhook’un yalnızca sunucu adını
verir, çünkü bir webhook URL’si çoğu zaman kendi kimlik bilgisidir.
Bir ret, iki sorundan hangisi olduğunu söyler
Eksik veya tanınmayan bir anahtar 401'dir; tanınan ama bu endpoint'in ya da bu projenin kabul etmediği bir anahtar 403'tür. Ayrım operasyoneldir: 401 sizi bir kimlik bilgisindeki yazım hatasını aramaya gönderir, 403 kimlik bilgisinin doğru, yetkinin yanlış olduğunu söyler.
$ curl -sw "%{http_code} " "$MCPD/v1/api/traces?project=acme"401 this endpoint needs an API key; send it as `Authorization: Bearer <key>`$ curl … -H "authorization: Bearer $TYPO"401 that key is not one this daemon knows$ curl … -H "authorization: Bearer $INGEST"403 that key is not valid for reading$ curl … -H "authorization: Bearer $BILLING_READ"403 that key does not reach the project "acme" Bu son mesaj, proje var olsa da olmasa da aynıdır. Hangi proje adlarının gerçek olduğunu doğrulamak küçük bir sızıntıdır ve paylaşılan bir daemon'da o adlar müşterilerinizin adlarıdır.
Denetim günlüğü
Saklanan bir payload'ın mcpd'den dışarı verilmesi kaydedilir, her silme de
kaydedilir, böylece “bu çalıştırmayı kim okudu” sorusunun bir yanıtı olur.
Bir satır şunları taşır: ne zaman, hangi anahtar, hangi eylem, hangi proje,
hangi trace veya veri kümesi adlandırıldı ve istek karşılandı mı reddedildi mi.
GET /v1/api/audit bunu en yenisi başta olacak şekilde geri okur
ve admin kapsamını ister.
On sekiz eylem kaydedilir: get_trace, list_spans,
list_logs, list_feedback,
list_dataset_items, capture_into_dataset,
read_trace_aspect_notes, get_theme, get_theme_flow, list_theme_history, list_theme_examples,
delete_trace, erase_subject ve kalıcı
çalıştırmalar üzerinde beş eylem: list_runs,
get_run, list_run_events,
get_step_cause ve cancel_run. Sınır istek değil,
payload'dır. Trace'leri listelemek adlardan, sürelerden, token
sayılarından ve maliyetten oluşan, içinde prompt veya tamamlama bulunmayan bir
izdüşüm döndürür, bu yüzden kaydedilmez; o trace'lerden birini açmak
kaydedilir, çünkü metin oradadır. Kalıcı çalıştırmaları listelemek
kaydedilir, çünkü listedeki her çalıştırma girdisini, çıktısını ve durum
verisini gönderildikleri gibi taşır. Bir çalıştırmanın reddedilen bir
okuması, çalıştırmanın sahibi olan projenin altında kaydedilir.
Worker çağrıları kaydedilmez: bir adımı talep etmek, başladığını bildirmek,
heartbeat, complete ve fail. Bir lease adımın girdisini ve ondan önceki
adımların çıktılarını taşır, ama worker döngüsü dakikada birçok kez talep
eder ve talep başına bir satır, bir kişinin yaptığı okumaları gömerdi.
worker anahtarını, sunduğu çalıştırmaların her payload'ını
okuyan bir anahtar olarak görün. Bir çalıştırmayı başlatmak da kaydedilmez;
hâlâ tutulan bir idempotency anahtarıyla yeniden gönderilen istek, o
anahtarın başlattığı çalıştırmayla yanıtlanır, bu yüzden
execute anahtarını başlattığı çalıştırmaları okuyabilen bir
anahtar olarak görün.
Bir inceleyicinin bilmesi gereken beş özellik:
- Anahtar hiçbir zaman yazılmaz. Aktör, anahtarın
kısaltılmış bir SHA-256 özetidir; bu, anahtar için bir doğrulayıcı
saklamadan bir anahtarı diğerinden ayırır. Açık bir daemon'a anahtarsız
gelen bir istek
anonymousolarak kaydedilir. - Kişi ingress'inizden gelir, yoksa hiç gelmez. mcpd'de
kullanıcı hesabı yoktur, bu yüzden bir satır tek başına bir eylemi bir
insana değil bir anahtara bağlar.
subjectalanı,--trusted-identity-headerve--trusted-proxy-cidrbirlikte ayarlandığında bir kimlik taşır, aksi hâlde boştur ve varsayılan budur. mcpd o kimliği hiçbir zaman kendisi belirlemez; adını verdiğiniz bir adresin öne sürdüğünü kaydeder. - Ret de kaydedilir. Satır, 403 döndürülmeden önce yazılır, çünkü başka bir ekibin projesine yapılmış reddedilmiş bir deneme, denetim günlüğünün var olma nedenidir. Günlüğü okumak kendisi kaydedilmez: hiçbir payload okunmadan büyürdü ve satır, admin anahtarını tutanın zaten bilmediği bir şey söylemezdi.
- Hangi anahtarı kaydeder, isteğe bağlı olarak da kimi.
Anahtar kendisi olarak değil, kısaltılmış bir özet olarak saklanır, yani
günlük kimlik bilgilerinin biriktiği bir yer değildir. Bu, “bunu bir admin
anahtarı sildi” sorusunu yanıtlar, “hangi kişi sildi” sorusunu değil,
çünkü mcpd'nin kimlik sağlayıcısı yoktur. İkinci yanıtı
istiyorsanız, ingress'inizin zaten koyduğu başlığı ve onu koymasına izin
verilen adresleri verin:
--trusted-proxy-cidr 10.42.0.0/16ile birlikte--trusted-identity-header x-forwarded-user. İki yarım da gereklidir. Başlık, porta erişebilen herkesin gönderebileceği bir metindir, bu yüzden mcpd onu yalnızca adını verdiğiniz bir adresten okur; başka bir yerden gelen istek normal karşılanır ve satırı bir özne taşımaz, ki bu bir tahmin yerine dürüst yanıttır. İki seçenek de ayarlanmadığında hiçbir özne kaydedilmez ve varsayılan budur. - Saklama süresi onu budamaz. Saklama taraması span'leri, logları, metrikleri, trace'leri, puanları, geri bildirimleri, yön notlarını ve sona ermiş kalıcı çalıştırmaları kaldırır. Denetim günlüğüne dokunmaz, çünkü anlattığı verinin yanında süresi dolan bir günlük, silinen veriyi kimin okuduğunu söyleyemezdi.
- Anlattığı isteği hiçbir zaman başarısız kılmaz.
Yazılamayan bir satır loglanır ve
/metricsüzerindemcpd_audit_write_failures_totalolarak sayılır, okuma yine de döner. Okuma yolunu düşürebilen bir denetim günlüğü, önlediği riskten daha ağır bir risktir, bu yüzden isteklerin başarısız olmasına güvenmek yerine o sayacı izleyin.
Hiçbir anahtarın kapsamadıkları
- Arayüz.
/üzerindeki işaretleme, porta erişebilen herkese sunulur. Arkasındaki veri sunulmaz: yaptığı her istek sorgu API'sinden geçer ve aynı anahtarlarla karşılaşır. Daemon'da oturum açma ekranı yoktur. - Yoklamalar ve
/metrics. Bilerek kimlik doğrulamasızdır, çünkü bir kubelet ve bir collector anahtar taşıyamaz. Durumu, sürümü, çalışma süresini, depolama arka ucunun adını ve sayaçları bildirirler, payload'ları asla. - Köken. Sorgu API'si ve yoklamalar
Access-Control-Allow-Origin: *ile yanıt verir, yani herhangi bir kökendeki bir tarayıcı sayfası onları çağırabilir. mcpd çerez ve ortamdan gelen kimlik bilgisi kullanmaz, bu yüzden böyle bir sayfanın yine de bir anahtar tutması gerekir: izin verici bir köken politikası ona anahtar vermez.
Maskeleme ne yapar, ne yapamaz
Maskeleme varsayılan olarak açıktır ve yazmadan önce, alım hattının üçüncü
aşaması olarak çalışır. Bir kuralın eşleştiği değer veritabanına hiç
ulaşmaz; bu, sonradan silinen bir değerden başka bir güvencedir ve fark, bir
denetçinin sorduğu farktır. Yapamadığı şey baytları ağdan uzak tutmaktır:
kural çalıştığında baytlar ağı çoktan geçmiştir. Bunun için SDK'lar
MCPD_CAPTURE_PAYLOADS=false taşır; bu, bir span kuyruğa
alınmadan önce input ve output alanlarını düşürür,
span'in geri kalanına dokunmaz.
-
Decode
OTLP or native, gzip or plain
-
Sample
Decided once, at the root
-
Redact
Before anything is written
-
Price
From the configured price book
-
Store
One transaction per batch
Redaction is stage three, not a cleanup job. A value that a rule matches never reaches storage at all.
Bir kural, küçük harfli alt dizelerden ve bir moddan oluşur. Bir anahtar, adı küçük harfe çevrildiğinde bunlardan birini içeriyorsa eşleşir. Eşleşen değerler tümüyle veya kısmen maskelenir, anahtarlı bir özetle karılır ya da düşürülür. Eşleşen bir anahtar bir nesne tutuyorsa, alt anahtarların adı ne olursa olsun altındaki her şey de maskelenir; JSON sayısı olarak gönderilen bir sır, dize olarak gönderilenle aynı biçimde ele alınır. Kuralların tam tablosu Maskeleme ve saklama sayfasındadır.
Şimdi sınır: bir inceleme bunu soracaktır ve hiçbir yapılandırma bunu ortadan
kaldırmaz. Kurallar alan adlarıyla eşleşir, bir değerin biçimiyle
değil. Bir kullanıcının cümlenin ortasına yapıştırdığı ve
content ya da question adlı bir alanda gelen bir
API anahtarı, hattaki hiçbir şeyle eşleşmez. Alan adı masumdur, dolayısıyla
değer olduğu gibi saklanır.
Yani maskeleme tek bir şeyi durdurur:
- Kimlik bilgilerinin ve tanımlayıcıların yapılandırılmış biçimde toplanmasını durdurur, yani bir kimlik bilgisinin ne olduğunu söyleyen adda bir alanda gelmesini.
- Serbest metni taramaz ve bir içerik sınıflandırıcısı değildir.
- Bir sırrı biçiminden veya entropisinden tanımaz.
- Bir span'in adına veya bir log kaydının mesajına dokunmaz. Bunlar payload değil, gruplama için kullanılan tanımlayıcılardır ve yeniden yazmak gruplamayı bozardı. Bir span adını bir müşterinin e-posta adresinden kurmayın.
- Çalıştırma deposuna dokunmaz. Kalıcı bir çalıştırmanın payload'ları onun çalışma durumudur ve gönderildikleri gibi tutulur; yalnızca bir çalıştırmanın trace deposuna yazdığı span'ler maskelenir.
Bir denetim biçim üzerinde çalışır ve o da önleme değil, sonradan tespittir:
yerleşik no_leaked_secret puanlayıcısı, yanıtında kimlik
bilgisine benzeyen bir belirteç taşıyan çalıştırmanın puanını düşürür; bunu
bilinen bir önekten ya da uzun, karışık büyük küçük harfli alfanümerik bir
diziden anlar. Zaten saklanmış bir çalıştırmayı puanlar. Hiçbir şeyi
kaldırmaz, prompt'u okumaz ve yalnızca siz istediğinizde çalışır. Bunu ikinci
bir maskeleme katmanı olarak değil, bunun olduğunu öğrenmenin bir yolu olarak
görün.
Bir kural eşleşse de eşleşmese de iki sınır geçerlidir. 128 KiB'den uzun her tek dize, bir işaretle birlikte karakter sınırında kesilir ve gezinme 32 derinliğinde durur. İkisi de, kaçak tek bir belgenin veritabanınızın boyutunu belirlemesini veya bir CPU'yu meşgul etmesini engellemek için vardır.
--no-redact hattın tamamını kapatır; bu yalnızca yukarı akışta bir
şey zaten maskeliyorsa akla yatkındır. Maskelemenin bir tanımlayıcıyı
özetlediği yerde --redact-key ayarlayın: yerleşik anahtar
yayımlanmış kaynak koddaki bir sabittir ve tanımlayıcılar küçük kümelerden
gelir, bu yüzden anahtarsız bir özet aday deneyerek geri çözülebilir.
Saklama ve silme
--retention-days, verdiğiniz gün sayısından eski sinyalleri
siler. Vermezseniz hiçbir şey silinmez ve doğru varsayılan budur: geçen ayın
trace'lerini sessizce atan bir aracı en kötü anda fark edersiniz.
Tarama, bir kullanıcının isteği içinde değil, daemon'un içinde saatlik bir
zamanlayıcıyla çalışır. projects bloğunda adlandırılmış her
projeyi kapsar; her biri için kendi retention_days değeri varsa
onu, yoksa genel değeri kullanır, artı varsayılan projeyi. Hiçbir yerde
penceresi olmayan bir proje hiç budanmaz.
Tek bir kişiyle ilgili bir talep için
DELETE /v1/api/subjects/{user_id}?project=…, o kişiye karşı
projede kaydedilmiş her çalıştırmayı, bunlara bağlı span'ler, loglar,
metrikler, puanlar ve geri bildirimlerle birlikte kaldırır ve sinyal başına
bir sayıyla yanıt verir. Tanımlayıcı, eşleştirilmeden önce aynı anahtarla
özetlenir, böylece istek siz hiçbir şeyi özetlemeden özetlenmiş
tanımlayıcılara karşı çalışır; yanıt ayrıca saklanan tanımlayıcılardan
kaçının isteğin eşleştiremeyeceği bir biçimde olduğunu söyler. Bir kişi
yerine tek bir çalıştırmayı kaldırmak için
DELETE /v1/api/traces/{trace_id} onu ve ona bağlı her şeyi
tek bir işlemde kaldırır. İkisi de admin kapsamını ister ve
ikisi de denetim günlüğüne kaydedilir.
Maskeleme ve saklama
sayfası silme talebini ve neyin söz verilip verilemeyeceğini adım adım
anlatır.
mcpd'nin yapmadıkları
Aşağıdakilerin hiçbiri bu yapıda yoktur. Burada sıralanmalarının nedeni, bunları sonradan keşfeden bir incelemenin, burada okuyan bir incelemeden daha kötü bir sonuç olmasıdır.
| mcpd'de olmayan | Bunun yerine ne yapmalı |
|---|---|
| TLS sonlandırma. mcpd düz HTTP konuşur. Prompt'lar ve tamamlamalar bu bağlantıyı olduğu gibi geçer. | TLS'i ingress'inizde veya mesh'inizde sonlandırın ve daemon'un portunu güvenilmeyen ağların dışında tutun. |
| SSO. Kimlik sağlayıcı tümleşmesi yok, OIDC yok, SAML yok, oturum açma ekranı yok. | Arayüzü, zaten çalıştırdığınız kimlik proxy'sinin arkasına koyun. Bir kişinin kimliği, o proxy'nin belirlediği şeydir. |
| SCIM. Kullanıcı veya grup sağlama yok, çünkü mcpd'de kullanıcı hesabı diye bir kavram yoktur. | Sağlamayı proxy'de yapın. mcpd'nin içinde birim, bir listeye eklenen veya listeden çıkarılan bir anahtardır. |
| Altı kapsamın ötesinde roller. Yetkilendirme bir kapsam ve bir proje listesidir. Endpoint başına rol ve grup yoktur. | Anahtara ve projeye göre ayırın. Bir ayrım önemliyse onu bir proje yapın. |
| Bir kişinin kim olduğunu belirlemek. Denetim günlüğü bir özne kaydedebilir ama mcpd çağıranın kim olduğunu hiçbir zaman kendisi çözmez. Ingress'inizin öne sürdüğünü, yalnızca adını verdiğiniz bir adresten kaydeder. | --trusted-identity-header ve --trusted-proxy-cidr ayarlayın ki proxy'nizin zaten koyduğu başlık denetim satırına ulaşsın. Bunlar olmadan bir satır eylemi bir anahtara bağlar, ekip başına bir anahtar vermek de özeti daraltır. |
Anahtar yaşam döngüsü. Anahtarlar başlangıçta okunan listelerdir. Süre dolumu, rotasyon takvimi ve anahtar başına kota yoktur. Var olan tavan proje başınadır: --quota-per-minute, hangi anahtar göndermiş olursa olsun bir projenin bir dakikada kaç sinyal saklayabileceğini sınırlar. | Ekip veya filo başına bir tane olacak şekilde birkaç anahtar yapılandırın, böylece birini iptal etmek span yayan her şeyi yeniden dağıtmak yerine bir düzenleme ve bir yeniden başlatma olur. Kendi tavanı gerekiyorsa bir filoyu kendi projesi yapın. |
| Durağan veri şifrelemesi. mcpd düz dosya veya düz satır yazar. | Birimi şifreleyin veya bunu yapan bir veritabanı kullanın. |
Bir şey bildirmek
Şüphelenilen açıklar, herkese açık bir issue'ya değil, konusunda “Security”
geçen bir iletiyle [email protected] adresine gider. Deponun
SECURITY.md dosyası kapsamı ve iyi bir bildirimin neleri
içerdiğini anlatır. Birinin dışarı açmayı seçtiği, kimlik doğrulaması olmayan
bir örnek bir bulgu değil, belgelenmiş bir varsayılandır. Yapılandırılmış bir
anahtarı, yapılandırılmış bir maskeleme kuralını veya bir proje sınırını aşan
her şey bulgudur.
Sırada
- Kural tablosu, dört mod ve anahtarlı özet: Maskeleme ve saklama.
- Bir port erişilebilir olmadan önce ayarlanacaklar: Docker ve Kubernetes.
- Her seçenek ve ortam değişkeni: Yapılandırma.
- Dağıtımı yapılmış bir örneğe koddan veya bir ajandan erişmek: Entegrasyon.