İçeriğe geç
mcpd
daemon yok
Kaynak

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:

SinyalTaşıdığı içerik
Span'ler input, output, attributes, metadata ve hata mesajı
Loglarmesaj ve yapılandırılmış fields
Metriklerlabels
Puanlarreason ve metadata
Geri bildirimserbest 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.

HedefNe 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:

KapsamNeye izin verirNeden 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.

dört ret
$ 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 anonymous olarak 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. subject alanı, --trusted-identity-header ve --trusted-proxy-cidr birlikte 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/16 ile 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 üzerinde mcpd_audit_write_failures_total olarak 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.

Ingest pipeline
  1. Decode

    OTLP or native, gzip or plain

  2. Sample

    Decided once, at the root

  3. Redact

    Before anything is written

  4. Price

    From the configured price book

  5. 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 olmayanBunun 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