インスタンスメタデータとユーザーデータ

インスタンスメタデータは、インスタンスに関するデータで、実行中のインスタンスを設定または管理するために使用する。インスタンスメタデータは、ホスト名、イベント、およびセキュリティグループなどでカテゴリ分けされます。

インスタンスメタデータを使用して、インスタンスの起動時に指定したユーザーデータにアクセスすることもできる。

  • ユースケース
    • インスタンスを設定するためにパラメータを指定したり、単純なスクリプトを含めたりする
    • 汎用 AMI をビルドし、ユーザーデータを使って起動時に提供された構成ファイルを変更する
    • さまざまな小規模ビジネスを対象としたウェブサーバーを実行する場合に、すべてのサーバーで同じ汎用 AMI を使用し、起動時にユーザーデータで指定したAmazon S3バケットからコンテンツを取得
    • 随時新規顧客を追加するには、顧客のバケットを作成し、そのコンテンツを追加し、ユーザーデータのコードに提供された固有のバケット名を使って AMI を起動
    • 複数のインスタンスを同時に起動する場合、ユーザーデータはその予約においてすべてのインスタンスで使用
    • 同じリザベーションの一部である各インスタンスには固有のami-launch-index番号があるため、実行する操作を制御するコードを書く
      • 例えば、最初のホストはクラスター内の最初のノードとしてそれ自体を選択する場合がある。

EC2 インスタンスには、インスタンスの起動時に生成されるインスタンスアイデンティティドキュメントなどの動的データも含まれる。

インスタンスメタデータおよびユーザーデータにはそのインスタンス自体内からのみアクセスできるものの、データは認証または暗号化手法によって保護されていない。 インスタンス、そしてインスタンス上で実行される任意のソフトウェアに対して直接アクセス権がある可能性がある人は、メタデータを表示できる。 そのため、パスワードまたは存続期間の長い暗号化キーなどの機密データは、ユーザーデータとして保管しないようにする。

IMDSv2 の使用

次のいずれかのメソッドを使って、実行中のインスタンスからインスタンスメタデータにアクセスできる。

  • インスタンスメタデータサービスバージョン 1 (IMDSv1) – リクエスト/レスポンスメソッド
  • インスタンスメタデータサービスバージョン 2 (IMDSv2) – セッション志向メソッド

デフォルトでは、IMDSv1またはIMDSv2のいずれか、あるいは両方を使用できる。 インスタンスメタデータサービスは(所定のリクエストについて)、IMDSv2 に固有の PUT または GET ヘッダーがリクエストに存在するかどうかを基準にして、IMDSv1 と IMDSv2 へのリクエストを識別している。

see also: EC2 Instance Metadata Service の拡張により、オープンファイアウォール、リバースプロキシ、および SSRF の脆弱性に対して多層防御を追加

各インスタンスのインスタンスメタデータサービスを、ローカルコードまたはユーザーが IMDSv2を使用しなければいけないように構成可能。 IMDSv2を使用しなければならないように指定すると、IMDSv1は機能しなくなる。

起動時に Linux インスタンスでコマンドを実行する

Amazon EC2 でインスタンスを起動するとき、起動後にそのインスタンスにユーザーデータを渡し、一般的な自動設定タスク実行や、スクリプト実行をする。

2 つのタイプのユーザーデータを Amazon EC2 に渡すことが可能。

  • シェルスクリプト
  • cloud-init ディレクティブ

プレーンテキスト、ファイル (コマンドラインツールを使用してインスタンスを起動する場合)、または base64 でエンコードされたテキスト (API コールの場合) として、launch wizardに渡すことも可能。

デフォルトでは、ユーザーデータスクリプトと cloud-init ディレクティブは、インスタンスの最初の起動サイクル中にのみ実行される。 インスタンスを再起動するたびにユーザーデータスクリプトと cloud-init ディレクティブが実行されるように設定可能。