Amazon Web Services ブログ

Amazon EC2 が NitroTPM と UEFI Secure Boot のサポートを開始

コンピューティングにおいて、Trusted Platform Module (TPM) テクノロジーは、ハードウェアベースのセキュリティ関連機能を提供するように設計されています。TPM チップは、暗号化オペレーションを実行するために設計された安全な暗号プロセッサです。TPM テクノロジーを使用する主な利点は 3 つあります。第 1 に、オペレーティングシステムの外部で暗号化キーを生成および保存し、アクセスを制御できます。第 2 に、TPM モジュールを使用して、TPM に書き込まれた TPM の一意の RSA キーを使用して、プラットフォームデバイス認証を実行できます。第 3 に、セキュリティに関する測定値を取得して保存することにより、プラットフォームの整合性を確保するのに役立つ場合があります。

re:Invent 2021 の期間中、AWS Nitro System に基づく、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス用の仮想 TPM 2.0 準拠の TPM モジュールである NitroTPM の今後の提供に関する発表がありました。また、EC2 向けの Unified Extensible Firmware Interface (UEFI) Secure Boot の提供開始についても発表がありました。

2022 年 5 月 11 日(米国時間)より、中国以外のすべての AWS リージョン (AWS GovCloud (米国) リージョンを含む) で、NitroTPM と Secure Boot の両方が使用できるようになったことをお知らせします。

NitroTPM を使用して、ディスク暗号化キーや SSH キーなどのシークレットを EC2 インスタンスのメモリ外に保存し、インスタンスで実行されているアプリケーションから保護することができます。NitroTPM は、Nitro System の分離とセキュリティの特性を活用して、インスタンスのみがこれらのシークレットにアクセスできるようにします。物理 TPM またはディスクリート TPM と同じ機能を提供します。NitroTPM は ISO TPM 2.0 仕様に準拠しているため、TPM を活用する既存のオンプレミスのワークロードを EC2 に移行できます。

NitroTPM が利用可能になることで、OS レベルのボリューム暗号化のためのセキュアなキーストレージやアクセス、またはメジャーブートやアイデンティティアクセスのためのプラットフォームの構成証明など、EC2 インスタンスのセキュリティ体制を強化するいくつかのユースケースを実現できるようになります。

セキュアなキーストレージとアクセス
NitroTPM は、特定のプラットフォームの測定値にラップおよび紐付けられるキーを作成して保存できます (Platform Configuration Registers – PCR といいます)。NitroTPM は、これらのプラットフォームの測定値がキーの作成時点に持っていた値と同じ値である場合にのみ、キーのラップを解除します。このプロセスを「TPM へのキーの封印」といいます。 キーを復号することを「開封」といいます。NitroTPM は、インスタンスと OS が既知の良好な状態にある場合にのみキーを開封します。TPM 2.0 の仕様に準拠するオペレーティングシステムでは、このメカニズムを使用してボリューム暗号化キーを安全に開封します。NitroTPM を使用して、Microsoft Windows の BitLocker の暗号化キーを保存できます。Linux Unified Key Setup (LUKS) または Linux の dm-verity は、NitroTPM も活用できる OS レベルのアプリケーションの例です。

プラットフォームの構成証明
NitroTPM が提供するもう 1 つの重要な機能は「メジャーブート」です。これは、ブートローダーとオペレーティングシステムが、ブートプロセス中にロードするソフトウェアまたは設定の測定値に基づいて PCR を拡張するプロセスです。これにより、例えば、悪意のあるプログラムがカーネルの一部をマルウェアで上書きした場合のセキュリティが向上します。メジャーブートを使用すると、TPM から署名付き PCR 値を取得し、それらを使用してブート状態が有効であることをリモートサーバーに証明し、リモートの構成証明をサポートすることもできます。

NitroTPM の使用方法
NitroTPM の使用を開始するには、次の 3 つの前提条件を満たす必要があります。

  • TPM 2.0 用の Command Response Buffer (CRB) ドライバーが搭載されたオペレーティングシステム (最近のバージョンの Windows や Linux など) を使用する必要があります。これまでに、Red Hat Enterprise Linux 8、SUSE Linux Enterprise Server 15、Ubuntu 18.04、Ubuntu 20.04、ならびに Windows Server 2016、2019、および 2022 をテストしました。
  • Nitro ベースの EC2 インスタンスにデプロイする必要があります。現時点では、UEFI ブートモードをサポートするインテルおよび AMD のすべてのインスタンスタイプをサポートしています。Graviton1、Graviton2、Xen ベース、Mac、およびベアメタルインスタンスはサポートされていません。
  • 現在、NitroTPM は一部の追加のインスタンスタイプでは機能しませんが、これらのインスタンスタイプはリリース後まもなくサポートされる予定です。C6a、C6i、G4ad、G4dn、G5、Hpc6a、I4i、M6a、M6i、P3dn、R6i、T3、T3a、U-12tb1、U-3tb1、U-6tb1、U-9tb1、X2idn、X2iedn、および X2iezn が予定されています。
  • 独自の AMI を作成するときは、UEFI をブートモードとして使用し、NitroTPM を使用するようフラグを付ける必要があります。AWS が提供する Windows AMI には、デフォルトでフラグが付けられます。Linux ベースの AMI にはデフォルトではフラグが付いていません。独自に作成する必要があります。

TPM が有効になった状態で AMI を作成する方法
AWS は、TPM が有効になった状態で、複数のバージョンの Windows 用の AMI を提供しています。AMI が NitroTPM をサポートしているかどうかは、DescribeImages API コールを使用して確認できます。次に例を示します。

aws ec2 describe-images --image-ids ami-0123456789

NitroTPM が AMI に対して有効になっている場合、次の例のように “TpmSupport”: “v2.0” が出力に表示されます。

{
   "Images": [
      {
         ...
         "BootMode": "uefi",
         "TpmSupport": "v2.0"
      }
   ]
}

また、DescribeImageAttribute API コールを使用して tpmSupport をクエリすることもできます。

独自の AMI を作成する場合、boot-modeuefi に、tpm-supportv2.0 に設定することで、RegisterImage API コールを使用して TPM サポートを有効にすることができます。

aws ec2 register-image             \
       --region us-east-1           \
       --name my-image              \
       --boot-mode uefi             \
       --architecture x86_64        \
       --root-device-name /dev/xvda \
       --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0123456789example} DeviceName=/dev/xvdf,Ebs={VolumeSize=10} \
       --tpm-support v2.0

TPM が有効になった状態で AMI を作成する方法を見てきました。次に、Windows インスタンスを作成し、ルートボリュームを暗号化するように BitLocker を設定しましょう。

ウォークスルー: BitLocker で NitroTPM を使用する
BitLocker は NitroTPM を自動的に検出し、使用します (使用可能な場合)。BitLocker をインストールして設定するために、現時点で追加の設定ステップはありません。インストール時に、BitLocker は TPM モジュールを認識し、自動的に使用を開始します。

インストールステップを見ていきましょう。uefiTPM v2.0 の両方が有効になっている AMI を使用して、通常どおりインスタンスを起動します。サポートされているバージョンの Windows を使用していることを確認します。私が使用しているのは Windows Server 2022 04.13 です。

インスタンスに接続したら、Windows が TPM モジュールを認識していることを確認します。そのためには、tpm.msc アプリケーションを起動します。これにより、[Trusted Platform Module (TPM) Management] ウィンドウが開きます。すべてが正常に完了すると、[TPM Manufacturer Information] (TPM メーカー情報) の下に「Manufacturer Name: AMZN」と表示されます。

Trusted Platform Module Management次に、BitLocker をインストールします。

servermanager.exe アプリケーションを開き、画面の右上にある [Manage] (管理) を選択します。ドロップダウンメニューで、[Add Roles and Features] (ロールと機能を追加) を選択します。

ロールと機能を追加ウィザードから [Role-based or feature-based installation] (ロールベースまたは機能ベースのインストール) を選択します。

BitLocker をインストールする - ステップ 1[Features] (機能) セクションが表示されるまで [Next] (次へ) を複数回選択します。[BitLocker Drive Encryption] (BitLocker ドライブ暗号化) を選択し、[Install] (インストール) を選択します。

BitLocker をインストールする - ステップ 2インストールが完了するまで少し待機してから、インストールの締めくくりにサーバーを再起動します。

再起動後、サーバーに再接続してコントロールパネルを開きます。[System and Security] (システムとセキュリティ) セクションで [BitLocker Drive Encryption] (BitLocker ドライブ暗号化) を選択します。

BitLocker をオンにする - パート 1[Turn on BitLocker] (BitLocker をオンにする) を選択し、[Next] (次へ) を選択して、システムの検証とボリュームのデータの暗号化にかかる時間が経過するまで待機します。

私は、念のために、暗号化が終了した時点で再起動することにしました。厳密には必要ありません。しかし、私はマシンのルートボリューム (C:) を暗号化したので、マシンがまだ起動できるかどうか不明です。

再起動後、インスタンスに再接続し、暗号化ステータスを確認します。

BitLocker をオンにする - パート 2ボリュームで BitLocker のステータスとキー保護メソッドが有効になっていることも確認します。そのために、PowerShell を開いて次のように入力します:

manage-bde -protectors -get C:

BitLocker のステータス結果の画面で、C: ボリューム暗号化キーが NitroTPM モジュールから取得されており、インスタンスが整合性の検証に Secure Boot を使用したことを確認できます。回復キーも表示できます。

先ほど提示したスクリーンショットでは、回復キーをプレーンテキストのままにしました。このデモで使用したインスタンスとボリュームは、皆さんがこの記事を読むときにはもう存在しないからです。しかし、皆さんは回復キーを公に共有しないでください。

重要な考慮事項
ここまで、BitLocker のボリューム暗号化キーを保護するために NitroTPM を使用する方法を見てきました。次に、いくつかの追加の考慮事項を検討します。

  • NitroTPM 向けの AMI のサポートは、AWS CLI 経由で RegisterImage API を使用することによってのみ有効にできます。Amazon EC2 コンソール経由では使用できません。
  • NitroTPM サポートは、AMI にフラグを設定することで有効になります。AMI でインスタンスを起動した後は、そのインスタンスの属性を変更することはできません。ModifyInstanceAttribute API は、実行中または停止中のインスタンスではサポートされていません。
  • ImportImage API などで NitroTPM を使用して EC2 インスタンスをインポートまたはエクスポートすると、NitroTPM データは省略されます。
  • NitroTPM の状態は EBS スナップショットには含まれません。EBS スナップショットは同じ EC2 インスタンスにのみ復元できます。
  • TPM ベースのキーで暗号化された BitLocker ボリュームは、別のインスタンスに復元できません。インスタンスタイプを変更することは可能です (停止、インスタンスタイプの変更、再起動)。

現時点では、UEFI ブートモードをサポートするインテルおよび AMD のすべてのインスタンスタイプをサポートしています。Graviton1、Graviton2、Xen ベース、Mac、およびベアメタルインスタンスはサポートされていません。いくつかの追加のインスタンスタイプは、リリース時にはサポートされていません (詳細なリストは既に共有済みです)。これらのサポートはリリース後まもなく追加される予定です。

NitroTPM を使用するための追加費用はありません。現在、中国を除き、AWS GovCloud (米国) リージョンを含むすべての AWS リージョンでご利用いただけます。

さあ、構築しましょう ;-)

— seb

原文はこちらです。