<?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>Aws-Kms on Tarragon</title><link>https://tarrragon.github.io/blog/tags/aws-kms/</link><description>Recent content in Aws-Kms 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/aws-kms/index.xml" rel="self" type="application/rss+xml"/><item><title>AWS KMS</title><link>https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/aws-kms/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/aws-kms/</guid><description>&lt;p>AWS KMS 是 AWS 原生的 key management service、解決 &lt;em>對稱 / 非對稱金鑰生命週期管理&lt;/em> 與 &lt;em>envelope encryption pattern&lt;/em>：service 內部保管 master key（KMS Key）、應用層用 &lt;code>GenerateDataKey&lt;/code> 取得短暫的 data key 對實際資料加密、master key 完全不離 KMS 服務邊界。整合面跟 &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> / &lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/aws-secrets-manager/" data-link-title="AWS Secrets Manager" data-link-desc="AWS 原生 secret store &amp;#43; 內建 RDS / Redshift rotation Lambda、Resource Policy 跨帳號共享、KMS 加密">AWS Secrets Manager&lt;/a> / S3 / EBS / RDS 都串好、是 AWS 上幾乎所有靜態資料加密的後端。&lt;/p>
&lt;h2 id="服務定位">服務定位&lt;/h2>
&lt;p>AWS KMS 的核心定位是 &lt;em>AWS-only 的 multi-tenant managed key management&lt;/em>，FIPS 140-2 Level 3 認證、跨服務 envelope encryption 的共同地基。跟 &lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/cloudhsm/" data-link-title="AWS CloudHSM" data-link-desc="Single-tenant dedicated HSM（FIPS 140-2 Level 3）、AWS 不持 Crypto User credential、合規 &amp;#43; 資料主權場景的 key custody">CloudHSM&lt;/a> 比、KMS 是 &lt;em>managed + shared HSM 池&lt;/em>、CloudHSM 是 &lt;em>single-tenant dedicated HSM&lt;/em>；需要更高隔離 / 自管 cluster / FIPS Level 3 single-tenant 時走 CloudHSM、或用 KMS Custom Key Store 把 KMS 後端指向自己的 CloudHSM。跟 &lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/google-cloud-kms/" data-link-title="Google Cloud KMS" data-link-desc="GCP 原生 key management service、KeyRing / CryptoKey Version 設計、CMEK 整合 &amp;#43; Cloud HSM &amp;#43; External Key Manager">Google Cloud KMS&lt;/a> / &lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/azure-key-vault/" data-link-title="Azure Key Vault" data-link-desc="Azure 三合一 service（Secret &amp;#43; Key &amp;#43; Certificate）、整合 Managed Identity &amp;#43; Entra ID RBAC、Premium tier 走 HSM">Azure Key Vault&lt;/a> 比、設計概念相近、但 KMS 把 secret store 切出去（&lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/vendors/aws-secrets-manager/" data-link-title="AWS Secrets Manager" data-link-desc="AWS 原生 secret store &amp;#43; 內建 RDS / Redshift rotation Lambda、Resource Policy 跨帳號共享、KMS 加密">Secrets Manager&lt;/a>）、Key Vault 則把兩者合一。&lt;/p></description><content:encoded><![CDATA[<p>AWS KMS 是 AWS 原生的 key management service、解決 <em>對稱 / 非對稱金鑰生命週期管理</em> 與 <em>envelope encryption pattern</em>：service 內部保管 master key（KMS Key）、應用層用 <code>GenerateDataKey</code> 取得短暫的 data key 對實際資料加密、master key 完全不離 KMS 服務邊界。整合面跟 <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> / <a href="/blog/backend/07-security-data-protection/vendors/aws-secrets-manager/" data-link-title="AWS Secrets Manager" data-link-desc="AWS 原生 secret store &#43; 內建 RDS / Redshift rotation Lambda、Resource Policy 跨帳號共享、KMS 加密">AWS Secrets Manager</a> / S3 / EBS / RDS 都串好、是 AWS 上幾乎所有靜態資料加密的後端。</p>
<h2 id="服務定位">服務定位</h2>
<p>AWS KMS 的核心定位是 <em>AWS-only 的 multi-tenant managed key management</em>，FIPS 140-2 Level 3 認證、跨服務 envelope encryption 的共同地基。跟 <a href="/blog/backend/07-security-data-protection/vendors/cloudhsm/" data-link-title="AWS CloudHSM" data-link-desc="Single-tenant dedicated HSM（FIPS 140-2 Level 3）、AWS 不持 Crypto User credential、合規 &#43; 資料主權場景的 key custody">CloudHSM</a> 比、KMS 是 <em>managed + shared HSM 池</em>、CloudHSM 是 <em>single-tenant dedicated HSM</em>；需要更高隔離 / 自管 cluster / FIPS Level 3 single-tenant 時走 CloudHSM、或用 KMS Custom Key Store 把 KMS 後端指向自己的 CloudHSM。跟 <a href="/blog/backend/07-security-data-protection/vendors/google-cloud-kms/" data-link-title="Google Cloud KMS" data-link-desc="GCP 原生 key management service、KeyRing / CryptoKey Version 設計、CMEK 整合 &#43; Cloud HSM &#43; External Key Manager">Google Cloud KMS</a> / <a href="/blog/backend/07-security-data-protection/vendors/azure-key-vault/" data-link-title="Azure Key Vault" data-link-desc="Azure 三合一 service（Secret &#43; Key &#43; Certificate）、整合 Managed Identity &#43; Entra ID RBAC、Premium tier 走 HSM">Azure Key Vault</a> 比、設計概念相近、但 KMS 把 secret store 切出去（<a href="/blog/backend/07-security-data-protection/vendors/aws-secrets-manager/" data-link-title="AWS Secrets Manager" data-link-desc="AWS 原生 secret store &#43; 內建 RDS / Redshift rotation Lambda、Resource Policy 跨帳號共享、KMS 加密">Secrets Manager</a>）、Key Vault 則把兩者合一。</p>
<p>跟 <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 transit engine</a> 比、行為相似（key 不離 service、app 拿 ciphertext）、但治理面完全不同：KMS 綁 AWS 控制面、IAM + Key Policy 雙層授權、CloudTrail 是稽核入口；Vault transit 是跨雲統一介面、token + policy 為主、需要自管 cluster。AWS-heavy 組織首選 KMS、跨雲組織才會把 KMS 當下游、上游用 Vault transit 抽象。</p>
<h2 id="本章目標">本章目標</h2>
<p>讀完本頁、讀者能判斷：</p>
<ol>
<li>哪些資料 / 場景該用 Customer Managed KMS Key、哪些 AWS Managed Key 已經夠用、什麼時候直接走 CloudHSM</li>
<li>Key Policy + IAM + Grant 三層授權的分工、production 必開的 CloudTrail Data event 與 monitor 範圍</li>
<li>Multi-Region Key、Custom Key Store、External Key Store、BYOK 等進階形態的取捨</li>
<li>KMS 出事（IAM 過寬、Key Policy 把自己鎖死、Schedule Deletion 誤觸發）時的判讀路徑跟回退選項</li>
</ol>
<h2 id="最短判讀路徑">最短判讀路徑</h2>
<p>判斷一個 AWS KMS deployment 是否健康、最少看四件事：</p>
<ul>
<li><strong>Key Policy 設計</strong>：是否含 <code>root</code> principal（不然 key 變孤兒）、是否走 least privilege（不是 <code>kms:*</code> 給整個 account）、admin / user / monitor 三類 principal 是否分開、policy 變更是否走 PR review</li>
<li><strong>Grant 治理</strong>：哪些 service-to-service 短期授權走 Grant（rotation Lambda / RDS / EBS）、Grant TTL 是否設、廢棄 grant 是否定期 <code>RetireGrant</code></li>
<li><strong>Multi-Region 與 rotation 策略</strong>：是否啟用 annual automatic rotation（適用 symmetric encryption key）、Multi-Region Key 的 replica 是否跟 DR plan 對齊、asymmetric / signing key 的 manual rotation 流程是否有 runbook</li>
<li><strong>CloudTrail Data Event 必開</strong>：management event 預設記、但 <code>Encrypt</code> / <code>Decrypt</code> / <code>GenerateDataKey</code> 是 data event、預設不記 — 沒這層 forensic 沒著力點、Storm-0558 對照下完全無法回答「誰用哪把 key 簽了什麼 token」</li>
</ul>
<p>四件事任一缺失、就回到 <a href="/blog/backend/07-security-data-protection/secrets-and-machine-credential-governance/" data-link-title="7.6 秘密管理與機器憑證治理" data-link-desc="以問題驅動方式整理 secret、token、key 與機器身份治理">7.6 秘密管理與機器憑證治理</a> 跟 <a href="/blog/backend/knowledge-cards/audit-log/" data-link-title="Audit Log" data-link-desc="說明高風險操作如何留下可追溯、可稽核的紀錄">Audit Log</a> 的補丁清單。</p>
<h2 id="日常操作與決策形狀">日常操作與決策形狀</h2>
<p><strong>Key Type 選擇</strong>：symmetric encryption key（AES-256-GCM、最常用、S3 / EBS / RDS / Secrets Manager 都走這個）；asymmetric key pair（RSA / ECC、用於 sign / verify 或 encrypt / decrypt、JWT 簽署、CodeSign、文件簽章）；HMAC key（generate / verify MAC、API request signing）。對應 <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="從簽章金鑰保護失效到雲端郵件存取，拆解身分信任鏈的關鍵控制點">Storm-0558 signing key chain</a> — 自己 host signing key 出事的核心教訓是 <em>key 不該離 HSM service</em>、所以 JWT signing 用 asymmetric KMS key 是 baseline 設計、private key 永遠不離 KMS。</p>
<p><strong>Key Origin（key material 來源）</strong>：<code>AWS_KMS</code>（KMS 內部生成、預設）；<code>EXTERNAL</code>（BYOK、組織自己生成 key material、import 進 KMS、可以隨時 reimport 或刪除）；<code>AWS_CLOUDHSM</code>（Custom Key Store、key material 存在自己的 CloudHSM cluster）；<code>EXTERNAL_KEY_STORE</code>（XKS、AWS 外的 HSM、控制面在 AWS、key material 在 on-prem）。多數場景用 <code>AWS_KMS</code> 就夠、合規 / 主權需求才走 EXTERNAL / Custom Key Store。</p>
<p><strong>Key Policy 跟 IAM 的雙層</strong>：KMS 跟其他 AWS service 最大差異是 <em>Key Policy 是主要授權機制</em>、IAM policy 單獨不夠。Key Policy 必含 <code>arn:aws:iam::ACCOUNT_ID:root</code> 給 root principal（不是 root user、是讓 IAM 能參與授權的開關）— 沒這條 key 變孤兒、即使 IAM 開了 admin 也救不回來。production 通常分三類 statement：admin（Create / Delete / Schedule、走 break-glass）、user（Encrypt / Decrypt / GenerateDataKey、給 app）、monitor（Describe / List、給 SRE）。</p>
<p><strong>Grant 是程式化短期授權</strong>：service-to-service 整合（<a href="/blog/backend/07-security-data-protection/vendors/aws-secrets-manager/" data-link-title="AWS Secrets Manager" data-link-desc="AWS 原生 secret store &#43; 內建 RDS / Redshift rotation Lambda、Resource Policy 跨帳號共享、KMS 加密">Secrets Manager</a> rotation Lambda、RDS 自動加密、EBS volume attach）通常走 Grant 而不是改 Key Policy — 每個 grant 有自己的 grant token、可以帶 TTL、可以 <code>RetireGrant</code> / <code>RevokeGrant</code> 收回、不跟 key policy 永久綁定。沒治理時 grant 累積上千個 / 沒人 retire 是常見問題、跟 <a href="/blog/backend/07-security-data-protection/cases/failure-credential-rotation-without-scope/" data-link-title="7.C9 反例：憑證輪替未分 Scope" data-link-desc="憑證輪替若未分域分批，容易造成跨系統連鎖中斷。">Failure: Credential Rotation Without Scope</a> 同類 — 沒 scope map 等於沒治理。</p>
<p><strong>Alias 與 Key ID 的解耦</strong>：alias（<code>alias/my-app-prod-key</code>）是 <em>指向 key 的可變指標</em>、key ID / ARN 是 <em>不可變識別</em>。production code 應該用 alias、要換 key 時只需要重綁 alias、不用改 deployment。Cross-account 跨帳號使用必須用 ARN（alias 不跨帳號）。</p>
<p><strong>Key Rotation 的真實語義</strong>：annual automatic rotation（symmetric encryption key 才支援）換的是 <em>KMS 內部的 backing key material</em>、key ARN / Alias / Key ID 都不變、app 完全不需要動。<strong>舊資料仍用舊 backing key 解密、KMS 自動處理</strong>、不是「資料全部重新加密」— 這是常見誤解。asymmetric / HMAC key 不支援 automatic rotation、必須 manual 建新 key + alias 切換 + app 端雙讀容忍窗口（跟 JWT signing key rotation 同套路）。</p>
<p><strong>Multi-Region Key</strong>：跨 region replicate 的 KMS key 共用 <em>key material</em> 跟 <em>Key ID</em>（後綴帶 <code>mrk-</code>）、不是建立新 key — 跨 region 加密的 ciphertext 在另一 region 可以直接 decrypt、不用 cross-region API call。適合 multi-region active-active app + DR scenario。代價是 <em>replica region 跟 primary region 的權限要分別治理</em>、Key Policy 不會自動同步。</p>
<p><strong>Encryption Context 是 <em>authenticated data</em></strong>：encrypt 時帶的 key-value pair（例：<code>{&quot;app&quot;: &quot;billing&quot;, &quot;tenant&quot;: &quot;acme&quot;}</code>）、decrypt 必須提供同一組 context — 否則失敗。用來防 <em>ciphertext 被 replay 到別的 context</em>（攻擊者拿到 billing 的 ciphertext 想當 payroll 的 ciphertext 用）、所有 context 都會進 CloudTrail、是 forensic 上的關鍵欄位。production 一律帶 context、單純加密不帶 context 等於少一層防護。</p>
<p><strong>Customer Managed vs AWS Managed vs AWS Owned</strong>：三層分權 — Customer Managed（CMK、自己控 Key Policy + 自選 rotation）、AWS Managed（<code>aws/secretsmanager</code>、<code>aws/s3</code>、AWS 管 Key Policy、看得到但改不了）、AWS Owned（完全看不見、AWS 自己用、無 CloudTrail）。production 高敏感資料應該用 Customer Managed、才能控 policy + 開 data event + 自選 rotation 週期。</p>
<h2 id="核心取捨表">核心取捨表</h2>
<table>
  <thead>
      <tr>
          <th>取捨維度</th>
          <th>AWS KMS</th>
          <th>Google Cloud KMS</th>
          <th>Azure Key Vault</th>
          <th>AWS CloudHSM</th>
          <th>Vault transit engine</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>部署模型</td>
          <td>AWS managed multi-tenant、FIPS 140-2 Level 3</td>
          <td>GCP managed multi-tenant、FIPS 140-2 L3</td>
          <td>Azure managed、Standard / Premium tier</td>
          <td>AWS managed single-tenant HSM cluster</td>
          <td>自管 Vault cluster</td>
      </tr>
      <tr>
          <td>跨雲</td>
          <td>弱 — AWS-only</td>
          <td>弱 — GCP-only</td>
          <td>弱 — Azure-only</td>
          <td>弱 — AWS-only</td>
          <td>強 — 跨雲統一介面</td>
      </tr>
      <tr>
          <td>授權模型</td>
          <td>Key Policy（強制） + IAM + Grant 三層</td>
          <td>IAM 為主、Resource policy 輔</td>
          <td>Access policy + RBAC 雙模式</td>
          <td>CloudHSM user / role + Cluster IAM</td>
          <td>path-based policy + token</td>
      </tr>
      <tr>
          <td>Multi-Region</td>
          <td>Multi-Region Key（共用 key material）</td>
          <td>自動跨 region replication 較易</td>
          <td>Geo-replication 透過 Premium tier</td>
          <td>自管 cross-region replication</td>
          <td>Replication（Enterprise）</td>
      </tr>
      <tr>
          <td>Envelope encryption</td>
          <td>一級 pattern（<code>GenerateDataKey</code>）</td>
          <td>一級 pattern</td>
          <td>一級 pattern</td>
          <td>自己實作</td>
          <td>內建（transit engine）</td>
      </tr>
      <tr>
          <td>Asymmetric signing</td>
          <td>支援（RSA / ECC、JWT / CodeSign 直用）</td>
          <td>支援</td>
          <td>支援</td>
          <td>支援 + 完整 PKCS#11</td>
          <td>支援（部分）</td>
      </tr>
      <tr>
          <td>整合面</td>
          <td>全 AWS service 原生（S3 / EBS / RDS / Lambda）</td>
          <td>全 GCP service 原生</td>
          <td>全 Azure service 原生</td>
          <td>PKCS#11 / JCE / OpenSSL</td>
          <td>應用層 SDK</td>
      </tr>
      <tr>
          <td>適合場景</td>
          <td>AWS-heavy + envelope encryption + JWT signing</td>
          <td>GCP-heavy</td>
          <td>Azure-heavy + 跟 AD 整合</td>
          <td>合規 / FIPS L3 single-tenant / 自管 HSM</td>
          <td>跨雲 + key 不離 service</td>
      </tr>
      <tr>
          <td>不適合場景</td>
          <td>跨雲統一 custody、需 FIPS L4、需自管 HSM cluster</td>
          <td>同左</td>
          <td>同左</td>
          <td>純 envelope encryption 用 KMS 即可</td>
          <td>AWS-only 簡單需求（KMS 更便宜）</td>
      </tr>
  </tbody>
</table>
<p>KMS 是 AWS 上的 <em>預設選擇</em>、CloudHSM 是合規 / 自管要求才上的 <em>昇級</em>、Vault transit 是跨雲統一介面、Google / Azure 對標品在各自雲一樣是預設選擇。</p>
<h2 id="進階主題">進階主題</h2>
<p><strong>KMS Custom Key Store + CloudHSM 整合</strong>：Custom Key Store 把 KMS 的 <em>控制面</em>（API、Key Policy、CloudTrail、IAM 整合）保留、但 <em>key material 存在自己的 CloudHSM cluster</em>。組織需要 FIPS 140-2 Level 3 single-tenant 但又不想放棄 KMS 的 service 整合（S3 SSE-KMS / EBS encryption）時用。代價是 CloudHSM cluster 的運維成本（cluster HA、user 管理、backup）。</p>
<p><strong>External Key Store (XKS)</strong>：更激進的形態 — key material 完全在 AWS 之外（on-prem HSM 或第三方 HSM）、AWS 透過 XKS proxy 呼叫外部 HSM 做 cryptographic operation。用於 <em>資料主權</em> 場景（金融 / 政府 / 跨境合規要求 key 不出組織邊界）、代價是 latency 跟 availability 完全綁外部 HSM、AWS service 整合面要算清楚。</p>
<p><strong>Multi-Region Replica Key 跟 DR</strong>：primary region 出事時 replica region 仍能 decrypt 既有 ciphertext、不需要 cross-region API call。但 <em>primary 跟 replica 是各自獨立的 Key Policy</em>、變更不會自動同步 — 跟 <a href="/blog/backend/knowledge-cards/audit-log/" data-link-title="Audit Log" data-link-desc="說明高風險操作如何留下可追溯、可稽核的紀錄">Audit Log</a> 治理一樣、replica region 也要納入 CloudTrail Data Event 覆蓋範圍。</p>
<p><strong>BYOK（Bring Your Own Key）</strong>：<code>Origin = EXTERNAL</code> 的 KMS Key、key material 由組織自己生成、用 wrapping key 加密後 import 進 KMS。優點是組織保有 <em>master copy</em>（KMS 出事時仍能 re-import 到別處）、缺點是 <em>automatic rotation 不支援</em>（必須手動 import 新 key material）、且必須自己處理 wrapping key 的生命週期。</p>
<p><strong>跟 <a href="/blog/backend/07-security-data-protection/vendors/aws-secrets-manager/" data-link-title="AWS Secrets Manager" data-link-desc="AWS 原生 secret store &#43; 內建 RDS / Redshift rotation Lambda、Resource Policy 跨帳號共享、KMS 加密">Secrets Manager</a> 的整合</strong>：Secrets Manager 的 secret 本身用 KMS key 加密（預設 AWS Managed <code>aws/secretsmanager</code>、production 應該指到 Customer Managed CMK）。rotation Lambda 透過 Grant 取得 Decrypt + Encrypt 能力、跟 Secrets Manager 一起構成 <em>static secret rotation 的證據鏈</em> — 跟 <a href="/blog/backend/07-security-data-protection/credential-rotation-scoped-evidence/" data-link-title="7.27 Credential Rotation with Scoped Evidence 實作示範" data-link-desc="以 webhook/API credential 輪替示範 scope map、證據欄位與回退窗口如何一起設計。">credential rotation scoped evidence</a> 對齊。</p>
<p><strong>Asymmetric signing 的 use cases</strong>：JWT signing（KMS <code>Sign</code> API 直接簽 JWT header.payload、private key 不離 KMS、跟 Storm-0558 的設計對照鮮明）；CodeSign / S3 object signing（artifact integrity）；mTLS client cert 的 private key（搭配 <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> AWS issuer）。代價是 <em>latency</em>（每次 sign 一次 KMS API call、~10ms 級別、不適合超高 QPS）跟 <em>cost</em>（asymmetric operation 比 symmetric 貴 ~5x）。</p>
<h2 id="排錯與失敗快速判讀">排錯與失敗快速判讀</h2>
<ul>
<li><strong>Key Policy 沒有 <code>root</code> principal</strong>：Schedule 時忘了寫、key 立刻變孤兒、誰都不能用 — 只能透過 AWS Support 救（流程慢）；建立流程強制 template 含 root principal</li>
<li><strong>IAM admin 改不動 KMS key</strong>：Key Policy 沒授權 IAM 介入、即使 admin policy 有 <code>kms:*</code> 也擋掉 — 加 <code>Enable IAM User Permissions</code> statement 給 root principal、IAM 才能參與授權</li>
<li><strong>Schedule Key Deletion 誤觸發</strong>：min 7 天、max 30 天的等待期、期內可 cancel — production key 必含 alert（CloudWatch Alarm on <code>ScheduleKeyDeletion</code> event）+ 強制 4-eyes approval</li>
<li><strong>CloudTrail Data Event 沒開</strong>：事故後想查「誰 decrypt 了什麼」、發現只有 management event — production 必開 KMS data event、預估 cost（每 100k events ~$0.10）、敏感 key 一律開</li>
<li><strong>Encryption Context 不一致</strong>：encrypt 時帶 context、decrypt 時忘了帶（或帶錯）、<code>InvalidCiphertextException</code> — code review 強制 context schema、用 typed wrapper 避免人手帶錯</li>
<li><strong>Grant 累積 + 沒 retire</strong>：每個 KMS key 有 50,000 grant 上限、rotation Lambda 跑久了 grant 累積 — 定期 <code>ListGrants</code> + <code>RetireGrant</code> 廢棄的、IaC 治理 grant lifecycle</li>
<li><strong>Cross-region decrypt 失敗</strong>：以為 ciphertext 跨 region 通用、結果原本不是 Multi-Region Key — production 跨 region 場景一律建 Multi-Region Key、不要事後補</li>
<li><strong>CMK rotation 後舊 ciphertext 還能 decrypt</strong>：annual rotation 不會 re-encrypt 舊資料、KMS 自動用對應 backing key — 這是設計、不是 bug；真要全量 re-encrypt 要走 application-level migration</li>
</ul>
<h2 id="何時改走其他服務">何時改走其他服務</h2>
<table>
  <thead>
      <tr>
          <th>需求形狀</th>
          <th>改走</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>FIPS 140-2 Level 3 single-tenant HSM</td>
          <td><a href="/blog/backend/07-security-data-protection/vendors/cloudhsm/" data-link-title="AWS CloudHSM" data-link-desc="Single-tenant dedicated HSM（FIPS 140-2 Level 3）、AWS 不持 Crypto User credential、合規 &#43; 資料主權場景的 key custody">CloudHSM</a>、或 KMS Custom Key Store 橋接</td>
      </tr>
      <tr>
          <td>GCP-heavy 環境</td>
          <td><a href="/blog/backend/07-security-data-protection/vendors/google-cloud-kms/" data-link-title="Google Cloud KMS" data-link-desc="GCP 原生 key management service、KeyRing / CryptoKey Version 設計、CMEK 整合 &#43; Cloud HSM &#43; External Key Manager">Google Cloud KMS</a></td>
      </tr>
      <tr>
          <td>Azure-heavy + 跟 AD / Managed Identity 整合</td>
          <td><a href="/blog/backend/07-security-data-protection/vendors/azure-key-vault/" data-link-title="Azure Key Vault" data-link-desc="Azure 三合一 service（Secret &#43; Key &#43; Certificate）、整合 Managed Identity &#43; Entra ID RBAC、Premium tier 走 HSM">Azure Key Vault</a></td>
      </tr>
      <tr>
          <td>跨雲統一 key custody</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 transit engine</a></td>
      </tr>
      <tr>
          <td>Static secret + rotation orchestration</td>
          <td><a href="/blog/backend/07-security-data-protection/vendors/aws-secrets-manager/" data-link-title="AWS Secrets Manager" data-link-desc="AWS 原生 secret store &#43; 內建 RDS / Redshift rotation Lambda、Resource Policy 跨帳號共享、KMS 加密">AWS Secrets Manager</a>（後端是 KMS）</td>
      </tr>
      <tr>
          <td>K8s workload mTLS 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>（可用 KMS asymmetric key）</td>
      </tr>
      <tr>
          <td>Public TLS cert</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>數據主權 / on-prem HSM required</td>
          <td>KMS External Key Store (XKS) 或直接 <a href="/blog/backend/07-security-data-protection/vendors/cloudhsm/" data-link-title="AWS CloudHSM" data-link-desc="Single-tenant dedicated HSM（FIPS 140-2 Level 3）、AWS 不持 Crypto User credential、合規 &#43; 資料主權場景的 key custody">CloudHSM</a></td>
      </tr>
  </tbody>
</table>
<h2 id="不在本頁內的主題">不在本頁內的主題</h2>
<ul>
<li>KMS 完整 API reference 跟 SDK 範例</li>
<li>各 AWS service（S3 SSE-KMS、EBS encryption、RDS encryption、DynamoDB encryption）的詳盡設定步驟</li>
<li>跟 AWS Organizations / SCPs 的 cross-account KMS sharing 完整治理流程</li>
<li>CloudHSM cluster 的完整運維（高可用、user 管理、backup）— 看 <a href="/blog/backend/07-security-data-protection/vendors/cloudhsm/" data-link-title="AWS CloudHSM" data-link-desc="Single-tenant dedicated HSM（FIPS 140-2 Level 3）、AWS 不持 Crypto User credential、合規 &#43; 資料主權場景的 key custody">CloudHSM</a></li>
<li>各種 cryptographic algorithm 的數學原理跟選型細節</li>
</ul>
<h2 id="案例回寫">案例回寫</h2>
<p>KMS 在 07 案例庫沒有直接 vendor-level 事件、以下案例採對照引用：</p>
<table>
  <thead>
      <tr>
          <th>案例</th>
          <th>跟 KMS 的關係（對照）</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/07-security-data-protection/cases/microsoft-storm-0558-signing-key-2023/" data-link-title="7.C4 Microsoft：Storm-0558 簽章金鑰事件" data-link-desc="簽章金鑰事件如何回寫 identity 信任邊界與觀測證據鏈。">Microsoft Storm-0558 Signing Key 2023</a></td>
          <td>KMS 設計核心對照 — signing key 必須 HSM-bound + 不可導出、KMS 預設 key 完全不離 service；自己 host private key 是 Storm-0558 級事件的根因</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>三件事必到位：asymmetric KMS Key 做 JWT signing（private key 永遠不離 KMS）、強制 rotation 流程、CloudTrail Data Event 紀錄「誰用 key 簽什麼 token」</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/07-security-data-protection/cases/failure-credential-rotation-without-scope/" data-link-title="7.C9 反例：憑證輪替未分 Scope" data-link-desc="憑證輪替若未分域分批，容易造成跨系統連鎖中斷。">Failure: Credential Rotation Without Scope</a></td>
          <td>KMS Alias / Grant 的 rotation 跟 revocation 要分域 — 一次 Schedule Key Deletion 沒 scope map 等於潛在全停、Grant lifecycle 要納入治理</td>
      </tr>
  </tbody>
</table>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>上游：<a href="/blog/backend/07-security-data-protection/secrets-and-machine-credential-governance/" data-link-title="7.6 秘密管理與機器憑證治理" data-link-desc="以問題驅動方式整理 secret、token、key 與機器身份治理">7.6 秘密管理與機器憑證治理</a>、<a href="/blog/backend/07-security-data-protection/transport-trust-and-certificate-lifecycle/" data-link-title="7.5 傳輸信任與憑證生命週期" data-link-desc="以問題驅動方式整理傳輸信任鏈、會話完整性與憑證節奏">7.5 傳輸信任與憑證生命週期</a>（KMS 為 TLS / signing key 的 root custodian）、<a href="/blog/backend/07-security-data-protection/detection-coverage-and-signal-governance/" data-link-title="7.13 偵測覆蓋率與訊號治理" data-link-desc="定義偵測覆蓋、訊號品質與誤報成本的治理問題">7.13 偵測覆蓋率與訊號治理</a></li>
<li>平行：<a href="/blog/backend/07-security-data-protection/vendors/google-cloud-kms/" data-link-title="Google Cloud KMS" data-link-desc="GCP 原生 key management service、KeyRing / CryptoKey Version 設計、CMEK 整合 &#43; Cloud HSM &#43; External Key Manager">Google Cloud KMS</a>、<a href="/blog/backend/07-security-data-protection/vendors/azure-key-vault/" data-link-title="Azure Key Vault" data-link-desc="Azure 三合一 service（Secret &#43; Key &#43; Certificate）、整合 Managed Identity &#43; Entra ID RBAC、Premium tier 走 HSM">Azure Key Vault</a>、<a href="/blog/backend/07-security-data-protection/vendors/cloudhsm/" data-link-title="AWS CloudHSM" data-link-desc="Single-tenant dedicated HSM（FIPS 140-2 Level 3）、AWS 不持 Crypto User credential、合規 &#43; 資料主權場景的 key custody">CloudHSM</a></li>
<li>下游：<a href="/blog/backend/07-security-data-protection/vendors/aws-secrets-manager/" data-link-title="AWS Secrets Manager" data-link-desc="AWS 原生 secret store &#43; 內建 RDS / Redshift rotation Lambda、Resource Policy 跨帳號共享、KMS 加密">AWS Secrets Manager</a>（後端用 KMS）、<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>（可用 KMS asymmetric key 當 issuer）</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 控制面">HashiCorp Vault</a>（transit engine / 跨雲統一介面）</li>
<li>跨模組：<a href="/blog/backend/08-incident-response/vendors/" data-link-title="事故處理 Vendor 清單" data-link-desc="規劃 on-call、incident response、status page 與 postmortem 工具的服務頁撰寫順序與判準">8 事故處理 vendor 清單</a>（KMS 事件如何 routing 進 IR 流程）</li>
<li>官方：<a href="https://docs.aws.amazon.com/kms/">AWS KMS Documentation</a></li>
</ul>
]]></content:encoded></item></channel></rss>