iT邦幫忙

2026 iThome 鐵人賽

DAY 8
1

Core Question

長期 Agent identity 與短生命 runtime instance credential 應如何連結,而不共用永久秘密?

今天的問題

invoice-agent 是穩定的邏輯 workload,但今天的 instance 因 bug 被隔離,明天會由新 instance 接手。若兩者共用同一把永久私鑰,撤銷舊 instance 會影響新 instance;若完全換一個名稱,既有 policy 與 audit 又失去 continuity。正確切分是:穩定的 workload identity 描述「哪一類 Agent」,短效 instance credential 描述「這次啟動的哪個執行個體」。

為什麼這不是傳統 IAM 問題

一般服務可能靠固定 client secret 存活多年;Agent runtime 卻會被 autoscale、重啟、撤銷和重試。模型任務還可能跨越 credential renewal。若把 identity continuity 與 key continuity 綁在一起,洩漏窗口與撤銷粒度都過大。

Threat / Failure Scenario

Naive / Unsafe Design

image 內含永久 secret,所有 replicas 以相同 key 呼叫 Tool;啟動只檢查一次,舊 instance 被入侵後仍可持續重放。

Recommended Design

受信任 runtime 先向 attestor 證明 deployment、instance 與必要環境屬性;issuer 簽發短效 credential,內含 stable workload ID、unique instance ID、audience、expiry。instance 只在需要時續期,續期仍需重新證明;被撤銷的 instance 不影響其他 instance。

核心概念

Agent 的 identity continuity 應與 key continuity 分離:穩定 workload identity 用於 policy 與治理,短效 instance credential 則縮小單次啟動的洩漏與撤銷範圍。

Architecture Pattern

https://ithelp.ithome.com.tw/upload/images/20260912/20120151EQFT9v7QNk.png

Trust boundary 是 runtime→attestor、issuer→gateway、gateway→Tool。Identity Flow 保留 workload=invoice-agent 的長期語意,但每次啟動使用 instance=i-42 的新 credential。Authorization Decision Point 在 Gateway/PDP,每次 Action 都可檢查 instance status、Task 和 delegation;不是「拿到 token 就整個 Task allow」。

短效不是萬靈丹:它仍可能在有效期間被重放,因此高風險呼叫應加入 mTLS/DPoP 類 sender constraint、nonce 或 idempotency。續期也不能把過期 grant 自動延長,必須重新評估 Task 與 User authority。

小型 PoC

import secrets

class Issuer:
    def __init__(self): self.revoked = set(); self.clock = 0
    def issue(self, workload, instance, lifetime=3):
        return {"workload": workload, "instance": instance,
                "token": secrets.token_hex(8), "exp": self.clock + lifetime}
    def valid(self, t):
        return t["instance"] not in self.revoked and t["exp"] > self.clock

i = Issuer()
first = i.issue("invoice-agent", "i-1")
i.clock = 1
second = i.issue("invoice-agent", "i-2")
assert first["token"] != second["token"]
assert i.valid(first) and i.valid(second)
i.revoked.add("i-1")
assert not i.valid(first) and i.valid(second)  # instance 粒度撤銷
i.clock = 4
assert not i.valid(second)                       # expiry
print("new token per instance; old instance revoked; expired token rejected")

這個 PoC 不模擬真實 attestation 或簽章,而是驗證 lifecycle 不變條件:每次 instance 使用不同 token、撤銷精確到 instance、過期後拒絕。生產環境應由平台 attestor 和標準 credential issuer 完成 proof 驗證。

每次簽發、續期、撤銷與 Tool 呼叫都應記錄 stable workload、instance、credential id、attestation reference、expiry、Task 與 decision;撤銷舊 instance 的事件不能被新 instance 的 log 覆蓋。

今天得到什麼

  1. 穩定的 Agent identity 不代表要重用穩定的 secret。
  2. instance credential 應短效、可輪替、可獨立撤銷。
  3. renewal 是新的 authorization checkpoint,不是無條件延長。
  4. 短效 token 仍需 audience 與 sender constraint 防重放。

下一篇

下一篇把這個 lifecycle 放進 container/Kubernetes:runtime 如何取得 proof,而不是把 secret 烘進 image?

參考資料


上一篇
Day 07|API Key 能當 Agent 身分嗎?
下一篇
Day 09|Agent 跑在 Container / Kubernetes 時,怎麼取得身分?
系列文
AI Agent 憑什麼動手?30 天拆解 Agent Identity、Delegation 與 Authorization14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言