

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon EC2 執行個體的 NitroTPM
<a name="nitrotpm"></a>

Nitro Trusted Platform Module (NitroTPM) 是由 [AWS Nitro System](https://aws.amazon.com//ec2/nitro/) 提供的虛擬裝置，符合 [TPM 2.0 規格](https://trustedcomputinggroup.org/resource/trusted-platform-module-2-0-a-brief-introduction/)。它可安全存放用於對執行個體執行身分驗證的成品 (如密碼、憑證或加密金鑰)。NitroTPM 可產生金鑰，並將其用於密碼編譯功能 (例如雜湊、簽署、加密和解密)。

NitroTPM 會採用*測量開機*過程，在這個過程中，開機載入器和作業系統會建立各開機二進位的密碼編譯雜湊，並將其與 NitroTPM 內部平台組態註冊 (PCR) 中的過往值結合。透過測量開機，您可從 NitroTPM 獲得簽署的 PCR 值，然後使用這些值向遠端實體證明執行個體開機軟體的完整性。這稱為遠端*證明*。

透過 NitRotTPM，可以使用特定 PCR 值標記金鑰和秘密，這樣便可確保，如果 PCR 值和執行個體完整性發生變化，就再也無法存取這些金鑰和秘密。這種特殊形式的條件式存取被稱為*密封和開封*。[BitLocker](https://learn.microsoft.com/en-us/windows/security/operating-system-security/data-protection/bitlocker/) 等作業系統技術皆可使用 NitroTPM 來密封磁碟機解密金鑰，這樣便可確保，只有作業系統已正確開機且確定處於良好狀態時才能解密磁碟機。

若要使用 NitroTPM，必須選取已設定 NitroTPM 支援的 [Amazon Machine Image](AMIs.md) (AMI)，然後使用 AMI 來啟動 [Nitro 型執行個體](instance-types.md#instance-hypervisor-type)。您可以選取一個 Amazon 預先建置的 AMI，或自行建立一個。

**定價**  
使用 NitroTPM 無需額外付費。只需為您使用的基礎資源支付費用。

**Topics**
+ [要求](enable-nitrotpm-prerequisites.md)
+ [啟用 NitroTPM 的 Linux AMI](enable-nitrotpm-support-on-ami.md)
+ [驗證已為 NitroTPM 啟用 AMI](verify-nitrotpm-support-on-ami.md)
+ [使用 NitroTPM 來啟用或停止](nitrotpm-instance.md)
+ [驗證已為 NitroTPM 啟用執行個體](verify-nitrotpm-support-on-instance.md)
+ [擷取公有背書金鑰](retrieve-ekpub.md)

# 搭配 Amazon EC2 執行個體使用 NitroTPM 的需求
<a name="enable-nitrotpm-prerequisites"></a>

若要在啟用 NitroTPM 的情況下啟動執行個體，您必須符合以下要求。

**Topics**
+ [AMI](#nitrotpm-ami)
+ [執行個體類型](#nitrotpm-instancetypes)
+ [考量事項](#nitrotpm-considerations)

## AMI
<a name="nitrotpm-ami"></a>

AMI 必須已啟用 NitroTPM。

**Linux AMI**  
無預先設定的 AMI。您必須設定自有 AMI。如需詳細資訊，請參閱[啟用 NitroTPM 的 Linux AMI](enable-nitrotpm-support-on-ami.md)。

**Windows AMI**  
若要尋找針對 NitroTPM 和 UEFI 安全開機搭配 Microsoft 金鑰預先設定的 AWS Windows AMI，請參閱 [Windows AMIs參考中的尋找使用 NitroTPM 和 UEFI 安全開機設定的 Windows Server](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/ami-windows-tpm.html#ami-windows-tpm-find) AMI。 *AWS AMIs *

**注意**  
**作業系統** – AMI 必須包含具有 TPM 2.0 Command Response Buffer (CRB) 驅動程式的作業系統。最新的作業系統會包含 TPM 2.0 CRB 驅動程式。  
**UEFI 開機模式** – 必須將 AMI 設定為 UEFI 開機模式。如需詳細資訊，請參閱[Amazon EC2 執行個體的 UEFI 安全開機](uefi-secure-boot.md)。

## 執行個體類型
<a name="nitrotpm-instancetypes"></a>

您必須使用下列其中一個虛擬化執行個體類型：
+ **一般用途**：M5, M5a, M5ad, M5d, M5dn, M5n, M5zn, M6a, M6g, M6gd, M6i, M6id, M6idn, M6in, M7a, M7g, M7gd, M7i, M7i-flex, M8a, M8azn, M8g, M8gb, M8gd, M8gn, M8i, M8id, M8i-flex, T3, T3a, T4g
+ **運算最佳化**：C5, C5a, C5ad, C5d, C5n, C6a, C6g, C6gd, C6gn, C6i, C6id, C6in, C7a, C7g, C7gd, C7gn, C7i, C7i-flex, C8a, C8g, C8gb, C8gd, C8gn, C8i, C8ib, C8id, C8in, C8i-flex
+ **記憶體最佳化**：R5, R5a, R5ad, R5b, R5d, R5dn, R5n, R6a, R6g, R6gd, R6i, R6id, R6idn, R6in, R7a, R7g, R7gd, R7i, R7iz, R8a, R8g, R8gb, R8gd, R8gn, R8i, R8id, R8i-flex, U7i-6tb, U7i-8tb, U7i-12tb, U7in-16tb, U7in-24tb, U7in-32tb, X2idn, X2iedn, X2iezn, X8g, X8aedz, X8iX
+ **儲存最佳化**：D3、D3en、I3en、I4i、I7i、I7ie、I8g、I8ge、Im4gn
+ **加速運算**：F2, G4dn, G5, G6, G6e, G6f, Gr6, Gr6f, G7e, Inf1, Inf2, P5, P5e, P5en, P6-B200, P6-B300, Trn2, Trn2u
+ **高效能運算**：Hpc6a, Hpc6id, Hpc8a

## 考量事項
<a name="nitrotpm-considerations"></a>

使用 NitroTPM 時需要注意以下事項：
+ 在您使用已啟用 NitroTPM 的 AMI 啟動執行個體後，若想要變更執行個體類型，您所選的新執行個體類型也必須支援 NitroTPM。
+ 使用 NitroTPM 型金鑰加密的 BitLocker 磁碟區僅能於原始執行個體上使用。
+ NitroTPM 狀態不會顯示在 Amazon EC2 主控台中。
+ [Amazon EBS 快照](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-snapshots.html)中不包含 NitroTPM 狀態。
+ [VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/) 映像中不包含 NitroTPM 狀態。
+ 上 AWS Outposts、本機區域或 Wavelength 區域不支援 NitroTPM。

# 啟用 NitroTPM 的 Linux AMI
<a name="enable-nitrotpm-support-on-ami"></a>

若要為執行個體啟用 NitroTPM，您必須使用具有已啟用 NitroTPM 的 AMI 來啟動執行個體。在註冊時，您必須使用 NitroTPM 支援來設定 Linux AMI。之後便無法再設定 NitroTPM 支援。

如需了解針對 NitroTPM 支援預先設定的 Windows AMI 清單，請參閱 [搭配 Amazon EC2 執行個體使用 NitroTPM 的需求](enable-nitrotpm-prerequisites.md)。

您必須使用 [RegisterImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RegisterImage.html) API 來建立已設定 NitroTPM 的 AMI。您無法使用 Amazon EC2 主控台或 VM Import/Export。

**啟用 NitroTPM 的 Linux AMI**

1. 使用所需的 Linux AMI 來啟動暫時執行個體。請留意其根磁碟區的 ID，您可在執行個體的**儲存體**索引標籤上的主控台中找到此 ID。

1. 在執行個體達到 `running` 狀態後，請建立執行個體根磁碟區的快照。若要了解詳細資訊，請參閱[建立 EBS 磁碟區的快照](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-create-snapshot.html)。

1. 將建立的快照註冊為 AMI。在區塊型儲存設備映射中，指定您為根磁碟區建立的快照。

   下方所示為 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 命令的範例。在 `--tpm-support`，請指定 `v2.0`。在 `--boot-mode`，請指定 `uefi`。

   ```
   aws ec2 register-image \
       --name my-image \
       --boot-mode uefi \
       --architecture x86_64 \
       --root-device-name /dev/xvda \
       --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0abcdef1234567890} \
       --tpm-support v2.0
   ```

   下方所示為 [Register-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) cmdlet的範例。

   ```
   $block = @{SnapshotId=snap-0abcdef1234567890}
   Register-EC2Image `
       -Name my-image `
       -Architecture "x86_64" `
       -RootDeviceName /dev/xvda `
       -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block} `
       -BootMode Uefi `
       -TpmSupport V20
   ```

1. 終止您在步驟 1 中啟動的暫時執行個體。

# 驗證已為 NitroTPM 啟用 AMI
<a name="verify-nitrotpm-support-on-ami"></a>

若要為執行個體啟用 NitroTPM，您必須使用具有已啟用 NitroTPM 的 AMI 來啟動執行個體。您可對映像進行描述，以確定該映像已啟用 NitroTPM。若您是 AMI 擁有者，可對 `tpmSupport` 映像屬性進行描述。

Amazon EC2 主控台不會顯示 `TpmSupport`。

------
#### [ AWS CLI ]

**如需確認是否已啟用 NitroTPM**  
使用 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query Images[*].TpmSupport
```

若已為 AMI 啟用 NitroTPM，則輸出中會如下所示。如果未啟用 TPM，則輸出為空白。

```
[
    "v2.0"
]
```

或者，若您是 AMI 擁有者，則可使用 `tpmSupport` 屬性並搭配 [describe-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html) 命令。

```
aws ec2 describe-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute tpmSupport
```

 以下為範例輸出。

```
{
    "ImageId": "ami-0abcdef1234567890",
    "TpmSupport": {
        "Value": "v2.0"
    }
}
```

**如需尋找啟用 NitroTPM 的 AMI**  
在下面的範例中，列示了啟用 NitroTPM 時您所擁有的 AMI 的 ID。

```
aws ec2 describe-images \
    --owners self \
    --filters Name=tpm-support,Values=v2.0 \
    --query Images[].ImageId
```

------
#### [ PowerShell ]

**如需確認是否已啟用 NitroTPM**  
使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。

```
Get-EC2Image `
    -ImageId ami-0abcdef1234567890 | Select TpmSupport
```

若已為 AMI 啟用 NitroTPM，則輸出中會如下所示。如果未啟用 TPM，則輸出為空白。

```
TpmSupport
----------
v2.0
```

或者，若您是 AMI 擁有者，則可使用 `tpmSupport` 屬性並搭配 [Get-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html) cmdlet。

```
Get-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute tpmSupport
```

**如需尋找啟用 NitroTPM 的 AMI**  
在下面的範例中，列示了啟用 NitroTPM 時您所擁有的 AMI 的 ID。

```
Get-EC2Image `
    -Owner self `
    -Filter @{Name="tpm-support; Values="v2.0"} | Select ImageId
```

------

# 啟用或停止 Amazon EC2 執行個體上的 NitroTPM
<a name="nitrotpm-instance"></a>

您僅可在啟動時為 NitroTPM 啟用 Amazon EC2 執行個體。在為 NitroTPM 啟用執行個體後，您便無法停用。若您不再需要使用 NitroTPM，就必須設定作業系統以停止使用。

**Topics**
+ [啟動執行個體並啟用 NitroTPM](#launch-instance-with-nitrotpm)
+ [停用執行個體的 NitroTPM](#disable-nitrotpm-support-on-instance)

## 啟動執行個體並啟用 NitroTPM
<a name="launch-instance-with-nitrotpm"></a>

在滿足[先決條件](enable-nitrotpm-prerequisites.md)的情況下啟動執行個體時，NitroTPM 會在執行個體上自動啟用。您僅可在執行個體啟動時啟用執行個體的 NitroTPM。如需有關啟動執行個體的詳細資訊，請參閱[啟動 Amazon EC2 執行個體](LaunchingAndUsingInstances.md)。

## 停用執行個體的 NitroTPM
<a name="disable-nitrotpm-support-on-instance"></a>

啟動執行個體並啟用其 NitroTPM 後，便無法停用該執行個體的 NitroTPM。但是，您可以使用以下工具，停用執行個體上的 TPM 2.0 裝置驅動程式，從而將作業系統設定為停止使用 NitroTPM：
+ 若為 **Linux 執行個體**，請使用 tpm-tools。
+ 若為 **Windows 執行個體**，請使用 TPM 管理主控台 (tpm.msc)。

如需有關停用裝置驅動程式的詳細資訊，請參閱適用於您作業系統的相關文件。

# 驗證已為 NitroTPM 啟用 Amazon EC2 執行個體
<a name="verify-nitrotpm-support-on-instance"></a>

您可確認 Amazon EC2 執行個體是否已啟用 NitroTPM。若在執行個體上已啟用 NitroTPM 支援，命令將傳回 `"v2.0"`。否則，輸出中不會存在 `TpmSupport` 欄位。

Amazon EC2 主控台不會顯示 `TpmSupport` 欄位。

------
#### [ AWS CLI ]

**驗證是否已為 NitroTPM 啟動執行個體。**  
使用 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令。

```
aws ec2 describe-instances \
    --instance-ids i-1234567890abcdef0 \
    --query Reservations[].Instances[].TpmSupport
```

------
#### [ PowerShell ]

**驗證是否已為 NitroTPM 啟動執行個體。**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet。

```
(Get-EC2Instance `
    -InstanceId i-1234567890abcdef0).Instances.TpmSupport
```

------

## 確認您的 Windows 執行個體上的 NitroTPM 存取權
<a name="verify-nitrotpm-support-windows-instance"></a>

**(僅限 Windows 執行個體) 驗證 NitroTPM 是否可存取 Windows**

1. [連接至 EC2 Windows 執行個體。](connecting_to_windows_instance.md)

1. 在執行個體上，執行 tpm.msc 程式。

   系統將會開啟 **TPM Management on Local Computer** (本機電腦上的 TPM 管理) 視窗。

1. 查看 **TPM Manufacturer Information** (TPM 製造商資訊) 欄位。此欄位中包含製造商的名稱和執行個體上的 NitroTPM 版本。  
![\[TPM Management on Local Computer (本機電腦上的 TPM 管理) 視窗和顯示執行個體上 NitroTPM 版本的 TPM Manufacturer Information (TPM 製造商資訊) 欄位。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/tpm-1.png)

# 擷取 EC2 執行個體的公有背書金鑰
<a name="retrieve-ekpub"></a>

您隨時可以安全地擷取執行個體的公有背書金鑰。

------
#### [ AWS CLI ]

**擷取執行個體的公有背書金鑰**  
請使用 [get-instance-tpm-ek-pub](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-tpm-ek-pub.html) 命令。

**範例 1**  
以下範例會取得指定執行個體的 `rsa-2048` 公有背書金鑰 (格式為 `tpmt`)。

```
aws ec2 get-instance-tpm-ek-pub \
    --instance-id i-1234567890abcdef0 \
    --key-format tpmt \ 
    --key-type rsa-2048
```

下列為範例輸出。

```
{
    "InstanceId": "i-01234567890abcdef",
    "KeyFormat": "tpmt",
    "KeyType": "rsa-2048",
    "KeyValue": "AAEACwADALIAIINxl2dEhLEXAMPLEUal1yT9UtduBlILZPKh2hszFGmqAAYAgABDA
    EXAMPLEAAABAOiRd7WmgtdGNoV1h/AxmW+CXExblG8pEUfNm0LOLiYnEXAMPLERqApiFa/UhvEYqN4
    Z7jKMD/usbhsQaAB1gKA5RmzuhSazHQkax7EXAMPLEzDthlS7HNGuYn5eG7qnJndRcakS+iNxT8Hvf
    0S1ZtNuItMs+Yp4SO6aU28MT/JZkOKsXIdMerY3GdWbNQz9AvYbMEXAMPLEPyHfzgVO0QTTJVGdDxh
    vxtXCOu9GYf0crbjEXAMPLEd4YTbWdDdgOKWF9fjzDytJSDhrLAOUctNzHPCd/92l5zEXAMPLEOIFA
    Ss50C0/802c17W2pMSVHvCCa9lYCiAfxH/vYKovAAE="
}
```

**範例 2**  
以下範例會取得指定執行個體的 `rsa-2048` 公有背書金鑰 (格式為 `der`)。

```
aws ec2 get-instance-tpm-ek-pub \
    --instance-id i-1234567890abcdef0 \
    --key-format der \ 
    --key-type rsa-2048
```

下列為範例輸出。

```
{
    "InstanceId": "i-1234567890abcdef0",
    "KeyFormat": "der",
    "KeyType": "rsa-2048",
    "KeyValue": "MIIBIjANBgEXAMPLEw0BAQEFAAOCAQ8AMIIBCgKCAQEA6JF3taEXAMPLEXWH8DGZb4
    JcTFuUbykRR82bQs4uJifaKSOv5NGoEXAMPLEG8Rio3hnuMowP+6xuGxBoAHWAoDlGbO6FJrMdEXAMP
    LEnYUHvMO2GVLsc0a5ifl4buqcmd1FxqRL6I3FPwe9/REXAMPLE0yz5inhI7ppTbwxP8lmQ4qxch0x6
    tjcZ1Zs1DP0EXAMPLERUYLQ/Id/OBU7RBNMlUZ0PGG/G1cI670Zh/RytuOdx9iEXAMPLEtZ0N2A4pYX
    1+PMPK0lIOGssA5Ry03Mc8J3/3aXnOD2/ASRQ4gUBKznQLT/zTZEXAMPLEJUe8IJr2VgKIB/Ef+9gqi
    8AAQIDAQAB"
}
```

------
#### [ PowerShell ]

**擷取執行個體的公有背書金鑰**  
使用 [Get-EC2InstanceTpmEkPub](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceTpmEkPub.html) cmdlet。

**範例 1**  
以下範例會取得指定執行個體的 `rsa-2048` 公有背書金鑰 (格式為 `tpmt`)。

```
Get-EC2InstanceTpmEkPub `
    -InstanceId i-1234567890abcdef0 `
    -KeyFormat tpmt `
    -KeyType rsa-2048
```

**範例 2**  
以下範例會取得指定執行個體的 `rsa-2048` 公有背書金鑰 (格式為 `der`)。

```
Get-EC2InstanceTpmEkPub `
    -InstanceId i-1234567890abcdef0 `
    -KeyFormat der `
    -KeyType rsa-2048
```

------