AWS AMI セキュアブート調査

経緯

[まず結論] TPM に対応しているAMIを選択するとセキュアブートが有効になった状態で起動できる。

AWS サービスでゲーミングパソコンを構築しようとあれこれしていたところ、構築した仮想マシンでセキュアブートが無効になっていることを確認した。

★セキュアブートとは…
コンピューター起動時に正規の信頼できるソフトウェア(OSやドライバーなど)だけが実行されるように署名を検証、認証・許可するセキュリティ機能。
Win11 では必須の機能である。

[セキュアブートの役割]
キュアブートは、UEFI が持つ鍵データベース(PK/KEK/db/dbx)を使って、

  • 信頼された署名のブートローダーだけを許可(db)
  • 脆弱・悪意ある署名をブロック(dbx)

することで、ブートキットやマルウェアからシステムを保護できる。

GPU インスタンスを使ってアート生成や機械学習を行う場合、セキュアブートを有効化すると ドライバ署名の整合性チェック が入るため、環境構築の安定性は増すが柔軟性はやや制限される。安定性重視(署名済みモジュールのみ)と 柔軟性重視(カスタムビルドも許容)どちらの運用を優先するかがポイント。

[UEFIとセキュアブート]
セキュアブートは UEFI の機能の一部であり、UEFI モードでなければ利用できない。
つまり、UEFI が土台、セキュアブートはその上に乗るセキュリティ機能である。

・Microsoft の公式ドキュメントでは、セキュアブートは UEFI 仕様の一部であるセキュリティ標準と明記されている。
・UEFI モードでないとセキュアブートは有効化できない。また、Legacy BIOS モードではセキュアブートは使えない

⇒上記は、セキュアブートが UEFI の署名検証機能に依存しているためである。

[UEFI-preferred]
「UEFI-preferred」はUEFIを優先するが、もしUEFIで起動できない場合は自動的にレガシーBIOSモードでの起動にフォールバックする。

ブートモード挙動利点注意点
UEFI常にUEFIモードで起動– セキュアブート対応
– GPTディスク利用可能
– 高速起動
– UEFI非対応環境では起動不可
UEFI-preferredUEFIを優先し、失敗時はレガシーBIOSで起動– UEFI環境ではUEFIのメリットを享受
– 非UEFI環境でも起動可能
– レガシーBIOSにフォールバックするとセキュアブート等の機能は使えない
  • UEFI固定モード
    → セキュリティや最新機能を確実に使いたい場合(例: Windows 11要件を満たす環境)。
  • UEFI-preferredモード
    → AMIやOSイメージを複数環境で使い回す場合。UEFI対応環境ではUEFIで起動し、古い環境ではBIOSで起動できるため柔軟性が高い。

AMI のブートモードの確認方法

・EC2 → AMIs → 作成したAMIを選択
・画面下部の「Details」欄に Boot mode が表示されるか確認(uefi / legacy)。表示がない場合は次の手順でテスト起動して確認する。

[仮想マシン上での確認方法]
Windowsでスタート → msinfo32 を実行

  • BIOS Mode が UEFI であること、Secure Boot State が On になっていることを確認。

    [セキュアブート対応のインスタンスのポイント]

    種類説明
    Nitro System ベースのインスタンスM5、C5、R5、T3、T4g、C6、M6、R6、などの世代は UEFI をサポートしており、セキュアブートが有効化可能。
    Amazon Linux 2023AL2023.1 以降の AMI がセキュアブートに対応。
    Windows ServerWindows Server 2019 / 2022 の EC2 インスタンスで、ブートモードを UEFI セキュアブートに変換可能。
    Red Hat Enterprise Linux (RHEL)AWS Marketplace 提供の RHEL AMI(uefi-preferred 設定済み)でセキュアブートが利用可能。

    AWSでセキュアブートを利用するには、Nitro ベースのインスタンス(M5/C5/R5/T3/T4g/C6/M6/R6 系など)と、UEFI 対応 AMI(Amazon Linux 2023、Windows Server 2019/2022、RHEL Marketplace AMI)を組み合わせる必要がある。これにより、起動時に署名済みソフトウェアのみが許可され、より強固なセキュリティを確保できる。

    [引用元サイト①] [引用元サイト②] [引用元サイト③]

    TPM の必要性

    AWS AMI の文脈でいう TPM は、正確には NitroTPM を指す。これは AWS Nitro System 上で提供される 仮想 TPM 2.0 で、EC2 インスタンスにハードウェア TPM と同等のセキュリティ機能を提供する。

    AWS 公式ブログでも、NitroTPM は TPM 2.0 準拠の仮想 TPM モジュール と説明されている。

    ★TPM(Trusted Platform Module)とは
    TPM は、ハードウェアベースのセキュリティ機能を提供する暗号プロセッサで、以下のような役割がある。鍵やプラットフォーム測定値を安全に保管するハード/仮想モジュール。Windows の一部要件(Windows 11 等)や BitLocker の自動鍵保護で必要になることがある。
    ・OS の外部で暗号鍵を生成・保存
    ・デバイス認証(TPM の固有 RSA キーを利用)
    ・ブートプロセスの整合性チェック(測定値の保存)
    ⇒AWS NitroTPM はこれを 仮想化して EC2 上で利用可能にしたもの

    [参考サイト]

    [NitroTPM が AMI とどう関係するのか]
    AMI を作成するときに TPM サポートを有効にした AMI を作ることで、その AMI から起動した EC2 インスタンスで NitroTPM が利用可能になる。

    これにより以下のメリットがある。

    • Windows 11 の要件(TPM 2.0 必須)を満たせる
    • BitLocker など TPM 依存の暗号化が利用可能
    • セキュアブート(UEFI Secure Boot)と組み合わせて整合性を強化

    [Secure Boot と TPM(vTPM)の違い]

    混同されやすいが別の仕組み。AWS上では「UEFI(BootMode=uefi)+Secure Boot」を有効にできるケースと、さらにvTPM(AWS が提供する仮想 TPM)が必要/推奨される AMI がある、という状況。

    Secure Boot = UEFI ファームウェアがブートローダ/カーネルの署名を検証して未署名コードを止める機能。UEFI サポート(BootMode=uefi)の AMI とインスタンス環境があれば有効化の余地がある。

    TPM 対応のインスタンスは?

    [調査方法(コンソール/CLI 両方)]

    • コンソール(簡単)
      1. EC2 → AMIs → Public images で検索(例: “Windows_Server-2025” や “TPM-Windows_Server-2022″)。
      2. 該当 AMI を選択 → 下部 Details に Boot mode が表示されるか確認。
    • CLI(推奨:確実に情報が取れる)
      1) SSM パラメータから Windows AMI 一覧(ap-northeast-1)
      aws ssm get-parameters-by-path –path “/aws/service/ami-windows-latest” –region ap-northeast-1 –query “Parameters[?contains(Name,’Windows’)].{Name:Name,Value:Value}” –output table

    [CLI のツール準備]
    AWS 上で専用コンソール(Web CLI)を開いて、以下それぞれ実行。

    [①東京リージョンにあるSSMパラメータ上で取り扱っているWindowsサーバーを確認]

    aws ssm get-parameters-by-path --path "/aws/service/ami-windows-latest" --region ap-northeast-1 --query "Parameters[?contains(Name, 'Windows')].[Name,Value]" --output table

    [②AMI の BootMode を確認(複数 ID を並べて確認可)]

    aws ec2 describe-images --image-ids ami-067d81a5a99dc16d6 ami-0beeee0e40db77c63 ami-0eb0bf0c90c9f4e00 --region ap-northeast-1 --query 'Images[].[ImageId,Name,BootMode]' --output table
    • 解釈例
      • BootMode = uefi → UE­FI ベース。テスト起動時に Secure Boot が選べる可能性あり。
      • BootMode フィールドが無い or legacy → Secure Boot は期待できない(別 AMI を検討)。

    [③今起動しているテストインスタンスの describe-instances 出力]

    aws ec2 describe-instances --instance-ids i-0888eeb1b33db9fbc --region ap-northeast-1 --query "Reservations[].Instances[].[InstanceId,InstanceType,Hypervisor,ImageId,PlatformDetails,State.Name]" --output table

    [その他確認コマンド]

    ●指定した複数 AMI のうち BootMode が uefi のものだけ表示

    aws ec2 describe-images --image-ids --region ap-northeast-1 --query "Images[?BootMode=='uefi'].[ImageId,Name,BootMode]" --output table

    ●UEFI をサポートしているインスタンスタイプを確認

    aws ec2 describe-instance-types \
    --filters Name=supported-boot-mode,Values=uefi \
    --query "InstanceTypes[*].[InstanceType]" --output text | sort

    ●公開イメージ(例:Amazon 所有の Windows Server 2022 系)を名前で絞って uefi のみ確認する例

    aws ec2 describe-images --owners amazon --filters "Name=name,Values=Windows_Server-2022" --region ap-northeast-1 --query "Images[?BootMode=='uefi'].[ImageId,Name,BootMode]" --output table

    ●指定した AMI 群の中で BootMode が uefi かつ Name に “Windows_Server” を含むものだけ表示

    aws ec2 describe-images --image-ids ami-067d81a5a99dc16d6 ami-0beeee0e40db77c63 ami-0eb0bf0c90c9f4e00 --region ap-northeast-1 --query "Images[?BootMode=='uefi' && contains(Name, Windows_Server)].[ImageId,Name,BootMode]" --output tablex