Code Day's Night

ichikawayのブログ

EC2インスタンスのアクセス可能なメタデータを無効にしたらsshログインできない

今回遭遇した条件

  • 公式AMIから新規でEC2インスタンス構築
  • アクセス可能なメタデータを無効

これで構築したインスタンスにsshアクセスすると、登録した公開鍵がrootやec2-userに適用されずにsshログイン出来ずパーミッションエラーとなる。

f:id:ichikaway:20211019151248p:plain

回避策

新規EC2インスタンス構築時は、アクセス可能なメタデータを有効にする。あとから次のどちらかを実行する

  1. awsコマンドからメタデータの設定を無効にする
  2. 構築したインスタンスのAMIを取得して別のEC2インスタンスを構築

1の場合は次のコマンドを実行する

aws ec2 modify-instance-metadata-options --instance-id i-xxxxxxx --http-endpoint disabled

参考資料
インスタンスメタデータオプションの設定 - Amazon Elastic Compute Cloud

 

2は、最初に構築したメタデータ有効のインスタンスからAMIを取得し、そこから新しいEC2インスタンスを構築。構築時はアクセス可能なメタデータを無効にする。メタデータを無効にして構築しても、元のAMIにはすでに公開鍵が登録されているためsshログインできる。

 

確認方法

実際にメタデータが取得できるか確認する。何もデータが返らなければOK

    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" -v http://169.254.169.254/latest/meta-data/

参考
インスタンスメタデータの取得 - Amazon Elastic Compute Cloud

 

背景

自分たちの利用範囲ではメタデータにアクセスする必要はなく、もしSSRF攻撃があった場合にもしかしたらメタデータにアクセスされるかもしれない。であれば、最初からメタデータを無効にしておきたい。

今まではiptablesで 169.254.169.254 にアクセスできない設定をしていたが、今後はiptablesを使いたくない。