インスタンスメタデータ・cloud-init いんすたんすめたでーた・くらうどいにっと
インスタンスメタデータ・cloud-initとは
インスタンスメタデータ(Instance Metadata)とは、仮想マシンが自分自身に関する情報(IPアドレス・インスタンスID・リージョン・IAMロール・起動スクリプトなど)を取得できる仕組みです。AWSではhttp://169.254.169.254/という特殊なローカルIPアドレスにアクセスすることで取得でき、IMDSv2(Instance Metadata Service version 2)というセキュアな方式が推奨されています。
cloud-initは、クラウドインスタンスの初回起動時に自動的に実行される初期化システムです。起動時にユーザーデータ(User Data)として渡したシェルスクリプトやYAML設定を実行し、パッケージのインストール・設定ファイルの配置・ユーザー作成などを自動化します。
この2つを組み合わせることで、「同じAMI(マシンイメージ)から起動しても、環境変数や役割に応じて異なる設定を自動適用する」ことが可能になります。
インスタンスメタデータの取得例
| エンドポイント(IMDS) | 取得できる情報 |
|---|---|
| /latest/meta-data/instance-id | インスタンスID |
| /latest/meta-data/local-ipv4 | プライベートIPアドレス |
| /latest/meta-data/public-ipv4 | パブリックIPアドレス |
| /latest/meta-data/placement/region | リージョン名 |
| /latest/meta-data/iam/security-credentials/ | IAMロールの一時認証情報 |
| /latest/user-data | 起動時に渡したユーザーデータ |
cloud-initユーザーデータの例(YAML形式)
#cloud-config
packages:
- nginx
- git
runcmd:
- systemctl enable nginx
- systemctl start nginx
歴史と背景
インスタンスメタデータサービスはAWSが2006年のEC2リリース当初から提供しており、クラウドインフラ自動化の基盤技術です。当初のIMDSv1はセキュリティ上の懸念(SSRF攻撃で認証情報が盗まれるリスク)があり、2019年にAWSがセッション指向のIMDSv2を導入しました。
cloud-initはCanonical(Ubuntu開発元)が2010年に開発し、現在はUbuntu・CentOS・RHEL・Amazon Linux・Fedoraなど主要ディストリビューションに標準搭載されています。TerraformやAnsibleなどのIaC(Infrastructure as Code)ツールとの組み合わせで、ゼロタッチのサーバー自動化が実現しています。
IMDSとcloud-initの連携
関連する規格・RFC
| 規格 | 内容 |
|---|---|
| AWS IMDSv2 | セッション指向のメタデータアクセス仕様 |
| cloud-init仕様 | cloud-initの設定ファイルフォーマット |
| SSRF(Server-Side Request Forgery) | IMDSv1の主なセキュリティ脅威 |
関連用語
- 仮想マシン — メタデータとcloud-initの適用対象
- オートスケーリング — cloud-initによる自動設定と組み合わせる
- インスタンスタイプの選び方 — 起動するインスタンスの選定
- 責任共有モデル — IMDSのセキュリティ設定は利用者の責任