<?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>Secure-Boot on Tarragon</title><link>https://tarrragon.github.io/blog/tags/secure-boot/</link><description>Recent content in Secure-Boot on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Sat, 24 Oct 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/secure-boot/index.xml" rel="self" type="application/rss+xml"/><item><title>安全開機：Secure Boot、Measured Boot 與 TPM</title><link>https://tarrragon.github.io/blog/devops/infra/cloud-providers/vm-options/shielded-boot/</link><pubDate>Sat, 24 Oct 2026 00:00:00 +0800</pubDate><guid>https://tarrragon.github.io/blog/devops/infra/cloud-providers/vm-options/shielded-boot/</guid><description>&lt;p>在開機階段植入的惡意程式（bootkit、rootkit）在作業系統啟動之前就載入，作業系統裡的防毒與稽核工具看不到它。建立頁上保護開機過程的選項就是針對這一類程式：Oracle Cloud 把它們歸在 Security 區塊下的 Shielded instance，官方說明是用 Secure Boot、Measured Boot 與 TPM 三者的組合強化韌體層的安全。&lt;/p>
&lt;h2 id="secure-bootmeasured-boot-與-tpm-各自的作用">Secure Boot、Measured Boot 與 TPM 各自的作用&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Secure Boot&lt;/strong>：開機時韌體逐一驗證開機載入程式與核心的數位簽章，簽章不屬於受信任的發行者就拒絕載入。效果是只有作業系統廠商簽過的開機程式跑得起來。&lt;/li>
&lt;li>&lt;strong>Measured Boot&lt;/strong>：開機過程中，每一個階段的程式（韌體、開機載入程式）在載入下一個元件之前先量測那個元件，量測值寫進 TPM 的平台設定暫存器（PCR）。它不阻擋任何元件載入，只留下紀錄。Oracle Cloud 把第一次開機的量測值存成基準（golden measurements），之後每次開機時，新的量測值跟基準比對（官方〈Shielded Instances〉沒有寫比對在主機裡還是在業者那一端執行），結果顯示在主控台主機詳細資料頁的盾牌圖示上：開機順序跟基準不符時是紅色，多出新的 PCR 值時是黃色，兩種情形主機都照樣開機。官方提醒更新作業系統之後可能要重設基準，重設的步驟在同一頁。Google Cloud 對應的比對功能叫 integrity monitoring。&lt;/li>
&lt;li>&lt;strong>TPM（Trusted Platform Module）&lt;/strong>：存放開機量測值與金鑰的安全晶片，雲端主機上是虛擬的。Measured Boot 的紀錄寫在這裡，作業系統也可以用它保存磁碟加密金鑰這類秘密。&lt;/li>
&lt;/ul>
&lt;p>Secure Boot 是事前攔截，Measured Boot 是事後偵測。TPM 是 Measured Boot 存放量測值的地方；官方說明裡 Secure Boot 的簽章驗證由 UEFI 韌體完成，沒有寫它用到 TPM。Oracle Cloud 上哪幾項要一起開依作業系統而定：Windows 虛擬機三項必須一起開，勾選其中一項時主控台會自動勾上另外兩項；Linux 虛擬機可以只開 Secure Boot、只開 TPM 加 Measured Boot，或三項全開。&lt;/p>
&lt;h2 id="oracle-cloud-上-shielded-instance-的限制">Oracle Cloud 上 shielded instance 的限制&lt;/h2>
&lt;p>Oracle Cloud 的官方〈Shielded Instances〉寫明，shielded instance 建好之後編輯主機時只能改名稱：機型不能改、遷移的設定也不能改，三項安全開機的設定同樣不能事後開關。所以開了安全開機的主機，核心數與記憶體要在建立時就定好，要改就重建。同一頁另外列了下面這些限制：&lt;/p>
&lt;ul>
&lt;li>不支援自訂映像，只能用業者的平台映像建立。&lt;/li>
&lt;li>不支援即時遷移與重開機遷移：業者維護底層硬體時，不會替這台主機做自動遷移，官方寫的是要遷移就由使用者手動遷移，搬到新硬體之後 Secure Boot 的金鑰與開機量測值會在新主機上重新取得。官方〈Infrastructure Maintenance〉的手動遷移做法是終止主機、再用保留下來的開機磁碟建一台新的，開了 TPM 的主機另有額外步驟；維護事件發生時 shielded 虛擬機要停機多久、業者是否事先通知，兩頁都沒有單獨寫。其他主機的維護行為見 &lt;a href="https://tarrragon.github.io/blog/devops/infra/cloud-providers/vm-options/management/" data-link-title="代理程式、中繼資料服務、初始化腳本、維護行為與標籤" data-link-desc="雲端主機建立頁管理區塊的選項：業者裝在主機裡的代理程式與它的 plugin 怎麼決定開關、中繼資料服務的第二版存取驗證、開機時執行的初始化腳本、底層硬體維護時主機會被遷移還是重開，以及標籤">代理程式、中繼資料服務、初始化腳本、維護行為與標籤&lt;/a> 的〈硬體維護時的行為〉。&lt;/li>
&lt;li>跟機密運算（confidential computing，CPU 在運算時也把記憶體裡的資料加密）互斥，一台主機只能選其中一種。&lt;/li>
&lt;/ul>
&lt;p>這幾條是 Oracle Cloud 的規則。Google Cloud 的 Confidential VM 本身就是 Shielded VM，兩者不互斥。&lt;/p>
&lt;h2 id="實驗主機開啟安全開機的取捨">實驗主機開啟安全開機的取捨&lt;/h2>
&lt;p>官方〈Shielded Instances〉沒有提到開啟這三項會另外收費；要確認自己的帳號，建好之後到帳單的成本分析頁看有沒有出現新的計費項目。開啟的代價在相容性：Secure Boot 會拒絕沒有簽章的核心模組與自己編譯的核心，要裝第三方驅動程式（部分 GPU、虛擬化或網路驅動）或自訂核心時會開不了機或載入失敗。業者的平台映像本身是簽過的，只跑一般套件時開著不會有感。在 Oracle Cloud 上另有一個代價在彈性：開了之後機型不能改，實驗機「先開小、不夠再加」的做法就走不通。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>跑一般服務、使用平台映像&lt;/strong>：開或不開都可以；有合規要求（要求開機鏈可驗證）時開。&lt;/li>
&lt;li>&lt;strong>要裝自訂核心或沒有簽章的驅動程式&lt;/strong>：不開，或先確認那個驅動程式支援 Secure Boot 的簽章流程。在 Linux 上，這個流程是用自己的金鑰簽驅動程式、再把那把金鑰登錄進開機鏈信任的清單（Machine Owner Key，MOK）；合規要求開機鏈可驗證、又要裝這類驅動程式時，就要走這條路，做法以那個驅動程式與發行版的文件為準。這一組條件最容易在主機建好幾個月之後才遇到：用 DKMS（套件更新時自動重新編譯核心模組的機制）安裝的驅動程式，編譯與套件安裝都會成功，到 &lt;code>modprobe&lt;/code> 載入模組時才被拒絕，錯誤訊息是 &lt;code>Key was rejected by service&lt;/code>；而 Oracle Cloud 上安全開機的設定建立後不能關，只能登錄 MOK 或重建主機。官方另外寫明，主機終止時登錄過的 MOK 會一起刪除，重建的主機要先用標準簽章的核心開機、再重新登錄 MOK。&lt;/li>
&lt;li>&lt;strong>實驗與學習用的主機&lt;/strong>：維持建立頁的預設即可，要測試這個功能時另外建一台開啟的。Oracle Cloud 建立 A1 Ubuntu 主機時建立頁上三項預設都關閉（&lt;a href="https://tarrragon.github.io/blog/devops/infra/cloud-providers/oracle-cloud/hands-on/launch-instance-walkthrough/" data-link-title="Oracle Cloud 建立主機的實測紀錄：建立前的檢查、前置網路、主控台各分頁的 Always Free 設定值、等效的 CLI 指令、容量不足的重送、Bastion 工作階段逾時、Run Command 補公鑰的嘗試與重建後經由 port forwarding 登入" data-link-desc="要在 Oracle Cloud 建一台沒有公開 IP、經由 Bastion 登入的 Always Free A1 主機，想照一次實測重做、看建立頁每一欄的取值與換一種做法的結果時讀；也用在建立請求一直回容量不足、managed SSH session 建立逾時，或沒放公鑰的主機想用 Run Command 救援、Oracle Linux 10 的主機上找不到 Bastion plugin、想改用 port forwarding session 登入的時候">實測紀錄&lt;/a>的 Security 段）；Google Cloud 的 Shielded VM 預設開啟 vTPM 與 integrity monitoring。&lt;/li>
&lt;/ul>
&lt;h2 id="各家的欄位名稱開機保護的總稱secure-boot開機量測與-tpm">各家的欄位名稱：開機保護的總稱、Secure Boot、開機量測與 TPM&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>概念&lt;/th>
 &lt;th>Oracle Cloud&lt;/th>
 &lt;th>Google Cloud&lt;/th>
 &lt;th>AWS&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>開機保護的總稱&lt;/td>
 &lt;td>Shielded instance&lt;/td>
 &lt;td>Shielded VM&lt;/td>
 &lt;td>無總稱，個別設定&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Secure Boot&lt;/td>
 &lt;td>Secure Boot&lt;/td>
 &lt;td>Secure Boot&lt;/td>
 &lt;td>UEFI Secure Boot（AMI 的屬性）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>開機量測&lt;/td>
 &lt;td>Measured Boot&lt;/td>
 &lt;td>Integrity monitoring&lt;/td>
 &lt;td>NitroTPM 搭配作業系統的量測工具&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>TPM&lt;/td>
 &lt;td>Trusted Platform Module&lt;/td>
 &lt;td>vTPM&lt;/td>
 &lt;td>NitroTPM&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>映像檔的三種來源與架構相容的規則見 &lt;a href="https://tarrragon.github.io/blog/devops/infra/cloud-providers/vm-options/shape-and-image/" data-link-title="機型與映像檔：CPU 架構、核心與記憶體、計費模式與作業系統" data-link-desc="雲端主機的機型決定的 CPU 架構、核心與記憶體，計費模式（隨用隨付、可被收回、預留容量、專屬主機）各自的條件，映像檔與機型之間的架構相容性，以及哪些項目建立後可以調整">機型與映像檔&lt;/a>；Oracle Cloud 的 shielded instance 只能用其中的平台映像。&lt;/p></description><content:encoded><![CDATA[<p>在開機階段植入的惡意程式（bootkit、rootkit）在作業系統啟動之前就載入，作業系統裡的防毒與稽核工具看不到它。建立頁上保護開機過程的選項就是針對這一類程式：Oracle Cloud 把它們歸在 Security 區塊下的 Shielded instance，官方說明是用 Secure Boot、Measured Boot 與 TPM 三者的組合強化韌體層的安全。</p>
<h2 id="secure-bootmeasured-boot-與-tpm-各自的作用">Secure Boot、Measured Boot 與 TPM 各自的作用</h2>
<ul>
<li><strong>Secure Boot</strong>：開機時韌體逐一驗證開機載入程式與核心的數位簽章，簽章不屬於受信任的發行者就拒絕載入。效果是只有作業系統廠商簽過的開機程式跑得起來。</li>
<li><strong>Measured Boot</strong>：開機過程中，每一個階段的程式（韌體、開機載入程式）在載入下一個元件之前先量測那個元件，量測值寫進 TPM 的平台設定暫存器（PCR）。它不阻擋任何元件載入，只留下紀錄。Oracle Cloud 把第一次開機的量測值存成基準（golden measurements），之後每次開機時，新的量測值跟基準比對（官方〈Shielded Instances〉沒有寫比對在主機裡還是在業者那一端執行），結果顯示在主控台主機詳細資料頁的盾牌圖示上：開機順序跟基準不符時是紅色，多出新的 PCR 值時是黃色，兩種情形主機都照樣開機。官方提醒更新作業系統之後可能要重設基準，重設的步驟在同一頁。Google Cloud 對應的比對功能叫 integrity monitoring。</li>
<li><strong>TPM（Trusted Platform Module）</strong>：存放開機量測值與金鑰的安全晶片，雲端主機上是虛擬的。Measured Boot 的紀錄寫在這裡，作業系統也可以用它保存磁碟加密金鑰這類秘密。</li>
</ul>
<p>Secure Boot 是事前攔截，Measured Boot 是事後偵測。TPM 是 Measured Boot 存放量測值的地方；官方說明裡 Secure Boot 的簽章驗證由 UEFI 韌體完成，沒有寫它用到 TPM。Oracle Cloud 上哪幾項要一起開依作業系統而定：Windows 虛擬機三項必須一起開，勾選其中一項時主控台會自動勾上另外兩項；Linux 虛擬機可以只開 Secure Boot、只開 TPM 加 Measured Boot，或三項全開。</p>
<h2 id="oracle-cloud-上-shielded-instance-的限制">Oracle Cloud 上 shielded instance 的限制</h2>
<p>Oracle Cloud 的官方〈Shielded Instances〉寫明，shielded instance 建好之後編輯主機時只能改名稱：機型不能改、遷移的設定也不能改，三項安全開機的設定同樣不能事後開關。所以開了安全開機的主機，核心數與記憶體要在建立時就定好，要改就重建。同一頁另外列了下面這些限制：</p>
<ul>
<li>不支援自訂映像，只能用業者的平台映像建立。</li>
<li>不支援即時遷移與重開機遷移：業者維護底層硬體時，不會替這台主機做自動遷移，官方寫的是要遷移就由使用者手動遷移，搬到新硬體之後 Secure Boot 的金鑰與開機量測值會在新主機上重新取得。官方〈Infrastructure Maintenance〉的手動遷移做法是終止主機、再用保留下來的開機磁碟建一台新的，開了 TPM 的主機另有額外步驟；維護事件發生時 shielded 虛擬機要停機多久、業者是否事先通知，兩頁都沒有單獨寫。其他主機的維護行為見 <a href="/blog/devops/infra/cloud-providers/vm-options/management/" data-link-title="代理程式、中繼資料服務、初始化腳本、維護行為與標籤" data-link-desc="雲端主機建立頁管理區塊的選項：業者裝在主機裡的代理程式與它的 plugin 怎麼決定開關、中繼資料服務的第二版存取驗證、開機時執行的初始化腳本、底層硬體維護時主機會被遷移還是重開，以及標籤">代理程式、中繼資料服務、初始化腳本、維護行為與標籤</a> 的〈硬體維護時的行為〉。</li>
<li>跟機密運算（confidential computing，CPU 在運算時也把記憶體裡的資料加密）互斥，一台主機只能選其中一種。</li>
</ul>
<p>這幾條是 Oracle Cloud 的規則。Google Cloud 的 Confidential VM 本身就是 Shielded VM，兩者不互斥。</p>
<h2 id="實驗主機開啟安全開機的取捨">實驗主機開啟安全開機的取捨</h2>
<p>官方〈Shielded Instances〉沒有提到開啟這三項會另外收費；要確認自己的帳號，建好之後到帳單的成本分析頁看有沒有出現新的計費項目。開啟的代價在相容性：Secure Boot 會拒絕沒有簽章的核心模組與自己編譯的核心，要裝第三方驅動程式（部分 GPU、虛擬化或網路驅動）或自訂核心時會開不了機或載入失敗。業者的平台映像本身是簽過的，只跑一般套件時開著不會有感。在 Oracle Cloud 上另有一個代價在彈性：開了之後機型不能改，實驗機「先開小、不夠再加」的做法就走不通。</p>
<ul>
<li><strong>跑一般服務、使用平台映像</strong>：開或不開都可以；有合規要求（要求開機鏈可驗證）時開。</li>
<li><strong>要裝自訂核心或沒有簽章的驅動程式</strong>：不開，或先確認那個驅動程式支援 Secure Boot 的簽章流程。在 Linux 上，這個流程是用自己的金鑰簽驅動程式、再把那把金鑰登錄進開機鏈信任的清單（Machine Owner Key，MOK）；合規要求開機鏈可驗證、又要裝這類驅動程式時，就要走這條路，做法以那個驅動程式與發行版的文件為準。這一組條件最容易在主機建好幾個月之後才遇到：用 DKMS（套件更新時自動重新編譯核心模組的機制）安裝的驅動程式，編譯與套件安裝都會成功，到 <code>modprobe</code> 載入模組時才被拒絕，錯誤訊息是 <code>Key was rejected by service</code>；而 Oracle Cloud 上安全開機的設定建立後不能關，只能登錄 MOK 或重建主機。官方另外寫明，主機終止時登錄過的 MOK 會一起刪除，重建的主機要先用標準簽章的核心開機、再重新登錄 MOK。</li>
<li><strong>實驗與學習用的主機</strong>：維持建立頁的預設即可，要測試這個功能時另外建一台開啟的。Oracle Cloud 建立 A1 Ubuntu 主機時建立頁上三項預設都關閉（<a href="/blog/devops/infra/cloud-providers/oracle-cloud/hands-on/launch-instance-walkthrough/" data-link-title="Oracle Cloud 建立主機的實測紀錄：建立前的檢查、前置網路、主控台各分頁的 Always Free 設定值、等效的 CLI 指令、容量不足的重送、Bastion 工作階段逾時、Run Command 補公鑰的嘗試與重建後經由 port forwarding 登入" data-link-desc="要在 Oracle Cloud 建一台沒有公開 IP、經由 Bastion 登入的 Always Free A1 主機，想照一次實測重做、看建立頁每一欄的取值與換一種做法的結果時讀；也用在建立請求一直回容量不足、managed SSH session 建立逾時，或沒放公鑰的主機想用 Run Command 救援、Oracle Linux 10 的主機上找不到 Bastion plugin、想改用 port forwarding session 登入的時候">實測紀錄</a>的 Security 段）；Google Cloud 的 Shielded VM 預設開啟 vTPM 與 integrity monitoring。</li>
</ul>
<h2 id="各家的欄位名稱開機保護的總稱secure-boot開機量測與-tpm">各家的欄位名稱：開機保護的總稱、Secure Boot、開機量測與 TPM</h2>
<table>
  <thead>
      <tr>
          <th>概念</th>
          <th>Oracle Cloud</th>
          <th>Google Cloud</th>
          <th>AWS</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>開機保護的總稱</td>
          <td>Shielded instance</td>
          <td>Shielded VM</td>
          <td>無總稱，個別設定</td>
      </tr>
      <tr>
          <td>Secure Boot</td>
          <td>Secure Boot</td>
          <td>Secure Boot</td>
          <td>UEFI Secure Boot（AMI 的屬性）</td>
      </tr>
      <tr>
          <td>開機量測</td>
          <td>Measured Boot</td>
          <td>Integrity monitoring</td>
          <td>NitroTPM 搭配作業系統的量測工具</td>
      </tr>
      <tr>
          <td>TPM</td>
          <td>Trusted Platform Module</td>
          <td>vTPM</td>
          <td>NitroTPM</td>
      </tr>
  </tbody>
</table>
<p>映像檔的三種來源與架構相容的規則見 <a href="/blog/devops/infra/cloud-providers/vm-options/shape-and-image/" data-link-title="機型與映像檔：CPU 架構、核心與記憶體、計費模式與作業系統" data-link-desc="雲端主機的機型決定的 CPU 架構、核心與記憶體，計費模式（隨用隨付、可被收回、預留容量、專屬主機）各自的條件，映像檔與機型之間的架構相容性，以及哪些項目建立後可以調整">機型與映像檔</a>；Oracle Cloud 的 shielded instance 只能用其中的平台映像。</p>
]]></content:encoded></item></channel></rss>