Amazon Linux 2 (AL2) が 2025年6月30日にサポート終了 (EOL) を迎えるため、Amazon Linux 2023 (AL2023) への移行を検討している方も多いのではないでしょうか。
私もAL2023への移行を実施しましたが、その際、AL2で使用していたスクリプトからインスタンスメタデータが取得できなくなる問題に直面しました。
この問題の原因は、AL2023ではデフォルトでインスタンスメタデータサービス (IMDS) のバージョン2 (IMDSv2) のみ有効になったことにあります。
IMDSv1用に記述されたスクリプトではIMDSv2に対応していないため、メタデータの取得ができなくなっていたのです。
本記事では、IMDSv2とは何か、そしてAL2023への移行時に発生するこの問題を解決する方法について解説します。
インスタンスメタデータサービス(IMDS)
IMDSv2とは?
IMDSv2は、Amazon EC2のインスタンスメタデータサービスの新しいバージョンです。
IMDSは、EC2インスタンスからその自身のメタデータ(例えば、インスタンスIDやAMI ID、ユーザーデータなど)を取得するために利用されます。
IMDSv1の利用方法
IMDSv1では、curlなどでリンクローカルアドレス(169.254.169.254)にHTTPリクエストを送るだけでメタデータを取得できます。
$ curl http://169.254.169.254/latest/meta-data/
IMDSv2の利用方法
IMDSv2では、セキュリティ強化のために、トークンを用いたリクエストが必須となっています。これにより従来のIMDSv1に比べて、メタデータ取得に対する攻撃リスクが軽減されます。
メタデータを取得する際には、まずセッショントークンを作成します。次に、取得したトークンを利用してリクエストを送信することで、メタデータを取得することができます。
# トークンを取得
$ TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
# メタデータを取得
$ curl -H "X-aws-ec2-metadata-token: $TOKEN" "http://169.254.169.254/latest/meta-data/"
インスタンスメタデータが取得できなくなる原因と解決方法
AL2023ではデフォルトでIMDSv2のみ有効になっている
EC2インスタンスを作成する際、高度な詳細タブからメタデータのバージョンを選択できるようになっています。
現在、AL2023ではこの設定がデフォルトで「V2のみ(トークンは必須)」に設定されています。
そのためメタデータを取得するには、上記の通りまずセッショントークンを発行し、そのトークンを使ってリクエストを送信しないと、メタデータが取得できず、401(Unauthorized)エラーが返されます。
$ curl http://169.254.169.254/latest/meta-data/
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>401 - Unauthorized</title>
</head>
<body>
<h1>401 - Unauthorized</h1>
</body>
</html>
「Amazon Linux 2023に移行したらインスタンスメタデータが取得できなくなった?」という問題が発生した場合、この設定を見逃している可能性がありますので、確認してみてください。
解決方法
IMDSv2用にスクリプトを修正する
IMDSv2はIMDSv1と比較して、セキュリティが強化されています。
そのため、スクリプト内でIMDSv1を使用している場合は、IMDSv2に対応するように修正することをお勧めします。
EC2インスタンスでIMDSv1も利用できる様に変更する
基本的にIMDSv2を利用することが推奨されていますが、IMDSv1も引き続き使用することが可能です。
インスタンス作成時にメタデータのバージョンを「V1およびV2(トークンはオプション)」に設定すると、IMDSv1が有効化されます。
既に作成したEC2インスタンスのメタデータバージョンを変更したい場合は、「アクション」メニューから「インスタンスの設定」→「インスタンスメタデータオプションの変更」を選択し、「Optional」を選択すると、IMDSv1が有効になります。
まとめ: AL2023に移行するときはIMDSv2への移行も検討しましょう
EC2のユーザーデータなどで頻繁に使用されるインスタンスメタデータですが、AL2023への移行時には、IMDSv2の導入によって予期しないエラーが発生することがあります。
IMDSv1を利用している場合は、IMDSv2への移行も検討しましょう
コメント