Amazon EC2 起動テンプレートでインスタンスメタデータサービスバージョン2 (IMDSv2) を強制する設定手順

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。

この記事では、Amazon EC2 起動テンプレートでインスタンスメタデータサービスバージョン2 (IMDSv2) の使用を強制する方法について、リスクと対策を解説します。

ポリシーの説明

EC2インスタンスメタデータサービス(IMDS)は、実行中のインスタンスから自身に関する情報(インスタンスID、IPアドレス、IAMロール認証情報など)を取得するために使用されるサービスです。

IMDSv2の主な改善点:

  • セッショントークン認証: PUTリクエストでトークンを取得し、その後のメタデータアクセスにはこのトークンが必須
  • ネットワークホップ制限: デフォルトで1ホップに制限され、コンテナ環境での不正アクセスを防止
  • PUTメソッドの使用: トークン取得にPUTメソッドを使用することで、多くのWebフレームワークでデフォルトで許可されないため、SSRF攻撃を困難に

EC2起動テンプレートでIMDSv2の使用を強制することで、起動される全てのインスタンスが自動的により安全な設定で作成されます。

リスク

IMDSv1(従来のメタデータサービス)を使用している場合、以下のセキュリティリスクがあります:

  • SSRF攻撃への脆弱性: Server-Side Request Forgery(SSRF)攻撃により、攻撃者がインスタンスメタデータサービスにアクセスし、IAMロールの一時的な認証情報を窃取する可能性があります。特にhttp://169.254.169.254/latest/meta-data/iam/security-credentials/エンドポイントが標的になります

修復方法

コンソールでの修復手順

AWSのコンソールを使用して、EC2起動テンプレートでIMDSv2の使用を強制します。

  1. AWSマネジメントコンソールにログインし、EC2サービスに移動します
  2. 左側のナビゲーションペインから「起動テンプレート」を選択します
  3. 新しい起動テンプレートを作成する場合:
    • 「起動テンプレートを作成」をクリックします
    • 基本的な設定(名前、説明、AMI、インスタンスタイプなど)を入力します
  1. 既存の起動テンプレートを更新する場合:
    • 対象の起動テンプレートを選択します
    • 「アクション」から「テンプレートバージョンを作成」を選択します
  2. 「高度な詳細」セクションを展開します
  3. *「メタデータオプション」**で以下を設定します:
    • 「メタデータアクセス可能」: 有効「メタデータバージョン」: V2のみ(必須) – これが最も重要な設定です
    • 「メタデータトークンレスポンスホップ制限」: 1(推奨)または必要に応じて調整
      • EC2インスタンス上で直接アプリケーションを実行する場合: 1
      • コンテナを使用する場合: 2以上に設定が必要な場合あり
    • 「メタデータタグ」: 必要に応じて有効化
  1. その他の必要な設定を完了し、「起動テンプレートを作成」または「テンプレートバージョンを作成」をクリックします
  2. デフォルトバージョンの設定
    • 新しいバージョンを作成した場合は、それをデフォルトバージョンに設定することを推奨します

Terraformでの修復手順

EC2起動テンプレートでIMDSv2の使用を強制するTerraformコードと、主要な修正ポイントを説明します。

http_tokens の設定箇所を required とすることでIMDSv2が強制化されます。

# IMDSv2を強制する起動テンプレートの作成
resource "aws_launch_template" "secure_template" {
  >>>> Skip
  # メタデータオプション - IMDSv2の強制設定(重要)
  metadata_options {
    http_endpoint               = "enabled"     # メタデータサービスを有効化
    http_tokens                 = "required"    # IMDSv2を強制(トークンを必須に)
    http_put_response_hop_limit = 1            # ホップ制限(デフォルト: 1)
    http_protocol_ipv6          = "disabled"   # IPv6サポート(オプション)
    instance_metadata_tags      = "enabled"    # インスタンスタグへのアクセス(オプション)
  }
}

最後に

この記事では、Amazon EC2 起動テンプレートでインスタンスメタデータサービスバージョン2 (IMDSv2) の使用を強制する方法について、リスクと対策を解説しました。

IMDSv2の強制により、SSRF攻撃やその他のメタデータサービスを標的とした攻撃から効果的に保護できます。起動テンプレートレベルでこの設定を行うことで、新しく作成される全てのインスタンスが自動的に最も安全な設定で起動されることを保証できます。既存の環境では段階的な移行計画を立て、アプリケーションの互換性を確認しながら進めることが重要です。

この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。

参考情報

この記事をシェアする

クラウドセキュリティ対策実践集一覧へ戻る

貴社の利用状況に合わせた見積もりを作成します。

料金プランを詳しく見る