起きたこと
Security Hubで指摘される、Instance Metadata Service Version 2 (IMDSv2) の改善要求
を対策したら、goofysでのS3マウントが失敗するようになった
goofysからS3の認証は、インスタンスプロファイルで行っていました
Aug 30 14:38:08 xxxxxxxxx /usr/local/bin/goofys[1784]: s3.ERROR code=NoCredentialProviders msg=no valid providers in chain. Deprecated.#012#011For verbose messaging see aws.Config.CredentialsChainVerboseErrors, err=<nil>
Aug 30 14:38:08 xxxxxxxxx /usr/local/bin/goofys[1784]: fuse.ERROR *fuseops.ReadDirOp error: NoCredentialProviders: no valid providers in chain. Deprecated.
Aug 30 14:38:08 xxxxxxxxx /usr/local/bin/goofys[1784]: fuse.ERROR #011For verbose messaging see aws.Config.CredentialsChainVerboseErrors
同じ様にS3マウントしている他のサーバでは起きないので、色々と違いを調べたところ
問題が発生するサーバの方だけ、Security Hub指摘に対応していた所が差異でした
Credentialsが通らなくなっているのでかなり怪しいと言うことで
IMDSv1を利用できるように戻したところ、問題なくCredentialsも通りマウントできるようになりました
どうやら、goofysがまだIMDSv2に対応していない様です
EC2 インスタンスでは、Instance Metadata Service Version 2 (IMDSv2) を使用する必要があります
[EC2.8] This control checks whether your Amazon Elastic Compute Cloud (Amazon EC2) instance metadata version is configured with Instance Metadata Service Version 2 (IMDSv2). The control passes if HttpTokens is set to required for IMDSv2. The control fails if HttpTokens is set to optional. 修復手順
IMDSv1のSSRF脆弱については、徳丸浩先生の記事が一番わかりやすかったので、ご紹介しておきます。
SSRF対策としてAmazonから発表されたIMDSv2の効果と限界
IMDSv2の使用に移行する
aws ec2 modify-instance-metadata-options \
--instance-id i-1234567898abcdef0 \
--http-tokens required \
--http-endpoint enabled
IMDSv1を利用可能にする
aws ec2 modify-instance-metadata-options \
--instance-id i-1234567898abcdef0 \
--http-tokens optional \
--http-endpoint enabled