Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

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.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Geçerli config

  1. Ö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ı
  2. 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ı
  3. 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ı
  4. 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ı
  5. 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ı
  6. 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

  1. 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ı
  2. 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ı
  3. 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ı
  4. 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ı
  5. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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]
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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ı?

  1. Hayır. Startup reddedilir; listening=false.
  2. 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}
  1. Source değişikliği bütün process.env değerlerini anında değiştirir.
  2. 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