워크플로 이력 무결성

Workflow history integrity

실행 이력의 서명 체인을 검증해 중간 조작을 발견합니다.

···
html
<div class="scene"><div class="title">SIGNED HISTORY CHAIN</div><div class="row chain"><div class="tile" id="h1">STEP 1<br><small>sig A</small></div><span>→</span><div class="tile" id="h2">STEP 2<br><small>sig B</small></div><span>→</span><div class="tile" id="h3">STEP 3<br><small>sig C</small></div></div><div id="verify" class="verify">CHAIN VERIFIED</div></div>
css
.scene{width:min(94vw,760px);height:min(86vh,320px);padding:clamp(10px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--fg);font:500 clamp(11px,1.3vw,16px)/1.25 "Pretendard Variable",Pretendard,-apple-system,sans-serif;display:flex;flex-direction:column;gap:clamp(7px,1.6vmin,12px);overflow:hidden}.scene *{box-sizing:border-box}.title{font-weight:750;color:var(--accent)}.muted{color:var(--muted)}.mono{font-family:ui-monospace,monospace}.row{display:flex;align-items:center;justify-content:center;gap:clamp(5px,1.4vmin,12px);flex:1;min-height:0}.tile{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(6px,1.6vmin,12px);text-align:center;min-width:0}.on{border-color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}.pulse{animation:pulse 1.6s infinite alternate}@keyframes pulse{to{border-color:var(--accent);transform:translateY(-3px)}}.chain .tile{flex:1}.chain span{color:var(--accent)}.chain small{color:var(--muted);font-size:1em}.verify{text-align:center;border:1px solid var(--accent);border-radius:6px;padding:8px;color:var(--accent);font-weight:700}.tampered{border-color:var(--accent-3)!important;color:var(--accent-3)!important}
js
let tampered=false;function tick(){tampered=!tampered;document.getElementById('h2').classList.toggle('tampered',tampered);document.getElementById('h3').classList.toggle('tampered',tampered);document.getElementById('h2').innerHTML=tampered?'STEP 2<br><small>changed!</small>':'STEP 2<br><small>sig B</small>';const v=document.getElementById('verify');v.textContent=tampered?'VERIFICATION FAILED AT STEP 2':'CHAIN VERIFIED';v.classList.toggle('tampered',tampered)}tick();setInterval(tick,1400)

장기 실행의 이력은 복구 시 다시 읽히므로 중간 기록이 바뀌면 이후 실행 판단도 달라질 수 있습니다. Dapr 1.18은 선택적으로 이력 단계를 암호학적으로 서명하고 상태를 읽을 때 체인을 검증합니다.

데모는 정상 이력의 연결이 이어지다가 한 단계가 변조되면 뒤 단계의 검증이 막히는 모습을 보여줍니다. 무결성 검사는 기밀성이나 접근 제어를 대신하지 않습니다.

언제 쓰나

실행 이력의 위변조를 감지해야 하는 중요 워크플로에 적용합니다.

페이지로 열기 ↗