Amazon EC2 インスタンスメタデータサービス(IMDS) v2のみにしました
2021/08/18
今さらながらですが、EC2 インスタンスメタデータサービス(IMDS) v2を確認しました。
目次
実行確認
デフォルトで使えるのでひとまず実行確認してみました。
ユーザーガイドインスタンスメタデータサービスの設定記載のとおりに実行しました。
1 2 |
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` |
トークンをPUTリクエストを発行して、
1 2 |
curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ |
実行する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
* Trying 169.254.169.254... * TCP_NODELAY set * Connected to 169.254.169.254 (169.254.169.254) port 80 (#0) > GET /latest/meta-data/ HTTP/1.1 > Host: 169.254.169.254 > User-Agent: curl/7.61.1 > Accept: */* > X-aws-ec2-metadata-token: AQAEAKJ0MwhMLzNX6aiKDxlRMK12W0bjfRzLeY6s-GBYG59hLc0rCQ== > < HTTP/1.1 200 OK < X-Aws-Ec2-Metadata-Token-Ttl-Seconds: 21591 < Content-Type: text/plain < Accept-Ranges: none < Last-Modified: Wed, 04 Aug 2021 09:51:13 GMT < Content-Length: 318 < Date: Wed, 04 Aug 2021 10:43:39 GMT < Server: EC2ws < Connection: close < ami-id ami-launch-index ami-manifest-path block-device-mapping/ events/ hostname iam/ identity-credentials/ instance-action instance-id instance-life-cycle instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups * Closing connection 0 |
トークンは期限切れになったら再利用できないし、EC2インスタンスごとに個別発行ですと。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/public-ipv4 * Trying 169.254.169.254... * TCP_NODELAY set * Connected to 169.254.169.254 (169.254.169.254) port 80 (#0) > GET /latest/meta-data/public-ipv4 HTTP/1.1 > Host: 169.254.169.254 > User-Agent: curl/7.61.1 > Accept: */* > X-aws-ec2-metadata-token: AQAEAKJ0MwhMLzNX6aiKDxlRMK12W0bjfRzLeY6s-GBYG59hLc0rCQ== > < HTTP/1.1 200 OK < X-Aws-Ec2-Metadata-Token-Ttl-Seconds: 21434 < Content-Type: text/plain < Accept-Ranges: none < Last-Modified: Wed, 04 Aug 2021 09:51:13 GMT < Content-Length: 13 < Date: Wed, 04 Aug 2021 10:46:16 GMT < Server: EC2ws < Connection: close < * Closing connection 0 13.208.223.98 |
パブリックIPアドレスももちろん取得できました。
IMDSv2のメリット
Add defense in depth against open firewalls, reverse proxies, and SSRF vulnerabilities with enhancements to the EC2 Instance Metadata Serviceを日本語翻訳すると、こんなことが書いてありました。
- オープンなサードパーティWAFからの保護
設定次第では、脆弱性のあるサードパーティWAFでは、IMDSv1のようなGETリクエストが実行されてしまう可能性があるそうです。
なので、サードパーティWAFのほとんどがサポートしないPUTリクエストでトークンを取得することで保護できると。 -
オープンリバースプロキシからの保護
Apache httpdやSquidなどのオープンリバースプロキシも誤った設定によってIMDSv1のようなGETリクエストが実行される可能性があるとのことです。
オープンリバースプロキシが通常送信するX-Forwarded-ForHTTPヘッダーを含んでいた場合、IMDSv2はトークン発行しないとのことです。 -
SSRF脆弱性からの保護
PUTリクエストでトークンを発行して、そのトークンを使ってリクエストを実行するという方法が、SSRF脆弱性の大部分から保護することができるとのことです。 -
オープンレイヤー3ファイアウォールおよびNATからの保護
EC2インスタンスがオープンルーター、レイヤー3ファイアウォール、VPN、トンネル、またはNATデバイスとして誤って構成されている場合に、インスタンス外にパケットが転送される場合があります。
IMDSv2の応答はTTL0なので、インスタンスを離れる前に応答が破棄されるとのことです。
IMDSv1の実行状況確認
CLIやSDKはIAMロールの認証情報はv2で取得がデフォルトになっているとのことです。
該当のEC2インスタンスでは、Systems Managerエージェント、CloudWatch LogsやS3へのアップロードとかが実行されているので、IMDSv1を無効化して問題が発生しては困ります。
IMDSv2のリリースに伴って、IMDSv1の使用状況がメトリクスに追加されていました。
さすが、気が効いてますね。
過去1週間で7/31に9回実行されてますが、それ以外はないです。
きっと問題ないです。
IMDSv1の無効化設定
既存の起動中インスタンスは、コンソールには変更メニューがなく、CLIからのみ実行可能なようです。
1 2 3 4 5 |
aws ec2 modify-instance-metadata-options \ --instance-id i-1234567898abcdef0 \ --http-tokens required \ --http-endpoint enabled |
設定後、curlコマンドで確認したらエラーも何もなく、何もレスポンスがありませんでした。
1 2 |
curl http://169.254.169.254/latest/meta-data |
起動テンプレートも変更して、WordPress、プラグインのアップデートしてBlue/Greenデプロイの要領でデプロイ完了しました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第2版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
Amazon Connectから問い合わせ追跡レコード(CTR)をエクスポート
Amazon Connectから発信した電話に出たのか、出なかったのかを確認した …
-
iPad ProのWorking CopyでAWS CodeCommitのリポジトリを使う
iPad Proを導入しましたので、原稿執筆や校正でフル活用しようと思いまして。 …
-
Rocket.ChatのOutGoingWebhookからのAPI GatewayからのDynamoDB
少し前に、Rocket.ChatからOut Going Webhookを設定して …
-
Amazon Linux2のジャンボフレーム
ユーザーガイドのEC2 インスタンスのネットワークの最大送信単位 (MTU)を試 …
-
リザーブドインスタンスはじめました
このブログも2014年9月にはじめたので、もうすぐ3年。 1件~17件とばらつき …
-
ヤマムギvol.27 Amazon Route 53プライベートホストゾーンとリゾルバーのデモをしました
今日は『AWS認定資格試験テキスト&問題集AWS認定ソリューションアーキ …
-
AWS Global Acceleratorでアクセラレーターを作成する
バージニア北部、東京、大阪のEC2インスタンスをエンドポイントにして作成してみま …
-
Active Directory認証でAWSマネジメントコンソールにSSO
こちらの2つのサイトを参考にすすめました。 Active Directory資産 …
-
EC2 Windows インスタンス PowerShellでメタデータを見る
Linuxインスタンスならcurlコマンドで確認すればいいのですが、Window …
-
AWS Protonの管理者ガイドとユーザーガイドのチュートリアル
AWS Proton管理者ガイドのAWS Management Console …