

# 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 値を取得し、それらを使用してインスタンスのブートソフトウェアの整合性をリモートエンティティに証明することができます。これはリモート*認証*と呼ばれます。

NitroTPM を使用することで、キーおよびシークレットに特定の PCR 値をタグ付けできるため、PCR の値、つまりインスタンスの整合性が変更された場合にそれらにアクセスすることはできません。この特別な形式の条件付きアクセスは*封印および開封*と呼ばれます。[BitLocker](https://learn.microsoft.com/en-us/windows/security/operating-system-security/data-protection/bitlocker/) などのオペレーティングシステムのテクノロジーはNitroTPM を使用してドライブの復号化キーを封印し、オペレーティングシステムが正しく起動し、正常な状態である場合にのみドライブを復号化できます。

NitroTPM を使用するにはNitroTPM サポート用に設定された [Amazon マシンイメージ (AMI)](AMIs.md) を選択してから、その 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)
+ [AMI が NitroTPM に対して有効になっていることを確認する](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**  
Microsoft キーを使用して NitroTPM および UEFI Secure Boot 用に事前設定された AWS Windows AMIを見つけるには、「*AWSWindows AMI リファレンス*」の「[NitroTPM と UEFI Secure Boot で設定された Windows Server AMI を見つける](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/ami-windows-tpm.html#ami-windows-tpm-find)」をご覧ください。

**注記**  
**オペレーティングシステム** - 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、C8id、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、X8i、z1d
+ **ストレージ最適化**: 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 コンソールには表示されません。
+ NitroTPM 状態は [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、Local Zones、または Wavelength Zone ではサポートされていません。

# NitroTPM 用の Linux AMI の有効化
<a name="enable-nitrotpm-support-on-ami"></a>

インスタンスの NitroTPM を有効にするにはNitroTPM が有効な AMI を使用してインスタンスを起動する必要があります。Linux AMI を登録するときに、Linux AMI に NitroTPM サポートを設定する必要があります。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) コマンドレットの例を次に示します。

   ```
   $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 で起動した一時インスタンスを終了します。

# AMI が NitroTPM に対して有効になっていることを確認する
<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
```

NitroTPM が AMI に対して有効になっている場合、出力は次のとおりです。TPM が有効になっていない場合、出力は空です。

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

また、AMI 所有者の場合は、[describe-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html) コマンドと `tpmSupport` 属性を使用できます。

```
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) コマンドレットを使用します。

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

NitroTPM が AMI に対して有効になっている場合、出力は次のとおりです。TPM が有効になっていない場合、出力は空です。

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

または、AMI 所有者の場合は、[Get-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html) コマンドレットと `tpmSupport` 属性を使用できます。

```
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) を使用します。

デバイスドライバーを無効化する方法の詳細についてはオペレーティングシステムのドキュメントを参照してください。

# Amazon EC2 インスタンスが NitroTPM に対して有効になっていることを検証する
<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) コマンドレットを使用します。

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

------

## Windows インスタンスでの NitroTPM アクセスの確認
<a name="verify-nitrotpm-support-windows-instance"></a>

**(Windows インスタンスのみ) Windows が NitroTPM にアクセスできるかどうかを検証するには**

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 (TPM 製造元情報)フィールド。\]](http://docs.aws.amazon.com/ja_jp/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) コマンドレットを使用します。

**例 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
```

------