EC2のmeta-dataとuser-dataの使い方

AWS,EC2

概要

  • EC2のインスタンスメタデータ(meta-data)およびユーザーデータ(user-data)は、インスタンス内からのみアクセス可能なインスタンスに関するデータです。
  • インスタンスにアクセスできるユーザーなら誰でもそのメタデータおよびユーザーデータを参照できます。そのため、ユーザーデータに機密な情報を格納してはいけません。(例: user-dataにパスワードやSSHキー等を記載する)
 

基本的な使用方法

  • インスタンスメタデータは実行中のインスタンスから下記IPアドレスにアクセスして取得します。すべてのメタデータがテキストとして返されます。
    • http://169.254.169.254/latest/meta-data/
    • このIPアドレス(169.254.169.254)は、リンクローカルアドレスです。リンクローカルアドレスはアドレスブロック 169.254.0.0/16で定義され、このアドレスはネットワークセグメントを超えてユニークであることが保証されていないため、ルーターはリンクローカルアドレスを使用したパケットを転送しません。

Linux からのメタデータアクセス例

  • curlコマンドを使ってアクセスします。下記アクセス例です。

$ curl http://169.254.169.254/latest/meta-data/instance-id
i-0123456789abcd5c1
 

Windows からのメタデータアクセス例

  • Windowsの場合もLinuxと同様に、PowerShellからcurlコマンドを使ってアクセスします。下記アクセス例です。

PS C:\Users\niikawa> curl 'http://169.254.169.254/latest/meta-data/instance-id'
StatusCode        : 200
StatusDescription : OK
Content           : i-0123456789abcdcdf
RawContent        : HTTP/1.1 200 OK
                    Connection: close
                    Accept-Ranges: none
                    Content-Length: 19
                    Content-Type: text/plain
                    Date: Sun, 22 Sep 2019 12:30:12 GMT
                    Last-Modified: Sun, 22 Sep 2019 11:56:41 GMT
                    Server: EC2ws...
Forms             : {}
Headers           : {[Connection, close], [Accept-Ranges, none], [Content-Length, 19], [Content-Type, text/plain]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : System.__ComObject
RawContentLength  : 19
PS C:\Users\niikawa>
 
  • 上記出力結果より、WindowsのPowerShellではContent以外の不必要な情報が含まれます。下記の方法より、Linuxのcurlコマンドと同じ結果を得ることが可能です。

$instanceid=(curl 'http://169.254.169.254/latest/meta-data/instance-id')
echo $instanceid.content
   

インスタンスメタデータの一覧

メタデータ 説明
ami-id インスタンスの起動に使用される AMI ID。
hostname インスタンスのプライベート IPv4 DNS ホスト名。
iam/info インスタンスに関連付けられた IAM ロールがある場合、インスタンスの LastUpdated の日付、InstanceProfileArn、InstanceProfileId など、インスタンスプロファイルが更新された最終時刻に関する情報が格納されます。
instance-id インスタンスの ID。
instance-type インスタンスの種類。
local-hostname インスタンスのプライベート IPv4 DNS ホスト名。
local-ipv4 インスタンスのプライベート IPv4 アドレス。
mac インスタンスのMACアドレス。
placement/availability-zone インスタンスが起動した利用可能ゾーン。
public-hostname インスタンスのパブリック DNS。このカテゴリは、enableDnsHostnames 属性が true に設定されている場合にのみ返されます。
public-ipv4 パブリック IPv4 アドレス。インスタンスに Elastic IP アドレスが関連付けられている場合、返される値は Elastic IP アドレスです。
security-groups インスタンスのセキュリティグループ名。
(出典:Amazon Elastic Compute Cloud Linux インスタンス用ユーザーガイド)    

インスタンスのユーザーデータ

  • 下記の様にユーザーデータにアクセスします。curlコマンドを実行した結果、ユーザーデータに設定しているsudo groupadd、sudo useraddの2行が出力されました。

$ curl http://169.254.169.254/latest/user-data
sudo groupadd -g 600 test-group
sudo useradd -u 600 -g test-group -d /home/test-user -s /bin/bash test-user
   

インスタンスデータの使用事例

  • 今回ご紹介したメタデータを活用して、EC2のName Tag をOSのスクリプトから設定することが可能です。詳細は、以下記事を参照ください。

AWS,EC2

Posted by takaaki