結論
DisableIMDSv1とは?の問いに対しての結論として
「IMDSv1を無効にするかどうか」
という設定ですが自分もIMDS自体意識したことがなかったので調べてみました。
IMDS(インスタンスメタデータサービス)
インスタンスメタデータサービスとはEC2の情報をとってこれるコマンドです。
ec2を立ち上げてSSHやInstance Connectでログインします。
IMDSv1は2024年7月現在無効化されているのでIMDSv2でテストしてみます。
ログインしたEC2で以下のコマンドを実行します。
IMDSv2
$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
managed-ssh-keys/
metrics/
network/
placement/
profile
public-hostname
public-ipv4
reservation-id
security-groups
services/
EC2の様々な情報が取れていることが確認できました。
さらにプライベートIPv4アドレスを取得してみましょう。
$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/local-ipv4
172.31.x.xx
取得できました。
ちなみにコンソールから設定すればver1でも検証は可能です。
特別な理由がない限りver2を使いましょう。
ver1はSSRF攻撃などのリスクがあるとのことです。
ver1ではcurlコマンドのオプションなしでも取得できます。
ver1
$ curl http://169.254.169.254/latest/meta-data
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
managed-ssh-keys/
metrics/
network/
placement/
profile
public-hostname
public-ipv4
reservation-id
security-groups
services/
このような形でEC2インスタンスの様々なデータを取得できるのがIMDS(インスタンスメタデータサービス)なんですね。
何か動的にインスタンスを操作したい場合などには使えるかもしれません。
169.254.169.254とは
169.254.169.254をはじめとする169.254.0.0/16ネットワーク内のアドレスがこのIMDS用にAWSが確保しているアドレスとのことでした。
DisableIMDSv1の使い方
DisableIMDSv1というプロパティはBeanstalkのebextensionsで設定できる項目になります。
具体的には以下のようにautoscalingに設定し、管理下のEC2のIMDSをv2にするというものになります。
#拡張子は見やすくするためにyamlで指定していますが実際はconfigです。
option_settings:
aws:autoscaling:launchconfiguration:
DisableIMDSv1: true
LaunchTemplateへの切り替え
IMDSv1を調べるきっかけになったのがLaunchTemplateへの移行でした。
LaunchTemplateをBeanstalkで使用する際にDisableIMDSv1の設定は2024年7月現在では必須でした。
参考
とてもわかりやすかったです
ありがとうございました!