WEB / WEB-16.02
Configuration ve secrets
Configuration girdi olarak gelir, application onu doğrular ve tüketir. Environment değişimi ile running process snapshot’ı veya secret rotation aynı olay değildir.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Geçerli config
- Örnek girdi hazır
Örnekte mode=public ve limit="2" text girdileri hazırlanır; henüz validation veya process startup gerçekleşmemiştir.
- Startup girdisi
- cfg-a; public; text2
- Config validator
- Doğrulanmadı
- Çalışan process
- Başlamadı
- Dependency metadata
- Kullanılmadı
- Required field kontrolü
Validator gerekli mode ve limit alanlarını kontrol eder; mode için izinli enum değeri public’tir.
- Startup girdisi
- cfg-a; public; text2
- Config validator
- Required/enum geçerli
- Çalışan process
- Başlamadı
- Dependency metadata
- Kullanılmadı
- Local type kontrolü
Decimal string "2", integer 2’ye çevrilir ve örneğin 1..10 aralığında olduğu doğrulanır.
- Startup girdisi
- cfg-a; public; text2
- Config validator
- Limit=2; range geçerli
- Çalışan process
- Başlamadı
- Dependency metadata
- Kullanılmadı
- Snapshot kabulü
Doğrulanan cfg-a tek immutable snapshot’a dönüştürülür; source text kendiliğinden typed değer değildir.
- Startup girdisi
- Source cfg-a
- Config validator
- Snapshot cfg-a; limit=2
- Çalışan process
- Başlamadı
- Dependency metadata
- Kullanılmadı
- Process config okur
Process startup sırasında cfg-a snapshot’ını ve limit=2 değerini okur; listening ayrı bir local state’tir.
- Startup girdisi
- Source cfg-a
- Config validator
- Snapshot cfg-a; limit=2
- Çalışan process
- Listening; cfg-a; limit=2
- Dependency metadata
- Kullanılmadı
- Effective config
Service kullandığı effective revision’ı ve typed limit değerini kaydeder; bu metadata credential içermez.
- Startup girdisi
- Source cfg-a
- Config validator
- Validated snapshot
- Çalışan process
- Effective cfg-a; limit=2
- Dependency metadata
- Secret value yok
Geçersiz type
- Yanlış text girdisi
Limit alanına decimal integer yerine "two" text’i verilmiştir; process henüz bu girdiyi kabul etmemiştir.
- Startup girdisi
- cfg-invalid; public; two
- Config validator
- Doğrulanmadı
- Çalışan process
- Başlamadı
- Dependency metadata
- Kullanılmadı
- Local enum kontrolü
Mode=public izinli enum koşulunu sağlar; limit alanının type kontrolü henüz tamamlanmamıştır.
- Startup girdisi
- cfg-invalid; public; two
- Config validator
- Mode geçerli; limit bekliyor
- Çalışan process
- Başlamadı
- Dependency metadata
- Kullanılmadı
- Type reddedildi
Decimal integer kuralı "two" text’ini reddeder; string’in truthy olması kabul gerekçesi değildir.
- Startup girdisi
- cfg-invalid; public; two
- Config validator
- Red: invalid-limit
- Çalışan process
- Başlamadı
- Dependency metadata
- Kullanılmadı
- Startup durdu
Gerekli validation başarısız olduğundan process listening state’ine geçmez; request arrival oluşmaz.
- Startup girdisi
- Yanlış girdi korundu
- Config validator
- Kabul edilmiş snapshot yok
- Çalışan process
- Listening başlamadı
- Dependency metadata
- Kullanılmadı
- Startup sonucu
Validation sonucu invalid-limit kategorisiyle kaydedilir; teşhis bütün environment değerlerini göstermeyi gerektirmez.
- Startup girdisi
- Yanlış girdi korundu
- Config validator
- Reddedildi
- Çalışan process
- Startup reddedildi
- Dependency metadata
- Secret value yok
Version geçişi
- Eski snapshot
Başlangıçta source, consumer ve accepted version sec-ref-a’dır; bu referans kullanılabilir credential değildir.
- Startup girdisi
- Source cfg-a
- Config validator
- Validated cfg-a
- Çalışan process
- Consumer: sec-ref-a
- Dependency metadata
- Kabul: sec-ref-a
- Source version değişir
Source revision cfg-b ve sec-ref-b’ye geçer; çalışan consumer eski cfg-a snapshot’ında kalır.
- Startup girdisi
- Source cfg-b sec-ref-b
- Config validator
- Eski snapshot: cfg-a
- Çalışan process
- Consumer: sec-ref-a
- Dependency metadata
- Kabul: sec-ref-a
- Eski version iptali
Downstream acceptance yalnız sec-ref-b’ye geçer; eski version iptali source label değişiminden ayrı karardır.
- Startup girdisi
- Source cfg-b sec-ref-b
- Config validator
- Eski snapshot: cfg-a
- Çalışan process
- Consumer: sec-ref-a
- Dependency metadata
- Kabul: sec-ref-b; a revoked
- Eski consumer reddi
Local metadata karşılaştırması, eski consumer’ın a version’ının accepted set içinde olmadığını belirler.
- Startup girdisi
- Source cfg-b sec-ref-b
- Config validator
- Eski snapshot: cfg-a
- Çalışan process
- Dependency kullanılamıyor
- Dependency metadata
- Eski a reddedildi
- Yeni snapshot kontrolü
Yeni cfg-b snapshot’ı mode=public, limit=3 ve sec-ref-b referansıyla ayrıca doğrulanır; eski consumer henüz değişmemiştir.
- Startup girdisi
- Source cfg-b sec-ref-b
- Config validator
- Validated cfg-b; limit=3
- Çalışan process
- Eski consumer: a
- Dependency metadata
- Kabul: sec-ref-b
- Snapshot değişimi
Uygulamanın policy’si tek validated snapshot’ı değiştirir; external environment kendiliğinden refresh olmamıştır.
- Startup girdisi
- Source cfg-b sec-ref-b
- Config validator
- Validated cfg-b; limit=3
- Çalışan process
- Consumer: sec-ref-b
- Dependency metadata
- Kabul: sec-ref-b
- Yeni consumer kabulü
Local metadata karşılaştırması yeni consumer’ın b version’ını kabul eder; bu sonuç vault cryptography veya credential authentication ölçümü değildir.
- Startup girdisi
- Source cfg-b sec-ref-b
- Config validator
- Validated cfg-b; limit=3
- Çalışan process
- Dependency kullanılabilir
- Dependency metadata
- Yeni b kabul edildi
ROLLER · STATE · VERİ AKIŞI
Environment girdisi kendiliğinden typed değildir
Environment variables process’in başladığı ortama bağlı key/value girdileridir. Node process.env bu process’in environment object’ini sunar; DotEnv ek değerleri text olarak parse eder. "false", "0" veya JSON’a benzeyen text kendiliğinden boolean, number veya object olmaz. Configuration loading, input’un kaynağını ve hangi kuralla typed value’ya dönüştürüleceğini belirlemelidir.
Atlas public note service için örneğin girdileri ATLAS_FIXTURE_MODE=public ve ATLAS_FIXTURE_LIMIT="2" olarak seçilir. Uygulama mode’u izinli enum ile, limit’i decimal integer kuralı ve 1..10 aralığıyla doğrular. Bu eğitim aralığı production kapasite tavsiyesi değildir. Başarıda normalized {mode:public,limit:2} alınır. "two" gibi yanlış text reddedilir; string’in truthy olması kabul gerekçesi değildir.
Default, environment ve explicit override arasındaki precedence uygulama sözleşmesidir; bütün runtime’larda aynı priority beklenmez. Bu örnek input kaynağını açıkça seçer ve kabul edilen revision’ı kaydeder. Gerekli field eksik veya invalid ise startup durur; server listening olmadan request arrival gerçekleşmiş gibi gösterilmez. Configuration database authorization veya uygulama policy’sinin yerine geçmez.
Çalışan process config’i kendi lifecycle’ında tüketir
Configuration startup’ta bir kez okunup frozen object’e dönüştürülebilir. Kaynak cfg-b’ye geçse bile cfg-a snapshot’ını kullanan process kendiliğinden yenilenmez. Bunun nedeni environment’ın sonsuza kadar immutable olması değildir: process.env uygulama içinde değiştirilebilir. Snapshot’ın ne zaman okunacağı ve cached client veya connection’ın nasıl yeniden kurulacağı uygulamanın kararıdır.
Node’da process.env’e yapılan local değişiklik parent shell’e veya diğer Worker thread’lerin varsayılan environment copy’lerine otomatik yansımaz. Worker’ın explicit shared environment seçeneği farklı davranır; bu ders onu kullanmaz. Yeni child process’e environment vermek yeni snapshot sağlar, mevcut process’i uzaktan güncelleyen bir control channel oluşturmaz.
Hot reload gerekiyorsa revision, validation ve geçiş atomikliği açık tasarlanır. Bir field yeni, diğeri eski revision’dan alınırsa mixed configuration oluşabilir. Bu örnek tek validated immutable snapshot’ı değiştirir; process restart veya provider notification bütün uygulamalarda otomatik değildir. Startup success, readiness ve dependency availability ayrı gözlemlerdir.
Secret delivery, kullanım ve revocation farklıdır
Secret, açığa çıkması erişimi veya cryptographic protection’ı etkileyen materyaldir; her configuration field secret değildir. Public theme veya limit ile database credential/private key aynı korunma ihtiyacını taşımaz. Environment injection bir delivery yöntemi olabilir, fakat tek başına secret vault, access control, encryption-at-rest, audit veya rotation kurmaz. Repository, build image, plaintext log ve dump yüzeylerinde secret lifecycle ayrıca korunur.
Secret management kaynağı version, yetkili consumer, rotation, revocation ve expiry state’lerini yönetir. Least privilege uygulanır ve value loglanmadan kullanım/audit metadata’sı tutulur. Rotation planı secret türüne ve dependency’ye bağlıdır; application service key ile insan password’üne aynı periyodik policy genellenmez. Eski version downstream tarafından hâlâ kabul edilebilir; source label değişimi revocation değildir.
Artifact credential olmayan sec-ref-a/sec-ref-b referanslarını ve accepted-version metadata’sını taşır. Kaynak b’ye geçerken process a’yı tüketmeye devam eder. Downstream b’yi kabul edip a’yı revoked saydığında eski process dependencyUnavailable sonucuna gider. Yeni validated snapshot b’ye geçince örnekteki dependency check başarılı olur. Bunlar gerçek vault response veya kullanılabilir token değildir; version teşhisi için gizli value’yu göstermek gerekmez.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Invalid startup
- Startup input contract’ı seçildi
ATLAS_FIXTURE_MODE=public ve ATLAS_FIXTURE_LIMIT=two fixed input olarak verilmiştir. Gerçek environment veya secret dosyası okunmaz.
- Config/version source
- cfg-invalid input
- Consumer validation
- Type validation yapılmadı
- Service/acceptance boundary
- Service listen etmedi
- String ile typed limit ayrıldı
Limit decimal integer olmalıdır; educationalMin=1 ve educationalMax=10 seçilidir. String two, bu contract için sayısal limit değildir.
- Config/version source
- Raw limit="two"
- Consumer validation
- Decimal-integer gate failed
- Service/acceptance boundary
- Service listen etmedi
- Startup acceptance durduruldu
startupOutcome=rejected kalır. Nonempty string’in truthy olması config type veya enum validation’ın geçtiği anlamına gelmez.
- Config/version source
- Invalid public input
- Consumer validation
- Startup rejected
- Service/acceptance boundary
- Service listen etmedi
- Varsayılan permission üretilmedi
Bu invalid input validInput içindeki "2" ile değiştirilmiş sayılmaz. Rejection sonucundan approved effective revision veya policy authority türetilmez.
- Config/version source
- cfg-invalid retained for diagnosis
- Consumer validation
- No normalized limit
- Service/acceptance boundary
- No accepted configuration
- Listening sonucu ayrı okundu
listening=false negatif execution sınırıdır. Bu fixture input reddini açıklar; gerçek deployment, process crash veya production availability ölçmez.
- Config/version source
- Known: invalid limit
- Consumer validation
- Known: startup rejected
- Service/acceptance boundary
- Known: listening=false
- Config trust sınırı korundu
İzinli yeni snapshot yalnız validation sonrası seçilir. Environment delivery’nin biçimi veya değişken adı, değerlerin trusted typed policy olduğunu kanıtlamaz.
- Config/version source
- No accepted snapshot
- Consumer validation
- Type gate remained closed
- Service/acceptance boundary
- No service activation claim
Eski consumer
- Version geçişi kapsamı seçildi
secretVersions source, consumer ve accepted alias’ları ayırır. sec-ref-a ve sec-ref-b gerçek credential değildir; artifact secret value içermez.
- Config/version source
- Version aliases only
- Consumer validation
- Consumer state okunmadı
- Service/acceptance boundary
- Acceptance sonucu yok
- Source rotation ayrı okundu
rotatedSource=sec-ref-b olurken oldConsumer=sec-ref-a kalır. Source değişimi process’in cached consumption state’ini otomatik yenilemez.
- Config/version source
- Source=sec-ref-b
- Consumer validation
- Old consumer=sec-ref-a
- Service/acceptance boundary
- Acceptance sonucu yok
- Downstream accepted set incelendi
afterRevocationAccepted yalnız sec-ref-b içerir. Bu kabul seti source rotation’dan değil, ayrı downstream revocation sonucu olarak verilmiştir.
- Config/version source
- Source=sec-ref-b
- Consumer validation
- Consumer=sec-ref-a
- Service/acceptance boundary
- Accepted=[sec-ref-b]
- Old consumer kabul edilmedi
oldConsumerAccepted=false seçili geçişin sonucudur. Stale version dependency failure olabilir; bu ret tek başına secret compromise attribution değildir.
- Config/version source
- Source=sec-ref-b
- Consumer validation
- Consumer=sec-ref-a
- Service/acceptance boundary
- Old consumer accepted=false
- Yeni consumer ayrı kontrol olarak kaldı
newConsumer=sec-ref-b için newConsumerAccepted=true’dur. Bu olumlu kontrol eski process’in zaten reload olduğu anlamına gelmez.
- Config/version source
- New source version known
- Consumer validation
- Old/new consumer contexts separate
- Service/acceptance boundary
- New accepted; old rejected
- Rotation revocation’a eşitlenmedi
rotationImpliesRevocation=false sınırı korunur. Source, consumption ve acceptance owner’ları ayrı doğrulanır; bütün secret’ları output’a basmak bu correlation için gerekmez.
- Config/version source
- Known: source b
- Consumer validation
- Known: consumer a
- Service/acceptance boundary
- Known: explicit downstream rejection
VARSAYIM · SINIR · KONTROL
Text input ile snapshot’ı hazır kabul etme
"false" veya "two" string’i beklenen type’a çevrilmeden truthy kabul edilirse mode veya limit kararı yanlış oluşabilir. Yanlış varsayım environment input’unun zaten normalized olduğu düşüncesidir. Etki field’in kullanımına bağlıdır: yanlış readiness, availability veya policy branch seçimi olabilir. Startup validation type kuralını uygulayıp yanlış girdiyi reddeder; bu örneğin 1..10 aralığı bütün servisler için ayar önerisi değildir.
Source revision değişti diye eski process’in yeni config kullandığını kabul etmek başka bir hatadır. Cached snapshot cfg-a ise cfg-b deployment metadata’sı effective state’i kanıtlamaz. Kabul edilen revision ve effective typed fields secret value içermeden ayrı gözlenir. Default/override precedence değişimi de doğrulanmadan aynı davranış sayılmaz.
Secret delivery korumanın tamamı değildir
Environment’a verilen materyali otomatik protected vault saymak access boundary’yi kaybettirir. Consumer rolü, source read access ve kullanım bağlamı değerlendirilir. Bütün config’i plaintext dump veya log’a yazmak secret exposure oluşturabilir; etki secret’ın yetkilerine bağlıdır. Source erişimi least privilege ile sınırlandırılır, value output’tan ayrılır ve secret lifecycle envanterle ilişkilendirilir.
Rotation ile downstream acceptance’ın eşzamanlı olduğunu varsaymak eski consumer’da dependency failure yaratabilir veya eski version’ı gereksiz yere valid bırakabilir. Source current=b gözlemi tek başına revoke=a sonucunu vermez. Accepted/rejected metadata revocation veya expiry uygulayan sistemden alınır. Alias a’nın reddi compromise göstergesi değildir; bu geçişte beklenen availability sonucudur.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Effective snapshot
- Config snapshot evidence seçildi
Başlangıç validInput public/"2" ve revision cfg-a taşır. Effective configuration typed limit=2 olarak ayrı normalize edilmiştir.
- Config observation
- Input cfg-a
- Snapshot correlation
- Effective snapshot okunmadı
- Evidence scope
- Refresh sonucu yok
- Source değişimi ayrı okundu
snapshotChange sourceRevisionAfter=cfg-b ve sourceLimitAfter="3" gösterir. Source text’in yenilenmesi running snapshot’ın değiştiğini kanıtlamaz.
- Config observation
- Source cfg-b / "3"
- Snapshot correlation
- Running snapshot okunuyor
- Evidence scope
- Refresh sonucu yok
- Running effective fields karşılaştırıldı
runningRevision=cfg-a ve runningLimit=2 kalır. Accepted source revision ile process consumption anı ayrı evidence alanlarıdır.
- Config observation
- Source cfg-b / "3"
- Snapshot correlation
- Running cfg-a / 2
- Evidence scope
- No automatic refresh
- Yeni validated snapshot ayrı tutuldu
newValidatedRevision=cfg-b ve newValidatedLimit=3 ayrı sonucu gösterir. Bu snapshot’ın validated olması eski running process’in replacement’ı tamamladığını söylemez.
- Config observation
- New validated cfg-b / 3
- Snapshot correlation
- Running cfg-a / 2
- Evidence scope
- Replacement receipt not shown
- Selector false refresh iddiasını aradı
Source ve effective revision farklıyken automaticallyRefreshed=true iddiası aranır. Ana XML 0, ayrı positive fixture 1 verir; bunlar secret audit stream’i değildir.
- Config observation
- Source/effective difference known
- Snapshot correlation
- Main count=0; positive=1
- Evidence scope
- Claim scope explicit
- Effective-state hükmü genişletilmedi
Bu fixture running cfg-a ile validated cfg-b ayrımını gösterir. Gerçek environment scan, deployment veya bütün consumers’ın reload sonucu yoktur.
- Config observation
- Known: old running snapshot
- Snapshot correlation
- Known: new validated snapshot
- Evidence scope
- UNKNOWN: actual rollout
Observation eksik
- Revision gözlem kapsamı daraltıldı
Bu branch yalnız source revision bilgisi sunulan incelemeyi ele alır. Effective consumer observation eksik olduğunda source’u running state yerine kullanmaz.
- Config observation
- Source metadata only
- Snapshot correlation
- Consumer observation missing
- Evidence scope
- Refresh hükmü yok
- Gereken selector alanları ayrıldı
Selector sourceRevision, effectiveRevision ve automaticallyRefreshed ilişkisini ister. Source alanının tek başına bulunması bu predicate’i değerlendirmeye yetmez.
- Config observation
- Source metadata only
- Snapshot correlation
- Required consumer fields absent
- Evidence scope
- UNKNOWN: effective revision
- Missing ile false ayrımı korundu
Consumer elementi veya gerekli field sunulmadığında automaticallyRefreshed=false diye kesin değer üretilmez. Missing observation, başarılı veya başarısız reload kaydı değildir.
- Config observation
- Source metadata only
- Snapshot correlation
- Unknown, not a false refresh value
- Evidence scope
- UNKNOWN: effective revision
- Zero match temiz rollout sayılmadı
Missing observation selector’a eşleşme vermeyebilir. count=0 bu durumda bütün consumers’ın cfg-b kullandığını veya secret rotation’ın tamamlandığını kanıtlamaz.
- Config observation
- Source metadata only
- Snapshot correlation
- Selection coverage incomplete
- Evidence scope
- UNKNOWN: consumer update
- Benign metadata kanıtı istendi
Consumer role, effective revision ve observation zamanı gerekir. Credential value’yu veya tüm environment’ı export etmek bu dar correlation için gerekli değildir.
- Config observation
- Source metadata only
- Snapshot correlation
- Effective metadata required
- Evidence scope
- No secret export needed
- Eksik kanıt hükmü korundu
Kaynak değişimi bilinebilir; running consumption ve downstream acceptance UNKNOWN kalır. Outage veya compromise nedeni bu boşluktan üretilmez.
- Config observation
- Known: source metadata
- Snapshot correlation
- UNKNOWN: effective consumption
- Evidence scope
- UNKNOWN: downstream acceptance
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Effective config’i secret sızdırmadan oku
Startup input’unu enum, type ve required field kurallarıyla değerlendir. Public/"2" girdisi normalized limit=2’ye, "two" girdisi rejected startup sonucuna gider. Kabul edilen cfg-a revision’ı ile source cfg-b revision’ını ayrı kaydet. Public mode ve limit gözlenebilir; credential value bunlara katılmaz. Eksik field gözlemi otomatik false veya safe default değildir.
Precedence ve read timing’i service sözleşmesine bağla. Startup snapshot kullanan service’te source environment değişiminin effective davranışı güncellemediğini göster; validated replacement veya restart sonucunu ayrı izle. Local process değişikliğinin parent veya Worker copy’sine yansıdığı iddiası kendi kapsamına uygun kanıt ister. Teşhis için bütün environment dump’ı yerine gereken public field ve revision metadata’sı yeterlidir.
Source ile consumer version’ını ayrı izle
Secret source current alias, process consumed alias ve downstream accepted alias aynı field değildir. Audit consumer rolünü, operation sonucunu, version alias’ını ve gözlem zamanını tutar; gizli value yazılmaz. Current=b, process=a, accepted=b akışında rejection eski snapshot ile açıklanır. Bu sonuç yalnız source rotation’dan değil, downstream acceptance koşulundan çıkarılır.
Yeni version’ın uygun consumer’da çalıştığını doğrula; eski version’ın kabul süresini ve revocation’ı uygulayan bileşeni açıkça belirle. Dependency failure’ını çözmek için bütün secret’ları herkese açmak gerekmez; process’in snapshot’ı ve yetkileri düzeltilir. İnsan password’ü ile application key rotation’ı farklıdır. Bu küçük metadata tablosu gerçek vault encryption, access audit veya production rollout’u kanıtlamaz.
Artifact XPath’i sourceRevision ile effectiveRevision farklıyken automaticallyRefreshed=true yazılan iddiaları seçer. Normal eski snapshot kaydında sonuç 0, yanlış refresh iddiasında 1’dir. XML source/current/effective ilişkisini kontrol eder; secret audit stream’i değildir. Consumer elementi eksikken count=0 sonucu yeterli kanıt bulunmadığını gösterir; successful rotation diye yorumlanmaz.
ŞİMDİ VAKAYA UYGULA
Type validation, snapshot ve downstream acceptance nasıl ayrılır?
Public config alanları typed startup snapshot’a dönüşür; secret version aliases source, consumer ve accepted set için ayrı tutulur.
Vakadaki input, server işleme ve response için karar sırasını çıkar. Parsed veya valid data ile completed operation aynı sonuç değildir; hangi owner’ın hangi koşulu değerlendirdiğini belirt.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Configuration ve version tüketim defteri
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"validationContract": {
"modeEnum": [
"public"
],
"limitDecimalInteger": true,
"educationalMin": 1,
"educationalMax": 10,
"precedence": "explicit supplied input only; no external env scan"
},
"validInput": {
"ATLAS_FIXTURE_MODE": "public",
"ATLAS_FIXTURE_LIMIT": "2",
"revision": "cfg-a"
},
"normalized": {
"mode": "public",
"limit": 2,
"revision": "cfg-a",
"immutableSnapshotSupplied": true
},
"invalidInput": {
"ATLAS_FIXTURE_MODE": "public",
"ATLAS_FIXTURE_LIMIT": "two",
"revision": "cfg-invalid",
"startupOutcome": "rejected",
"listening": false
},
"snapshotChange": {
"sourceRevisionBefore": "cfg-a",
"sourceRevisionAfter": "cfg-b",
"sourceLimitAfter": "3",
"runningRevision": "cfg-a",
"runningLimit": 2,
"newValidatedRevision": "cfg-b",
"newValidatedLimit": 3
},
"secretVersions": {
"aliasesAreCredentials": false,
"initialSource": "sec-ref-a",
"initialConsumer": "sec-ref-a",
"initialAccepted": [
"sec-ref-a"
],
"rotatedSource": "sec-ref-b",
"oldConsumer": "sec-ref-a",
"afterRevocationAccepted": [
"sec-ref-b"
],
"oldConsumerAccepted": false,
"newConsumer": "sec-ref-b",
"newConsumerAccepted": true,
"rotationImpliesRevocation": false,
"valueStoredInArtifact": false
},
"selector": {
"language": "XPath",
"xml": "<observations><consumer sourceRevision=\"cfg-b\" effectiveRevision=\"cfg-a\" automaticallyRefreshed=\"false\"/></observations>",
"xpath": "count(/observations/consumer[@sourceRevision!=@effectiveRevision and @automaticallyRefreshed=\"true\"])",
"expected": 0,
"positiveFixtureXml": "<observations><consumer sourceRevision=\"cfg-b\" effectiveRevision=\"cfg-a\" automaticallyRefreshed=\"true\"/></observations>",
"positiveExpected": 1,
"scope": "Only authored protocol-decision observations, not product log field names or a live HTTP capture.",
"missingFieldBehavior": "Missing observation is insufficient evidence; zero matches is not proof of correct runtime behavior."
}
}- validationContract / input
- Örneğe verilen string girdiler ve validation kuralları; range eğitim için seçilmiştir.
- normalized / snapshotChange
- Kabul edilen typed state, source revision metadata’sından ayrı tutulur.
- secretVersions
- Credential içermeyen version referansları ve downstream acceptance koşulları.
Inert metadata’dır; process.env envanteri veya gerçek credential/vault response’u içermez. Validation ve snapshot policy bu uygulama örneğine aittir.
İki yanlış kanı
Environment variable config’i zaten typed ve secret-safe yapar.
Values text olabilir; type validation ile secret delivery/protection ayrı kararlar ister.
Source secret version değişince bütün running consumer’lar refresh olur ve eski version revoked olur.
Consumer snapshot, source rotation ve downstream revocation farklı sahiplik ve geçişlerdir.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
ATLAS_FIXTURE_LIMIT değeri two string’i. Startup sırasında listener açılır mı?
- Hayır. Startup reddedilir; listening=false.
- Evet. Geçersiz config sessizce varsayılan değere çevrilir.
Gerekçeli cevabı oku
Hayır. Startup reddedilir; listening=false. — Sözleşme 1–10 arasında decimal integer ister. two bu koşulu sağlamaz ve geçerli limit olarak kabul edilmez.
Config source cfg-b/limit=3 oldu. Çalışan process neden hâlâ cfg-a/limit=2 gösteriyor?
Dersten seçilen artifact alanları; öğretim örneği
- snapshotChange
- {"sourceRevisionBefore":"cfg-a","sourceRevisionAfter":"cfg-b","sourceLimitAfter":"3","runningRevision":"cfg-a","runningLimit":2,"newValidatedRevision":"cfg-b","newValidatedLimit":3}
- Source değişikliği bütün process.env değerlerini anında değiştirir.
- Snapshot değişmez; doğrulanmış reload veya yeni process gerekir.
Gerekçeli cevabı oku
Snapshot değişmez; doğrulanmış reload veya yeni process gerekir. — Source’u değiştirmek consumer memory’sini otomatik güncellemez. Yeni revision, consumer tarafından ayrıca doğrulanıp alınmalıdır.
Secret source sec-ref-b’ye döndürüldü. Eski consumer’ın reddedilmesi ve yenisinin yeni referansı kullanması neden ayrı koşullardır?
Gerekçeli cevabı oku
Source yeni version yayınlasa da consumer eski referansı kullanmaya devam edebilir. Authority kabul kümesini b ile sınırladığında oldConsumerAccepted=false olur. Yeni consumer ise b referansını ayrıca almalıdır. Rotation tek başına revocation değildir. Bu örnekte yalnız alias’lar vardır; gerçek credential byte’ları, environment veya secret store okunmaz.
□ Rotation, yeni sürümü alma ve revocation adımlarını ayırdım.
□ Alias’ı gerçek secret materyali saymadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- Node.js v24.13.0 — Processprocess.env
- Node.js — Environment VariablesEnvironment Variables · process.env · DotEnv · Variable Values
- OWASP — Secrets Management Cheat Sheet1 Introduction · 2.3 Access Control · 2.6 Auditing · 2.7 Secret Lifecycle · 2.7.2 Rotation · 2.7.3 Revocation · 2.7.4 Expiration · 5.1 Injection of Secrets (file, in-memory) · 8.3 Detection lifecycle