Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-20.S03

Service identity ve async context propagation

Job context’i worker’a ulaşır, fakat trace veya workload identity işlem yetkisi vermez. Güncel amaç ve zaman koşullarını izle.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Read izinli

  1. Job context hazır

    API, yalnız onaylı context alanlarını yeni job object’ine kopyalar. Trace alias ilişkilendirme içindir, identity kanıtı değildir.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Queue waiting; no delivery
    Notes worker
    Worker waiting; protected body absent
    Public note store
    note-A unchanged; no read
  2. Job queue’ya ulaştı

    Queue job’u aldığını kaydeder. Bu receipt worker’ın güncel permission kararını göstermez.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Owned job received; worker delivery pending
    Notes worker
    Worker waiting; protected body absent
    Public note store
    note-A unchanged; no read
  3. Worker teslimi hazır

    Queue aynı job’u worker’a teslim etmek üzere hazırlar. Bu scheduling adımı yerel işlemdir.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Worker waiting; protected body absent
    Public note store
    note-A unchanged; no read
  4. Context worker’a ulaştı

    Worker context’i job tesliminde alır. Workload ve provenance doğrulaması bu modelde verilen girdilerdir.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Job received; current recipient/purpose/time pending
    Public note store
    note-A unchanged; no read
  5. Güncel koşullar kabul edildi

    Worker audience, purpose, time, action ve object koşullarını kabul eder. Store read bundan sonra hazırlanır.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Current workload/context/resource allow; read ready
    Public note store
    note-A unchanged; no read
  6. Read store’a ulaştı

    Store onaylı public-note read’i alır. Read-only title projection henüz hazırlanmamıştır.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Current workload/context/resource allow; read ready
    Public note store
    Approved note-A read received; title pending
  7. Title hazır

    Store Tea & Bread title projection’ını yerel read-only işlemle hazırlar. Mutation=false kalır.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Current workload/context/resource allow; read ready
    Public note store
    Tea & Bread title body ready; mutation=false
  8. Body worker’a ulaştı

    Title body worker’a ulaşır. API veya browser’a dönüş ve queue ACK bu sahnede gösterilmez.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Received title=Tea & Bread; read-only success
    Public note store
    Tea & Bread title body ready; mutation=false

Purpose uyuşmaz

  1. Job context hazır

    API, yalnız onaylı context alanlarını yeni job object’ine kopyalar. Trace alias ilişkilendirme içindir, identity kanıtı değildir.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Queue waiting; no delivery
    Notes worker
    Worker waiting; protected body absent
    Public note store
    note-A unchanged; no read
  2. Job queue’ya ulaştı

    Queue job’u aldığını kaydeder. Bu receipt worker’ın güncel permission kararını göstermez.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Owned job received; worker delivery pending
    Notes worker
    Worker waiting; protected body absent
    Public note store
    note-A unchanged; no read
  3. Worker teslimi hazır

    Queue aynı job’u worker’a teslim etmek üzere hazırlar. Bu scheduling adımı yerel işlemdir.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Worker waiting; protected body absent
    Public note store
    note-A unchanged; no read
  4. Context worker’a ulaştı

    Worker context’i job tesliminde alır. Workload ve provenance doğrulaması bu modelde verilen girdilerdir.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Job received; current recipient/purpose/time pending
    Public note store
    note-A unchanged; no read
  5. Güncel context değerlendirildi

    Worker recipient, purpose ve lifetime koşullarını değerlendirir. Eksik context ile bilinen ret farklı sonuçlardır.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Current gate denied
    Public note store
    note-A unchanged; no read
  6. Store read durduruldu

    Gerekli context koşulu kabul edilmediği için store’a mesaj gönderilmez ve title body oluşturulmaz.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Resource delivery=0; protected title body absent
    Public note store
    note-A unchanged; no read
  7. Ret nedeni ayrıldı

    Context eksikliği, purpose veya zaman reddinden ayrı tutulur. Trace’in devam etmesi işlem yetkisi oluşturmaz.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Known purpose/time denial; mutation=false
    Public note store
    note-A unchanged; no read

Context eksik

  1. Job context hazır

    API, yalnız onaylı context alanlarını yeni job object’ine kopyalar. Trace alias ilişkilendirme içindir, identity kanıtı değildir.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Queue waiting; no delivery
    Notes worker
    Worker waiting; protected body absent
    Public note store
    note-A unchanged; no read
  2. Job queue’ya ulaştı

    Queue job’u aldığını kaydeder. Bu receipt worker’ın güncel permission kararını göstermez.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Owned job received; worker delivery pending
    Notes worker
    Worker waiting; protected body absent
    Public note store
    note-A unchanged; no read
  3. Worker teslimi hazır

    Queue aynı job’u worker’a teslim etmek üzere hazırlar. Bu scheduling adımı yerel işlemdir.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Worker waiting; protected body absent
    Public note store
    note-A unchanged; no read
  4. Context worker’a ulaştı

    Worker context’i job tesliminde alır. Workload ve provenance doğrulaması bu modelde verilen girdilerdir.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Job received; current recipient/purpose/time pending
    Public note store
    note-A unchanged; no read
  5. Güncel context değerlendirildi

    Worker recipient, purpose ve lifetime koşullarını değerlendirir. Eksik context ile bilinen ret farklı sonuçlardır.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Context evidence unknown
    Public note store
    note-A unchanged; no read
  6. Store read durduruldu

    Gerekli context koşulu kabul edilmediği için store’a mesaj gönderilmez ve title body oluşturulmaz.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Resource delivery=0; protected title body absent
    Public note store
    note-A unchanged; no read
  7. Ret nedeni ayrıldı

    Context eksikliği, purpose veya zaman reddinden ayrı tutulur. Trace’in devam etmesi işlem yetkisi oluşturmaz.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Unknown context; safe deny; mutation=false
    Public note store
    note-A unchanged; no read

Context expired

  1. Job context hazır

    API, yalnız onaylı context alanlarını yeni job object’ine kopyalar. Trace alias ilişkilendirme içindir, identity kanıtı değildir.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Queue waiting; no delivery
    Notes worker
    Worker waiting; protected body absent
    Public note store
    note-A unchanged; no read
  2. Job queue’ya ulaştı

    Queue job’u aldığını kaydeder. Bu receipt worker’ın güncel permission kararını göstermez.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Owned job received; worker delivery pending
    Notes worker
    Worker waiting; protected body absent
    Public note store
    note-A unchanged; no read
  3. Worker teslimi hazır

    Queue aynı job’u worker’a teslim etmek üzere hazırlar. Bu scheduling adımı yerel işlemdir.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Worker waiting; protected body absent
    Public note store
    note-A unchanged; no read
  4. Context worker’a ulaştı

    Worker context’i job tesliminde alır. Workload ve provenance doğrulaması bu modelde verilen girdilerdir.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Job received; current recipient/purpose/time pending
    Public note store
    note-A unchanged; no read
  5. Güncel context değerlendirildi

    Worker recipient, purpose ve lifetime koşullarını değerlendirir. Eksik context ile bilinen ret farklı sonuçlardır.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Current gate denied
    Public note store
    note-A unchanged; no read
  6. Store read durduruldu

    Gerekli context koşulu kabul edilmediği için store’a mesaj gönderilmez ve title body oluşturulmaz.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Resource delivery=0; protected title body absent
    Public note store
    note-A unchanged; no read
  7. Ret nedeni ayrıldı

    Context eksikliği, purpose veya zaman reddinden ayrı tutulur. Trace’in devam etmesi işlem yetkisi oluşturmaz.

    Notes API
    Approved field copy; own job ready
    Owned queue
    Approved copied job ready for worker
    Notes worker
    Known purpose/time denial; mutation=false
    Public note store
    note-A unchanged; no read

ROLLER · STATE · VERİ AKIŞI

Workload ve end-user iki farklı actor’dır

Bir service’in kimliği, onun hangi end-user adına hangi action’ı yapabileceği ile aynı şey değildir. Notes API’nin Queue’ya kabul edilen workload olması, Duru adına tüm tenant verilerini okuma izni yaratmaz. Service connection identity’si uygun trust roots/issuer ve alıcı profile ile doğrulanır; user delegation ayrıca subject, tenant, purpose, audience, action ve object sınırlarına bağlanır. SPIFFE, workload identity ve onu kanıtlayan SVID kavramını tanımlar; belirli bir SPIFFE ID’nin notes.read permission’ı uygulama policy’sinin kararıdır. Bu derste credential veya SVID byte’ı yoktur. WorkloadVerifiedDeclared, seçilmiş fixture’ın bağımsız girdisidir; ders bu boolean’ı gerçek TLS veya token verification sonucu diye sunmaz. Böylece sender’ı tanıma, user assertion’a güvenme ve resource’a izin verme üç ayrı soruda kalır.

Queue gecikmesi context’in anlamını değiştirir

Async job enqueue anında kabul edilmiş olabilir, ancak worker daha sonra farklı now veya policy revision altında çalışır. Bu nedenle job context’i trusted provenance ile taşınır ve worker kendi operation’ı için audience/purpose/time/action sınırlarını yeniden değerlendirir. Artifact public-note-read purpose’ını notes-worker audience’ına ve note-A object’ine bağlar. validUntil=200 için now=200 equality geçersizdir; bu profilin seçtiği boundary’dir. Purpose farklıysa user’ın adı ve tenant’ı doğru olsa bile read store’a gitmez. Context eksikse permissionUnknown olarak kaydedilir ve güvenli deny seçilir. Queue receipt veya ACK business success anlamına gelmez; bir job’ın geldiğini gösterir. Retries ve idempotency de yetki sağlamaz: aynı job’ın tekrar işlenmesini kontrol etmek ile actor/purpose doğrulamak farklı problemlerdir.

Correlation context identity değildir

Trace context, farklı component’lerdeki aynı işin izini ilişkilendirir. W3C traceparent/tracestate alanlarının amacı correlation’dır; bu alanlara sensitive user claim yerleştirilmez. Defterde trace-A yalnız okunur bir öğretim alias’ıdır, gerçek traceparent syntax’ı değildir. Alias’ın eşleşmesi workload, subject veya permission kanıtı üretmez. Authentication context ile tracing context ayrı field’larda, ayrı provenance ve retention kurallarıyla yönetilir. Yerel kopyalama işleminde yalnız approved job field’ları yeni object’e aktarılır; ana request object’ine referans taşımak başka bir işin state’ini karıştırabilir. AsyncLocalStorage gibi runtime araçları, tek process içindeki async continuation’larda context’i tutmaya yardımcı olur; network veya queue boundary’sinde identity assertion oluşturmaz. Deserialize edilmiş context’in yeniden güvenilir sayılması için alıcının kendi validation’ı gerekir.

Serverless execution reuse ve least privilege

Serverless olmak her invocation’ın yeni process olduğu anlamına gelmez. Execution environment tekrar kullanılabilir; SDK client veya static resource reuse ile request’e özel actor/context state’i birbirinden ayrılır. AWS Lambda’nın function code rehberi user data ve security açısından önemli event state’ini invocation’lar arasında saklamamayı önerir. Dersin yerel iki-context kontrolü Duru/job-A ile Ece/job-B’nin ayrı async store ve kopyalarda kaldığını gösterir; gerçek Lambda isolation testi değildir. Workload’ın platform permission’ı da minimum service rolüyle sınırlandırılır; user delegation o rolün yerine geçmez. Queue consumer’ın readNotes rolü varsa bile current context geçersizken note-A body’si üretilmez. Deployment platformu, token exchange, actual clock sync ve revocation propagation bu modelin dışındaki bağımlılıklardır; bunların kanıtı varmış gibi davranılmaz.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Purpose ret

  1. Workload predicate olumlu

    Wrong-purpose row workloadVerifiedDeclared=true ve assertionIssuerTrustedDeclared=true taşır. Bu iki supplied alan job’un resource action’ına izin vermez.

    Workload / job
    workloadVerifiedDeclared=true
    Worker kararı
    assertionIssuerTrustedDeclared=true
    Güven sınırı
    Resource kararı henüz incelenmedi
  2. Context var, purpose farklı

    ContextPresent=true, subject=Duru ve tenant=tenant-A verilmiş. Purpose=note-export ise seçilen public-note-read purpose’ı değildir.

    Workload / job
    subject=Duru / tenant=tenant-A
    Worker kararı
    purpose=note-export
    Güven sınırı
    Beklenen purpose public-note-read
  3. Resource allowed tek başına yetmez

    ResourceAllowedDeclared=true olsa da job’un purpose koşulu uymuyor. Güncel gate’ler birlikte değerlendirilir.

    Workload / job
    resourceAllowedDeclared=true
    Worker kararı
    purpose mismatch
    Güven sınırı
    Purpose ayrıca gerekir
  4. Worker kabul etmedi

    ExpectedAllowed=false, expectedBody=null ve expectedResourceDelivery=false. Trusted workload, bu purpose ret kararını ortadan kaldırmaz.

    Workload / job
    expectedAllowed=false
    Worker kararı
    expectedBody=null
    Güven sınırı
    Store body teslimi yok
  5. Service role’leri genişletme

    Notes-api’nin enqueue role’ü ve queue’nun delivery role’ü worker’ın current read gate’ini atlayamaz. Bir hop’un rolü sonraki hop’un resource kararı değildir.

    Workload / job
    notes-api: enqueue
    Worker kararı
    notes-worker: current context gate
    Güven sınırı
    Her sınırda kendi karar
  6. Purpose’u aynı job için raporla

    Bu dal workload verification değil purpose koşulunda durur. Başka job’un doğru purpose’ı bu kaydı tamamlamaz.

    Workload / job
    workload declared=true
    Worker kararı
    purpose=note-export / allowed=false
    Güven sınırı
    Bilinen purpose ret

Süre sınırı

  1. Context kimliği ve scope’u mevcut

    Expired row Duru, tenant-A, public-note-read ve notes-worker alanlarını taşır. Bu uygun alanlar time gate’in yerine geçmez.

    Workload / job
    subject=Duru / audience=notes-worker
    Worker kararı
    purpose=public-note-read
    Güven sınırı
    Time gate henüz incelenmedi
  2. Now sınırın üzerinde değil, eşit

    Now=200 ve validUntil=200. Bu örnek current time için now < validUntil ister; eşitlik kabul değildir.

    Workload / job
    now=200
    Worker kararı
    validUntil=200
    Güven sınırı
    200 < 200 false
  3. Diğer olumlu alanlar süreyi uzatmaz

    ResourceAllowedDeclared=true ve policyRevision=notes-policy-3 verilmiş. Bu alanlar validUntil değerini değiştirmez.

    Workload / job
    resourceAllowedDeclared=true
    Worker kararı
    now=validUntil
    Güven sınırı
    Current time koşulu ayrı
  4. Süresi dolan iş body almaz

    ExpectedAllowed=false ve expectedResourceDelivery=false. Bu row için store’dan worker’a başarılı title teslimi üretilmez.

    Workload / job
    expectedAllowed=false
    Worker kararı
    expectedResourceDelivery=false
    Güven sınırı
    expectedBody=null
  5. Enqueue zamanı güncel kabul değildir

    İş queue’da bekleyebilir. Daha önce geçerli olan context, worker’ın aldığı anda time koşulunu tekrar karşılamak zorundadır.

    Workload / job
    now=200 / validUntil=200
    Worker kararı
    current time gate failed
    Güven sınırı
    Güncel karar gerekir
  6. Expiry ile revocation ayrı

    Bu kayıt seçilen expiry karşılaştırmasını gösterir. ActualRevocation=false olduğu için gerçek identity servisinde revocation uygulandığı sonucuna genişletilmez.

    Workload / job
    time predicate=false
    Worker kararı
    actualRevocation=false
    Güven sınırı
    Yalnız seçilen time gate

VARSAYIM · SINIR · KONTROL

İç ağdan geldi; user context doğrudur varsayımı

İncelenecek varsayım internal connection’ın veya bilinen service adının her user assertion’ına otorite verdiğidir. Bu sonuç için service’in assertion üretme yetkisi ve recipient’ın doğrulama policy’si kaybolmuş olmalıdır. Workload authentication sender’a ilişkindir; “Duru adına public-note-read” assertion’ı farklı bir issuer ve delegation trust kararı gerektirebilir. Defterin wrong-purpose dalında workload tanınır, user context vardır, ama istenen purpose notes-worker profile’ıyla uyuşmaz. Bu branch bir token değiştirme veya bypass denemesi değildir; supplied normal policy satırı yanlış amaç için güvenli biçimde kapanır. Internal hostname, queue adı, trace alias veya başarılı receipt bu kapıyı açmaz. Gerçek bağlantı identity’si incelenmemişse de sonuç saldırı başarısı değildir: workload verification’ın declared bir dependency olduğu açıkça yazılır.

Gecikmiş ve eksik context’i ayırmak

Queue’ya zamanında verilmiş context, worker’ın execution anında hâlâ kabul edilebilir olmayabilir. Bunun impact’i, current time veya policy gate’i yerine eski admission sonucunun kullanılması durumunda doğar. Expired satırı bilinen zaman uyuşmazlığını taşır; context-missing satırı ise actor delegation hakkında yeterli kanıt olmadığını taşır. İkisinin de güvenli sonucu resource delivery=0 ve body=null’dır, ancak teşhisleri farklı kalır. Trace’in devam etmesi identity’nin devam ettiği sonucunu vermez. Aynı mutable object’in iki iş arasında paylaşılması da runtime state karışmasıdır; bu ders yalnız approved copied context ile pozitif isolation gözlemi yapar. Red perspektif supplied koşulların hangisinin gerekli olduğunu sorar, gerçek queue’da privilege yükseltme veya credential kullanımı denemez. Actual distributed replay/retry davranışı için bu finite model kanıt sayılmaz.

3. Blue · Güvenli geliştirme ve savunma

Hareket olmadan bütün senaryoları oku

Context eksik

  1. Workload girdisi yine olumlu

    Yerel Node AsyncLocalStorage kontrolü jobId ve subject’in iki async scope’ta ayrı kaldığını ölçer. Worker policy satırları ise purpose, audience ve validUntil girdilerine göre üretilir; bunlar queue log’u, signature verification veya IAM kanıtı değildir. Context-missing row workloadVerifiedDeclared=true taşır. Bu service-level girdi user context’in varlığına dair bilgi değildir.

    Job gözlemi
    workloadVerifiedDeclared=true
    Context / store sonucu
    assertionIssuerTrustedDeclared=true
    Kanıt sınırı
    User context ayrıca incelenir
  2. Subject ve tenant yok

    ContextPresent=false, subject=null ve tenant=null. Missing alanlar normal row’daki Duru ve tenant-A ile doldurulmaz.

    Job gözlemi
    contextPresent=false
    Context / store sonucu
    subject=null / tenant=null
    Kanıt sınırı
    User permission bilgisi UNKNOWN
  3. Resource true context yaratmaz

    ResourceAllowedDeclared=true olsa da row permissionEvidence=unknown taşır. Boolean bir resource girdisi eksik subject/tenant bağını oluşturmaz.

    Job gözlemi
    resourceAllowedDeclared=true
    Context / store sonucu
    permissionEvidence=unknown
    Kanıt sınırı
    Context binding gerekli
  4. Model fail closed durur

    ExpectedAllowed=false ve expectedBody=null. Bu sonuç bilinmeyen user context’i belirli bir user için bilinen ret kararına dönüştürmez.

    Job gözlemi
    expectedAllowed=false
    Context / store sonucu
    expectedBody=null
    Kanıt sınırı
    Ret nedeni eksik context
  5. Trace identity değildir

    Correlation.traceAlias=trace-A, identityEvidence=false ve permissionEvidence=false. İşleri ilişkilendiren bir alias subject’in kimliği veya permission’ı değildir.

    Job gözlemi
    traceAlias=trace-A
    Context / store sonucu
    identityEvidence=false / permissionEvidence=false
    Kanıt sınırı
    Correlation kendi kapsamındadır
  6. Gereken context’i açıkça belirt

    Bu job için doğrulanmış subject/tenant ve current gate bilgisi gerekir. Queue delivery veya trace alias eksik alanların yerine geçmez.

    Job gözlemi
    subject / tenant evidence missing
    Context / store sonucu
    permissionEvidence=unknown
    Kanıt sınırı
    Aynı job için current context gerekir

Worker’a teslim

  1. Normal row scope’u belirli

    Yerel Node AsyncLocalStorage kontrolü jobId ve subject’in iki async scope’ta ayrı kaldığını ölçer. Worker policy satırları ise purpose, audience ve validUntil girdilerine göre üretilir; bunlar queue log’u, signature verification veya IAM kanıtı değildir. Normal row Duru, tenant-A, notes.read ve note-A taşır. İncelenen sonuç bu job’un public title okumasına aittir.

    Job gözlemi
    subject=Duru / tenant=tenant-A
    Context / store sonucu
    action=notes.read / noteId=note-A
    Kanıt sınırı
    Bir job’un scope’u
  2. Current gate kabul etti

    Purpose ve audience eşleşir; now=150, validUntil=200. Row expectedAllowed=true taşır; başka job’un gate sonucu buna kopyalanmaz.

    Job gözlemi
    now=150 < validUntil=200
    Context / store sonucu
    expectedAllowed=true
    Kanıt sınırı
    Seçilen gate kabulü
  3. Body worker’a ait sonuç

    ExpectedResourceDelivery=true ve expectedBody.title=Tea & Bread. DeliveryBoundary bu başarının store-to-worker body olduğunu söyler.

    Job gözlemi
    expectedBody.title=Tea & Bread
    Context / store sonucu
    deliveryBoundary=store-to-worker
    Kanıt sınırı
    Worker receipt
  4. Read-only sonuç mutation değildir

    ExpectedMutation=false. Title’ın okunması note üzerinde yazma yapıldığı veya başka action’a izin verildiği anlamına gelmez.

    Job gözlemi
    expectedResourceDelivery=true
    Context / store sonucu
    expectedMutation=false
    Kanıt sınırı
    Read ile write ayrı
  5. API ve browser dönüşü gösterilmiyor

    DeliveryBoundary açıkça no API/browser return der. Worker’ın body alması Duru’nun browser’da sonucu gördüğünü kanıtlamaz.

    Job gözlemi
    store-to-worker body observed
    Context / store sonucu
    no API/browser return
    Kanıt sınırı
    Browser receipt UNKNOWN
  6. Önce tamamlanan hop’u raporla

    Bilinen sonuç current gate sonrası read-only store body’sinin worker’a teslimidir. Trace correlation ile downstream receipt veya retry guarantee eklenmez.

    Job gözlemi
    worker body=Tea & Bread
    Context / store sonucu
    actualRetryGuarantee=false
    Kanıt sınırı
    Teslim scope’u worker’da biter

UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA

Her recipient kendi gate’ini tutar

Yerel Node AsyncLocalStorage kontrolü jobId ve subject’in iki async scope’ta ayrı kaldığını ölçer. Worker policy satırları ise purpose, audience ve validUntil girdilerine göre üretilir; bunlar queue log’u, signature verification veya IAM kanıtı değildir. Notes API, Queue ve Worker için service role’leri açıkça ayrılır: enqueue, dequeue ve notes.read aynı permission değildir. User context minimal approved field projection ile taşınır; downstream recipient kendisine uygun audience, purpose, lifetime ve resource scope’ı doğrular. Geçerli bir signature varsa bile onu belirli assertion’ı üretmeye yetkili issuer’a bağlamak gerekir; burada signature çalıştırılmaz. Başka service’e context aktarmak gerektiğinde amaç ve recipient için uygun delegation veya exchange profili tasarlanır; bir ID token veya user bearer material körlemesine kopyalanmaz. Modelin success dalı store’un read-only title projection’ını worker’a getirir; API’ye veya son browser’a teslim edildiği iddia edilmez. Service verification, user delegation ve resource permission için ayrı telemetry outcome’ları hata nedenini görünür kılar.

Isolation ve başarısızlığın sonuçları

Yerel runtime kontrolünde iki Promise continuation, ayrı AsyncLocalStorage.run scope’larında kendi jobId ve subject değerini görür. Bu, Node içindeki actual context davranışıdır; başka process’in trust kararı değildir. Copied job object’inin title veya trace field’ını değiştirmek original request’i veya ikinci işi değiştirmemelidir. Policy fixture’ları wrong-purpose, expired ve missing-context için store’a mesaj çıkmadığını, mutation yapılmadığını ve protected title body’si oluşmadığını denetler. Unknown context, known-deny ile tek kanıt diye birleştirilmez. Production tasarımında yeniden denemeler, revocation, key rotation ve current policy revision ayrı entegrasyonlarla doğrulanır; idempotency key bir permission belgesi değildir. Serverless environment reuse için request state’i per-invocation scope’da kalır. Bu dersin deterministik sahnesi queue ACK, actual token validation veya cloud IAM enforcement testi olarak sunulmaz.

ŞİMDİ VAKAYA UYGULA

Trusted workload ve correlation, güncel user permission yerine geçer mi?

Duru public note-A başlığını ister. Notes-api, queue ve notes-worker farklı role’ler taşır; worker işi aldığında purpose, audience, zaman ve resource context’ini yeniden değerlendirir.

Vakadaki accepted, delivery ve committed effect kayıtlarını farklı owner’lar üzerinden oku. Caller’ın bilinmeyen sonucunu business rollback olarak yeniden adlandırma.

Bağlı vaka dosyasını aç ↗

ÖRNEĞİ BİRLİKTE OKUYALIM

Atlas Notları — async context kaydı

Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.

Ham kaydı ve alan açıklamalarını oku
{
  "profile": {
    "actor": "Duru",
    "tenant": "tenant-A",
    "action": "notes.read",
    "noteId": "note-A",
    "title": "Tea & Bread",
    "purpose": "public-note-read",
    "audience": "notes-worker",
    "now": 150,
    "validUntil": 200,
    "policyRevision": "notes-policy-3",
    "apiWorkload": "notes-api",
    "workerWorkload": "notes-worker",
    "actualNetwork": false,
    "actualIdentityVerification": false
  },
  "rows": [
    {
      "case": "normal",
      "workloadVerifiedDeclared": true,
      "assertionIssuerTrustedDeclared": true,
      "contextPresent": true,
      "subject": "Duru",
      "tenant": "tenant-A",
      "purpose": "public-note-read",
      "audience": "notes-worker",
      "action": "notes.read",
      "noteId": "note-A",
      "now": 150,
      "validUntil": 200,
      "policyRevision": "notes-policy-3",
      "resourceAllowedDeclared": true,
      "expectedAllowed": true,
      "expectedBody": {
        "title": "Tea & Bread"
      },
      "expectedResourceDelivery": true,
      "expectedMutation": false,
      "permissionEvidence": "declared-known"
    },
    {
      "case": "wrong-purpose",
      "workloadVerifiedDeclared": true,
      "assertionIssuerTrustedDeclared": true,
      "contextPresent": true,
      "subject": "Duru",
      "tenant": "tenant-A",
      "purpose": "note-export",
      "audience": "notes-worker",
      "action": "notes.read",
      "noteId": "note-A",
      "now": 150,
      "validUntil": 200,
      "policyRevision": "notes-policy-3",
      "resourceAllowedDeclared": true,
      "expectedAllowed": false,
      "expectedBody": null,
      "expectedResourceDelivery": false,
      "expectedMutation": false,
      "permissionEvidence": "declared-known"
    },
    {
      "case": "context-missing",
      "workloadVerifiedDeclared": true,
      "assertionIssuerTrustedDeclared": true,
      "contextPresent": false,
      "subject": null,
      "tenant": null,
      "purpose": "public-note-read",
      "audience": "notes-worker",
      "action": "notes.read",
      "noteId": "note-A",
      "now": 150,
      "validUntil": 200,
      "policyRevision": "notes-policy-3",
      "resourceAllowedDeclared": true,
      "expectedAllowed": false,
      "expectedBody": null,
      "expectedResourceDelivery": false,
      "expectedMutation": false,
      "permissionEvidence": "unknown"
    },
    {
      "case": "expired",
      "workloadVerifiedDeclared": true,
      "assertionIssuerTrustedDeclared": true,
      "contextPresent": true,
      "subject": "Duru",
      "tenant": "tenant-A",
      "purpose": "public-note-read",
      "audience": "notes-worker",
      "action": "notes.read",
      "noteId": "note-A",
      "now": 200,
      "validUntil": 200,
      "policyRevision": "notes-policy-3",
      "resourceAllowedDeclared": true,
      "expectedAllowed": false,
      "expectedBody": null,
      "expectedResourceDelivery": false,
      "expectedMutation": false,
      "permissionEvidence": "declared-known"
    }
  ],
  "serviceRoles": [
    {
      "service": "notes-api",
      "permission": "enqueue public-note-read"
    },
    {
      "service": "owned-queue",
      "permission": "deliver approved jobs"
    },
    {
      "service": "notes-worker",
      "permission": "read own public note after current context gate"
    }
  ],
  "copiedContextFields": [
    "jobId",
    "subject",
    "tenant",
    "purpose",
    "audience",
    "action",
    "noteId",
    "validUntil",
    "policyRevision"
  ],
  "correlation": {
    "traceAlias": "trace-A",
    "actualTraceparent": false,
    "identityEvidence": false,
    "permissionEvidence": false
  },
  "deliveryBoundary": "Store-to-worker body only; no API/browser return",
  "boundaries": {
    "actualQueue": false,
    "actualToken": false,
    "actualSPIFFE": false,
    "actualCloudIAM": false,
    "actualRevocation": false,
    "actualRetryGuarantee": false
  }
}
rows
Workload ve issuer girdileri ile güncel purpose, audience, time ve resource kararları ayrı tutulur.
copiedContextFields
Job’a yalnız izin verilen context alanları kopyalanır. Credential material taşınmaz.
correlation
Trace alias aynı işi ilişkilendirmeye yarar; identity veya permission kanıtı değildir.
deliveryBoundary
Başarılı body teslimi yalnız store’dan worker’a kadar gösterilir; API veya browser receipt bilgisi yoktur.

Owned synthetic queue ledger ve local copied-context gözlemleri; actual identity service, queue, token, SPIFFE veya cloud deployment yoktur.

İki yanlış kanı

Service tanınıyorsa user’ın tüm yetkileri geçerlidir.

Workload identity ile user delegation ve resource permission ayrı gate’lerdir.

Trace ID aynıysa identity kanıtlanmıştır.

Trace yalnız correlation içindir; trusted identity context ayrıca doğrulanır.

SIRA SENDE

Bu hikâyeyi sen çöz.

Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.

Worker workload doğrulanmış, fakat contextPresent=false ve subject=null. Note body açılır mı?

  1. Evet. Trusted service her subject adına sınırsız işlem yapabilir.
  2. Hayır. Permission evidence unknown; delivery yok.
Gerekçeli cevabı oku

Hayır. Permission evidence unknown; delivery yok. — Doğrulanmış workload eksik user/tenant context’ini kendiliğinden üretmez. expectedBody=null kalır.

Job enqueue edilmiş ve traceAlias var. now=validUntil=200 olduğunda worker eski izne dayanabilir mi?

Dersten seçilen artifact alanları; öğretim örneği

rows[3].now
200
rows[3].validUntil
200
rows[3].expectedAllowed
false
correlation
{"traceAlias":"trace-A","actualTraceparent":false,"identityEvidence":false,"permissionEvidence":false}
  1. Hayır. Expired context reddedilir; trace izin değildir.
  2. Evet. Trace ID veya job ID kalıcı authorization credential’ıdır.
Gerekçeli cevabı oku

Hayır. Expired context reddedilir; trace izin değildir. — Current time kontrolü equality anında kapanır. correlation.identityEvidence=false ve permissionEvidence=false; trace alias bu eksikliği gidermez.

Copied context purpose, audience, noteId, validUntil ve policyRevision taşıyor. Bunları kopyalamak neden doğrulanmış delegation veya browser delivery değildir?

Gerekçeli cevabı oku

Worker gerekli issuer/workload provenance’ını, subject/tenant bağını, purpose/audience/action ve güncel permission’ı değerlendirmelidir. Kopyalanmış field’lar tek başına authority kurmaz. Bu scene yalnız store’dan worker’a body teslimini gösterir; API/browser return yoktur. Gerçek queue, token, SPIFFE, IAM veya revocation çalıştırılmaz. Async context carrier’ı identity verifier değildir.

□ Copied context’i trusted provenance yerine kullanmadım.

□ Worker receipt ile API/browser delivery’yi ayırdım.

Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç

Kaynaklar ve kapsam