クラウドコンピュート

インスタンスメタデータ・cloud-init いんすたんすめたでーた・くらうどいにっと

インスタンスメタデータcloud-initユーザーデータ初期化IMDS自動設定
インスタンスメタデータ・cloud-initについて教えて

簡単に言うとこんな感じ!

インスタンスメタデータはVMが自分自身の情報(IPアドレスリージョン等)を知るための仕組み、cloud-initはVMが起動したとき自動でソフトウェアをインストール・設定するための初期化システムだよ。インフラの自動化の基礎だね。


インスタンスメタデータ・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など主要ディストリビューションに標準搭載されています。TerraformAnsibleなどのIaC(Infrastructure as Code)ツールとの組み合わせで、ゼロタッチのサーバー自動化が実現しています。


IMDSとcloud-initの連携

インスタンス起動からcloud-init完了まで インスタンス 起動開始 IMDSから ユーザーデータ取得 cloud-init スクリプト実行 設定完了・サービス起動 自動化されたサーバー完成 cloud-initで自動化できる主な処理 パッケージインストール / SSH鍵の配置 / ホスト名設定 / ユーザー作成 / スクリプト実行 環境変数の設定 / マウントポイントの構成 / アプリケーションの初期起動

関連する規格・RFC

規格内容
AWS IMDSv2セッション指向のメタデータアクセス仕様
cloud-init仕様cloud-initの設定ファイルフォーマット
SSRF(Server-Side Request Forgery)IMDSv1の主なセキュリティ脅威

関連用語