<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Spiffe on Tarragon</title><link>https://tarrragon.github.io/blog/tags/spiffe/</link><description>Recent content in Spiffe on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Mon, 18 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/spiffe/index.xml" rel="self" type="application/rss+xml"/><item><title>SPIRE</title><link>https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/spire/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/spire/</guid><description>&lt;p>SPIRE（SPIFFE Runtime Environment）是 SPIFFE 規範的 reference 實作、CNCF graduated 專案、解決 &lt;em>workload identity attestation&lt;/em> 的核心問題：在 service mesh / 跨 cluster / 跨組織的環境裡、一個 workload 必須能 &lt;em>被驗證&lt;/em> 它是誰（是哪個 namespace 的哪個 service account、跑在哪台 attested host 上）、而不是依靠 IP / hostname / 共用 API key 這種可偽造的識別。SPIRE 發出的識別憑證叫 &lt;em>SVID&lt;/em>（SPIFFE Verifiable Identity Document）、識別格式是 URI 形式的 &lt;em>SPIFFE ID&lt;/em>（例如 &lt;code>spiffe://example.org/ns/prod/sa/api-gateway&lt;/code>）、TTL 是分鐘級短期、workload 透過本地 Unix socket（Workload API）持續拉新 SVID、不 mount file 一勞永逸。&lt;/p>
&lt;h2 id="服務定位">服務定位&lt;/h2>
&lt;p>SPIRE 的核心定位是 &lt;em>attestation-first 的 workload identity 控制面&lt;/em>、解的問題是「這個 workload 在執行時是不是它聲稱的那個」— 識別語意是 &lt;em>attested SPIFFE ID&lt;/em>、不是 DNS name 也不是 cluster-internal ServiceAccount。跟 &lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/cert-manager/" data-link-title="cert-manager" data-link-desc="K8s 原生 certificate lifecycle automation、支援 Let&amp;#39;s Encrypt / Vault PKI / Venafi 等多 issuer、auto-renewal &amp;#43; Challenge solver">cert-manager&lt;/a> 的 &lt;em>cert lifecycle&lt;/em>（DNS name 為主）、Kubernetes ServiceAccount 的 &lt;em>cluster-internal scope&lt;/em>、&lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/hashicorp-vault/" data-link-title="HashiCorp Vault" data-link-desc="Self-hosted secret management 與 dynamic credential / encryption-as-a-service / PKI engine、跨雲跨環境的 secret 控制面">Vault&lt;/a> AppRole 的 &lt;em>pull-based secret&lt;/em>（workload 要先持有 secret_id）都解不同問題、不是替代關係。&lt;/p>
&lt;p>跟雲端 workload identity（&lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/aws-iam/" data-link-title="AWS IAM" data-link-desc="AWS cloud resource permission engine、Role / Policy / STS、跨帳號信任邊界與 OIDC federation 的核心">AWS IAM Roles Anywhere&lt;/a> / GCP Workload Identity Federation / Azure Federated Identity Credential）相比、SPIRE 多了 &lt;em>跨雲統一抽象&lt;/em> + &lt;em>跨組織 federation&lt;/em>（兩個 SPIRE deployment 互相信任只需要交換 trust bundle）。代價是 &lt;em>自管控制面&lt;/em>（SPIRE Server HA + Agent rollout + Registration Entry 維護）。詳細跟其他 vendor 的場景對比見「核心取捨表」與「何時改走其他服務」。&lt;/p>
&lt;h2 id="本章目標">本章目標&lt;/h2>
&lt;p>讀完本頁、讀者能判斷：&lt;/p>
&lt;ol>
&lt;li>何時用 SPIRE（zero-trust mesh、跨 cluster / 跨組織 federation、需要 attestation）、何時用 cert-manager + Service Account / cloud-native workload identity 就夠&lt;/li>
&lt;li>SPIRE deployment 的最低安全骨架（Server / Agent 拓樸、Node Attestor、Workload Attestor、Registration Entry、SVID TTL）&lt;/li>
&lt;li>跟 &lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/hashicorp-vault/" data-link-title="HashiCorp Vault" data-link-desc="Self-hosted secret management 與 dynamic credential / encryption-as-a-service / PKI engine、跨雲跨環境的 secret 控制面">Vault&lt;/a> / Istio / &lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/aws-iam/" data-link-title="AWS IAM" data-link-desc="AWS cloud resource permission engine、Role / Policy / STS、跨帳號信任邊界與 OIDC federation 的核心">AWS IAM&lt;/a> Roles Anywhere 的整合形狀&lt;/li>
&lt;li>失敗模式如何排錯（Attestor 設計太寬、SVID 過期、Trust Bundle 不同步）&lt;/li>
&lt;/ol>
&lt;h2 id="最短判讀路徑">最短判讀路徑&lt;/h2>
&lt;p>判斷 SPIRE deployment 是否健康、最少看四件事：&lt;/p></description><content:encoded><![CDATA[<p>SPIRE（SPIFFE Runtime Environment）是 SPIFFE 規範的 reference 實作、CNCF graduated 專案、解決 <em>workload identity attestation</em> 的核心問題：在 service mesh / 跨 cluster / 跨組織的環境裡、一個 workload 必須能 <em>被驗證</em> 它是誰（是哪個 namespace 的哪個 service account、跑在哪台 attested host 上）、而不是依靠 IP / hostname / 共用 API key 這種可偽造的識別。SPIRE 發出的識別憑證叫 <em>SVID</em>（SPIFFE Verifiable Identity Document）、識別格式是 URI 形式的 <em>SPIFFE ID</em>（例如 <code>spiffe://example.org/ns/prod/sa/api-gateway</code>）、TTL 是分鐘級短期、workload 透過本地 Unix socket（Workload API）持續拉新 SVID、不 mount file 一勞永逸。</p>
<h2 id="服務定位">服務定位</h2>
<p>SPIRE 的核心定位是 <em>attestation-first 的 workload identity 控制面</em>、解的問題是「這個 workload 在執行時是不是它聲稱的那個」— 識別語意是 <em>attested SPIFFE ID</em>、不是 DNS name 也不是 cluster-internal ServiceAccount。跟 <a href="/blog/backend/07-security-data-protection/vendors/cert-manager/" data-link-title="cert-manager" data-link-desc="K8s 原生 certificate lifecycle automation、支援 Let&#39;s Encrypt / Vault PKI / Venafi 等多 issuer、auto-renewal &#43; Challenge solver">cert-manager</a> 的 <em>cert lifecycle</em>（DNS name 為主）、Kubernetes ServiceAccount 的 <em>cluster-internal scope</em>、<a href="/blog/backend/07-security-data-protection/vendors/hashicorp-vault/" data-link-title="HashiCorp Vault" data-link-desc="Self-hosted secret management 與 dynamic credential / encryption-as-a-service / PKI engine、跨雲跨環境的 secret 控制面">Vault</a> AppRole 的 <em>pull-based secret</em>（workload 要先持有 secret_id）都解不同問題、不是替代關係。</p>
<p>跟雲端 workload identity（<a href="/blog/backend/07-security-data-protection/vendors/aws-iam/" data-link-title="AWS IAM" data-link-desc="AWS cloud resource permission engine、Role / Policy / STS、跨帳號信任邊界與 OIDC federation 的核心">AWS IAM Roles Anywhere</a> / GCP Workload Identity Federation / Azure Federated Identity Credential）相比、SPIRE 多了 <em>跨雲統一抽象</em> + <em>跨組織 federation</em>（兩個 SPIRE deployment 互相信任只需要交換 trust bundle）。代價是 <em>自管控制面</em>（SPIRE Server HA + Agent rollout + Registration Entry 維護）。詳細跟其他 vendor 的場景對比見「核心取捨表」與「何時改走其他服務」。</p>
<h2 id="本章目標">本章目標</h2>
<p>讀完本頁、讀者能判斷：</p>
<ol>
<li>何時用 SPIRE（zero-trust mesh、跨 cluster / 跨組織 federation、需要 attestation）、何時用 cert-manager + Service Account / cloud-native workload identity 就夠</li>
<li>SPIRE deployment 的最低安全骨架（Server / Agent 拓樸、Node Attestor、Workload Attestor、Registration Entry、SVID TTL）</li>
<li>跟 <a href="/blog/backend/07-security-data-protection/vendors/hashicorp-vault/" data-link-title="HashiCorp Vault" data-link-desc="Self-hosted secret management 與 dynamic credential / encryption-as-a-service / PKI engine、跨雲跨環境的 secret 控制面">Vault</a> / Istio / <a href="/blog/backend/07-security-data-protection/vendors/aws-iam/" data-link-title="AWS IAM" data-link-desc="AWS cloud resource permission engine、Role / Policy / STS、跨帳號信任邊界與 OIDC federation 的核心">AWS IAM</a> Roles Anywhere 的整合形狀</li>
<li>失敗模式如何排錯（Attestor 設計太寬、SVID 過期、Trust Bundle 不同步）</li>
</ol>
<h2 id="最短判讀路徑">最短判讀路徑</h2>
<p>判斷 SPIRE deployment 是否健康、最少看四件事：</p>
<ul>
<li><strong>Server / Agent 拓樸</strong>：SPIRE Server 是 trust domain 的 root、發 SVID、簽 Trust Bundle；SPIRE Agent 跑在每個 host / node 上、向 Server 註冊、為本機 workload attest 身份。Server HA（多副本 + 共享 DB）跟 Agent rollout coverage 缺一就會出現 <em>節點上 workload 拿不到 SVID</em>。</li>
<li><strong>Attestor 設計</strong>：Node Attestor 驗 <em>這台 host 是真的</em>（K8s SAT / AWS IID / Azure MSI / GCP IIT / TPM 等）、Workload Attestor 驗 <em>這個 process 是誰</em>（K8s pod selector、unix UID/GID、systemd unit）。Selector 太寬等於整個 namespace 任何 pod 都拿同一個 SPIFFE ID、blast radius 失控。</li>
<li><strong>SVID lifetime</strong>：X.509-SVID 預設 TTL 1 小時、production 建議 5–15 分鐘；workload 必須走 Workload API（Unix socket）持續拉新 SVID、不能 mount 成 file。Workload 不支援 SDK 整合就被擋在 SPIRE 之外。</li>
<li><strong>Registration Entry</strong>：定義「哪個 SPIFFE ID 可以被哪個 attestation selector 取得」、是 SPIRE 的 <em>authorization 設計核心</em>。一個 entry 寫錯（selector 用了 <code>k8s:ns:default</code> 沒鎖 service account）就等於 default namespace 任何 pod 都拿 admin SPIFFE ID。</li>
</ul>
<p>四件事任一缺失、就是 <a href="/blog/backend/07-security-data-protection/workload-identity-and-federated-trust/" data-link-title="7.10 Workload Identity 與聯邦信任邊界" data-link-desc="定義非人類身份、跨平台信任與短時憑證治理問題">Workload Identity and Federated Trust</a> 邊界的待補項目。</p>
<h2 id="日常操作與決策形狀">日常操作與決策形狀</h2>
<p><strong>Server / Agent 拓樸</strong>：SPIRE Server 是 trust domain 的 root CA + 註冊中心、必須 HA（至少兩副本 + 共享 PostgreSQL / MySQL）、production 通常每個 cluster 一個 Server cluster；SPIRE Agent 以 DaemonSet 跑在每個 K8s node、或以 systemd unit 跑在每台 VM、負責本機的 attestation 與 SVID 派發。Agent 跟 Server 之間用 mutual TLS、Agent 自己也走 Node Attestation 才能向 Server 註冊。</p>
<p><strong>Node Attestor</strong>：決定「這個 Agent 是不是真的跑在它聲稱的 host 上」。K8s SAT / PSAT（projected service account token）驗 Agent 的 ServiceAccount + Pod；AWS IID 驗 EC2 instance identity document；GCP IIT 驗 GCE metadata；Azure MSI 驗 Managed Identity；TPM attestor 驗硬體 TPM 簽章。選錯 attestor 等於 host 識別被偽造 — 例如 K8s SAT 沒鎖 audience、外部能用任何 K8s SA token 註冊 fake Agent。</p>
<p><strong>Workload Attestor</strong>：決定「這個 process 是哪個 workload」。Kubernetes attestor 用 pod label / annotation / namespace / service account；Unix attestor 用 UID / GID / parent process / binary hash；Docker attestor 用 container label / image。Workload 連到 Agent 的 Workload API Unix socket、Agent 透過 attestor 收集 selector、比對 Registration Entry、決定能發哪個 SPIFFE ID。Selector 設計是 <em>least privilege</em> 的 enforcement point — 寫得越精確、blast radius 越小。</p>
<p><strong>Registration Entry</strong>：定義 SPIFFE ID 到 selector 的 mapping、例如「<code>spiffe://example.org/ns/prod/sa/api-gateway</code> 對應 <code>k8s:ns:prod</code>、<code>k8s:sa:api-gateway</code>、<code>k8s:pod-label:app:api-gateway</code>」。Entry 透過 SPIRE Server API 或 GitOps 維護、變更走 PR review（policy-as-code）、避免單一 admin 偷加 entry 拿 admin SPIFFE ID。</p>
<p><strong>SVID 生命週期</strong>：X.509-SVID 是 mTLS 用的 cert（含 SPIFFE ID 作 URI SAN）、JWT-SVID 是給 non-mTLS 場景（HTTP header bearer token、跟 OIDC 整合）。workload 透過 Workload API stream 接 SVID、TTL 過半就 Agent 主動 push 新 SVID — workload 不需要自己排程 renew。Trust Bundle（trust domain 的 root cert）也透過 Workload API 同步、自動更新。</p>
<p><strong>Federation between trust domains</strong>：兩個獨立 SPIRE deployment（不同組織、不同 trust domain）要互信、交換 <em>trust bundle</em>（自簽 root cert）、走 SPIFFE Federation API。<code>example.org</code> 的 workload 可以驗證 <code>partner.com</code> 的 SVID、不需要共用 PKI、不需要在中間放 broker。對應 <a href="/blog/backend/07-security-data-protection/workload-identity-and-federated-trust/" data-link-title="7.10 Workload Identity 與聯邦信任邊界" data-link-desc="定義非人類身份、跨平台信任與短時憑證治理問題">Workload Identity and Federated Trust</a> 的 federation 章節。</p>
<h2 id="核心取捨表">核心取捨表</h2>
<table>
  <thead>
      <tr>
          <th>取捨維度</th>
          <th>SPIRE</th>
          <th>cert-manager</th>
          <th>Kubernetes ServiceAccount</th>
          <th>Vault AppRole</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>識別語意</td>
          <td>Attested SPIFFE ID（who is this workload）</td>
          <td>DNS name（who owns this name）</td>
          <td>Cluster-internal SA name</td>
          <td>Pull-based role + secret_id</td>
      </tr>
      <tr>
          <td>信任邊界</td>
          <td>Trust domain、可跨 cluster / cloud / 組織</td>
          <td>Cluster 內、外部走 ACME / Vault PKI</td>
          <td>單一 cluster</td>
          <td>Vault 範圍內</td>
      </tr>
      <tr>
          <td>Attestation</td>
          <td>First-class — Node + Workload Attestor 雙層</td>
          <td>無 — 僅驗 DNS / cert request</td>
          <td>TokenReview API、cluster-scoped</td>
          <td>無 — secret_id 即是 proof</td>
      </tr>
      <tr>
          <td>Cert TTL</td>
          <td>分鐘級短期、Workload API 自動 rotate</td>
          <td>天 / 月級、cert-manager 排程 renew</td>
          <td>Token TTL（projected: 短）</td>
          <td>Token TTL（lease 治理）</td>
      </tr>
      <tr>
          <td>Workload 改動</td>
          <td>需走 SPIFFE Workload API SDK 或 sidecar</td>
          <td>Mount file 即可</td>
          <td>Mount file 即可</td>
          <td>拉 secret_id + 換 token</td>
      </tr>
      <tr>
          <td>跨組織 federation</td>
          <td>強 — 交換 trust bundle 即可</td>
          <td>弱 — 需共用 CA 或 ACME</td>
          <td>不支援</td>
          <td>弱 — 需共用 Vault 或 OIDC bridge</td>
      </tr>
      <tr>
          <td>運維成本</td>
          <td>高 — Server HA + Agent rollout + Entry 治理</td>
          <td>低 — Operator 模式</td>
          <td>內建</td>
          <td>中 — Vault 自管</td>
      </tr>
      <tr>
          <td>適合場景</td>
          <td>Zero-trust mesh、跨 cluster / 跨組織、需要 attestation</td>
          <td>K8s app cert lifecycle、ACME / Vault issuer</td>
          <td>Cluster-internal 簡單 app</td>
          <td>不在雲 metadata 內的 workload</td>
      </tr>
  </tbody>
</table>
<p>選 SPIRE 的核心訴求：<em>需要 attested workload identity</em>（不只是「有 cert 就信」）+ <em>跨 cluster 或跨組織</em>（單 cluster 內 ServiceAccount 已夠）+ <em>workload 能整合 SPIFFE SDK 或 sidecar</em>。三個條件缺一就先用 cert-manager + ServiceAccount 組合、別硬上 SPIRE。</p>
<h2 id="進階主題">進階主題</h2>
<p><strong>跟 Istio / Linkerd / Envoy 整合</strong>：Istio 1.14+ 支援 SPIRE 作 identity provider（取代 Citadel）、Envoy SDS（Secret Discovery Service）走 SPIRE Workload API 拉 SVID、service mesh 內 mTLS 用 SPIFFE ID 做 peer 驗證 + authz policy（<code>source.principal == &quot;spiffe://example.org/ns/prod/sa/api-gateway&quot;</code>）。Linkerd 也有實驗性整合（policy controller 接受 SPIFFE ID）。</p>
<p><strong>跟 <a href="/blog/backend/07-security-data-protection/vendors/hashicorp-vault/" data-link-title="HashiCorp Vault" data-link-desc="Self-hosted secret management 與 dynamic credential / encryption-as-a-service / PKI engine、跨雲跨環境的 secret 控制面">Vault</a> 整合</strong>：Vault 可以用 SPIRE JWT-SVID 作 auth method、workload 拿 SVID 換 Vault token、不需要 AppRole secret_id — 等於把 Vault auth 的 <em>bootstrap secret 問題</em> 交給 SPIRE attestation 處理。workload 同時拿 SPIFFE 身份（mTLS）跟 Vault secret（DB credential、PKI cert）、兩條鏈共用同一個 attestation root。</p>
<p><strong>跟 <a href="/blog/backend/07-security-data-protection/vendors/aws-iam/" data-link-title="AWS IAM" data-link-desc="AWS cloud resource permission engine、Role / Policy / STS、跨帳號信任邊界與 OIDC federation 的核心">AWS IAM</a> Roles Anywhere 整合</strong>：AWS IAM Roles Anywhere 接受 X.509 cert 換 IAM credential、SPIRE 發的 X.509-SVID 可以當這個 cert — non-AWS workload（on-prem、其他雲、CI runner）用 SPIFFE ID 拿 short-term AWS STS credential、不需要存 long-lived AWS access key。</p>
<p><strong>Nested SPIRE（多層 trust domain）</strong>：大型組織把 trust domain 切成 <em>parent + child</em>（例如 <code>example.org</code> 作 parent、每個 BU 各自 <code>bu1.example.org</code>、<code>bu2.example.org</code>）、child Server 向 parent Server 註冊作 downstream、child trust domain 的 workload 還是被 parent root 信任。適合需要 <em>部門自治 + 全公司互通</em> 的場景。</p>
<p><strong>JWT-SVID 給 non-mTLS workload</strong>：HTTP service 不一定能跑 mTLS（CDN 後面、legacy app）、SPIRE 發 JWT-SVID（標準 JWT、aud / sub claim、SPIFFE ID 在 sub）給這類 workload、走 HTTP <code>Authorization: Bearer</code> 傳遞、收方驗 SPIRE trust bundle 簽章。代價是失去 mTLS 的 mutual auth、需要 application-level 驗 JWT-SVID。</p>
<h2 id="排錯與失敗快速判讀">排錯與失敗快速判讀</h2>
<ul>
<li><strong>Workload Attestor selector 太寬</strong>：Entry 只鎖 <code>k8s:ns:prod</code> 沒鎖 <code>k8s:sa:*</code> — namespace 內任何 pod 都拿同一個 admin SPIFFE ID。修法：selector 必含 namespace + service account + （建議）pod label，policy review 走 GitOps PR。</li>
<li><strong>SVID 過期但 workload 沒接 Workload API</strong>：workload 把 SVID dump 成 file 後不再連 Workload API、TTL 過期之後 mTLS 失敗 — workload 必須用 SPIFFE SDK 或 sidecar（envoy / spiffe-helper）持續 stream SVID。</li>
<li><strong>Node Attestor audience 未鎖</strong>：K8s SAT attestor 沒設 <code>audience</code>、外部能用任何 K8s SA token 註冊 fake Agent — 改用 PSAT（projected SA token）+ 明確 audience 鎖到 SPIRE Server URL。</li>
<li><strong>Trust Bundle 不同步</strong>：federation 對端 rotate root cert、本端沒抓到新 bundle、跨 trust domain mTLS 失敗 — federation endpoint 必須走 HTTPS + 定期 refresh、SPIRE Server metric 監控 federation fetch 失敗。</li>
<li><strong>Registration Entry 漂移</strong>：手動加的 entry 沒進 GitOps、admin 離職後沒人知道為何某個 SPIFFE ID 存在 — entry 必須走 declarative source（YAML in Git）+ CI apply、禁止直接 <code>spire-server entry create</code>。</li>
<li><strong>Server DB 單點</strong>：SPIRE Server SQLite mode 跑在 production、節點掛了 = 整個 trust domain 不能發 SVID — production 必走 PostgreSQL / MySQL + HA Server 副本。</li>
<li><strong>Audit log gap</strong>：SPIRE Server audit log 沒接 SIEM、SVID 派發紀錄 7 天後輪轉掉、事故時無法回查誰拿過 admin SPIFFE ID — audit log 同步到外部 SIEM 是基本要求、對應 <a href="/blog/backend/knowledge-cards/audit-log/" data-link-title="Audit Log" data-link-desc="說明高風險操作如何留下可追溯、可稽核的紀錄">Audit Log</a> 卡。</li>
</ul>
<h2 id="何時改走其他服務">何時改走其他服務</h2>
<table>
  <thead>
      <tr>
          <th>需求形狀</th>
          <th>改走</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>單 cluster 簡單 K8s app + DNS-named cert</td>
          <td><a href="/blog/backend/07-security-data-protection/vendors/cert-manager/" data-link-title="cert-manager" data-link-desc="K8s 原生 certificate lifecycle automation、支援 Let&#39;s Encrypt / Vault PKI / Venafi 等多 issuer、auto-renewal &#43; Challenge solver">cert-manager</a> + Kubernetes ServiceAccount</td>
      </tr>
      <tr>
          <td>公開 serving cert（HTTPS endpoint）</td>
          <td><a href="/blog/backend/07-security-data-protection/vendors/aws-acm/" data-link-title="AWS ACM" data-link-desc="AWS-managed certificate provisioning、DNS validation &#43; auto-renewal、整合 ELB / CloudFront / API Gateway、Private CA 後端">AWS ACM</a> / <a href="/blog/backend/07-security-data-protection/vendors/letsencrypt/" data-link-title="Let&#39;s Encrypt" data-link-desc="免費 &#43; 自動化的公共 ACME CA、90 天 TTL 強制自動化、跨雲跨平台 public TLS cert 的事實基礎">Let&rsquo;s Encrypt</a></td>
      </tr>
      <tr>
          <td>Static secret + dynamic credential</td>
          <td><a href="/blog/backend/07-security-data-protection/vendors/hashicorp-vault/" data-link-title="HashiCorp Vault" data-link-desc="Self-hosted secret management 與 dynamic credential / encryption-as-a-service / PKI engine、跨雲跨環境的 secret 控制面">HashiCorp Vault</a></td>
      </tr>
      <tr>
          <td>AWS-only workload + IAM role</td>
          <td><a href="/blog/backend/07-security-data-protection/vendors/aws-iam/" data-link-title="AWS IAM" data-link-desc="AWS cloud resource permission engine、Role / Policy / STS、跨帳號信任邊界與 OIDC federation 的核心">AWS IAM</a> IRSA / Roles Anywhere</td>
      </tr>
      <tr>
          <td>GCP-only workload</td>
          <td>GCP Workload Identity Federation</td>
      </tr>
      <tr>
          <td>純 human identity / SSO</td>
          <td><a href="/blog/backend/07-security-data-protection/vendors/keycloak/" data-link-title="Keycloak" data-link-desc="Open source self-hosted Identity Provider、Red Hat 主導、Realm-based multi-tenancy、適合資料主權與自訂 flow 需求">Keycloak</a> / <a href="/blog/backend/07-security-data-protection/vendors/okta/" data-link-title="Okta" data-link-desc="SaaS Identity Provider 主流選項、SSO / MFA / lifecycle 整合、第三方信任邊界的代價">Okta</a></td>
      </tr>
      <tr>
          <td>跨組織 OIDC federation（human + machine）</td>
          <td><a href="/blog/backend/07-security-data-protection/workload-identity-and-federated-trust/" data-link-title="7.10 Workload Identity 與聯邦信任邊界" data-link-desc="定義非人類身份、跨平台信任與短時憑證治理問題">Workload Identity and Federated Trust</a>（章節層）</td>
      </tr>
  </tbody>
</table>
<h2 id="不在本頁內的主題">不在本頁內的主題</h2>
<ul>
<li>SPIFFE 規範完整逐條解讀（spec 各 section 細節）</li>
<li>SPIRE Server / Agent 完整 CLI 與 config reference</li>
<li>每個 Attestor plugin 的內部實作細節</li>
<li>Istio / Linkerd / Envoy 整合的完整步驟（屬 service mesh 章節）</li>
<li>SPIFFE Helper / spire-agent sidecar 各語言 SDK 用法</li>
</ul>
<h2 id="案例回寫">案例回寫</h2>
<p>SPIRE 在 07 案例庫沒有直接 vendor-level 事件、以下為對照引用：</p>
<table>
  <thead>
      <tr>
          <th>案例</th>
          <th>跟 SPIRE 的關係（對照）</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/07-security-data-protection/workload-identity-and-federated-trust/" data-link-title="7.10 Workload Identity 與聯邦信任邊界" data-link-desc="定義非人類身份、跨平台信任與短時憑證治理問題">Workload Identity and Federated Trust (section)</a></td>
          <td>SPIRE 是 federation 信任邊界的具體實作 — 跨 trust domain 交換 bundle 是 SPIFFE federation 的標準形狀</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/07-security-data-protection/red-team/cases/identity-access/microsoft-storm-0558-2023-signing-key-chain/" data-link-title="7.R7.1.5 Microsoft Storm-0558 2023：簽章金鑰鏈與郵件存取" data-link-desc="從簽章金鑰保護失效到雲端郵件存取，拆解身分信任鏈的關鍵控制點">Microsoft Storm-0558 Signing Key Chain (red-team)</a></td>
          <td>對照啟示 — JWT-SVID 是 <em>short-lived + attested</em> 設計、跟 Storm-0558 的 long-lived signing key 是相反 mindset；attestation + 分鐘級 TTL 限制了 key 外洩後的 blast radius</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/07-security-data-protection/red-team/cases/supply-chain/github-oauth-2022-token-supply-chain/" data-link-title="7.R7.2.2 GitHub OAuth 2022：第三方 token 供應鏈風險" data-link-desc="第三方整合 token 被竊後，如何形成跨組織存取風險">GitHub OAuth 2022 Token Supply Chain (red-team)</a></td>
          <td>對照啟示 — 傳統 OAuth token 過寬 + 過長、SPIRE 設計是 short TTL + scope-narrow SPIFFE ID + Registration Entry 走 declarative authz、把 secret-leak 路徑收掉</td>
      </tr>
  </tbody>
</table>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>上游：<a href="/blog/backend/07-security-data-protection/workload-identity-and-federated-trust/" data-link-title="7.10 Workload Identity 與聯邦信任邊界" data-link-desc="定義非人類身份、跨平台信任與短時憑證治理問題">Workload Identity and Federated Trust</a>、<a href="/blog/backend/07-security-data-protection/identity-access-boundary/" data-link-title="7.2 身分與授權邊界" data-link-desc="以問題驅動方式整理身分、授權、會話與供應商身分鏈">Identity &amp; Access Boundary</a></li>
<li>平行：<a href="/blog/backend/07-security-data-protection/vendors/cert-manager/" data-link-title="cert-manager" data-link-desc="K8s 原生 certificate lifecycle automation、支援 Let&#39;s Encrypt / Vault PKI / Venafi 等多 issuer、auto-renewal &#43; Challenge solver">cert-manager</a>（DNS-named cert lifecycle）、<a href="/blog/backend/07-security-data-protection/vendors/hashicorp-vault/" data-link-title="HashiCorp Vault" data-link-desc="Self-hosted secret management 與 dynamic credential / encryption-as-a-service / PKI engine、跨雲跨環境的 secret 控制面">HashiCorp Vault</a>（用 SPIRE JWT-SVID 作 Vault auth method）、<a href="/blog/backend/07-security-data-protection/vendors/aws-iam/" data-link-title="AWS IAM" data-link-desc="AWS cloud resource permission engine、Role / Policy / STS、跨帳號信任邊界與 OIDC federation 的核心">AWS IAM</a>（Roles Anywhere 接 SPIRE 發的 X.509-SVID）</li>
<li>下游：service mesh（Istio / Linkerd / Envoy）整合層、<a href="/blog/backend/knowledge-cards/audit-log/" data-link-title="Audit Log" data-link-desc="說明高風險操作如何留下可追溯、可稽核的紀錄">Audit Log</a></li>
<li>官方：<a href="https://spiffe.io/docs/latest/spiffe-about/spiffe-overview/">SPIFFE Specification</a>、<a href="https://spiffe.io/docs/latest/spire-about/">SPIRE Documentation</a></li>
</ul>
]]></content:encoded></item></channel></rss>