はじめに
SecurityHubに順守する環境構築を行なっている中で、設定項目EC2.8について設定方法や不明点があったので、その際に学習した内容をまとめます。
SecurityHubって何?という方は前回まとめたので、下記ページをご確認ください。
AWS Security Hubに関して
EC2.8の内容
EC2 インスタンスでは、Instance Metadata Service Version 2 (IMDSv2) を使用する必要があります。
このコントロールは、EC2 インスタンスメタデータバージョンがインスタンスメタデータサービスバージョン 2 (IMDSv2) で設定されているかどうかをチェックします。コントロールは次の場合に渡されます。HttpTokensIMDSv2 で必須に設定されています。コントロールは、次の場合に失敗しますHttpTokensは、 に設定されます。optional。
インスタンスメタデータを使用して、実行中のインスタンスを設定または管理します。IMDS は、一時的で頻繁にローテーションされる資格情報へのアクセスを提供します。これらの認証情報を使用すると、機密認証情報を手動でまたはプログラムでインスタンスにハードコーディングしたり、配布したりする必要がなくなります。IMDS は、すべての EC2 インスタンスにローカルにアタッチされます。これは、169.254.169.254.169.254 の「リンクローカル」IP アドレスで実行されます。この IP アドレスは、インスタンスで実行されるソフトウェアによってのみアクセスできます。
引用:EC2.8
要するに、
- インスタンスのメタデータを取得する際に、トークンの要求を必須にする設定する必要があるよ!
- IMDSv1だとトークンなしで、169.254.169.254にアクセスするだけでメタデータを取得できちゃうよ!→セキュリティリスクがある。
ってことだと解釈しました!
設定手順
今回は下記3パターンの設定方法を記載します!
1. 新規インスタンス作成時に設定-マネージドコンソール
2. 新規インスタンス作成時に設定-AWSCLI
3. 既存インスタンスの設定変更-AWSCLI
1. 新規インスタンス作成時に設定-マネージドコンソール
新規インスタンス作成時のステップ3:インスタンスの詳細の設定
にて、
▼高度な詳細のメタデータバージョンで、V2を選択する。
2. 新規インスタンス作成時に設定-AWSCLI
下記コマンドで、--metadata-options
をオプションを記述する。
# `--metadata-options` を記述
$ aws ec2 run-instances `
--image-id <イメージID> `
--metadata-options HttpTokens=required,HttpEndpoint=enabled
新規インスタンスをAWS CLIで作成する際の手順は下記からご確認ください。
AWSCLIでEC2 insutance の起動・停止・削除
3. 既存インスタンスの設定変更-AWSCLI
既存インスタンスを変更する場合は、僕が調べた限りAWSCLIのみ可能みたいです。
# インスタンス一覧の表示(インスタンスIDを確認するため)
$ aws ec2 describe-instances --query "Reservations[].Instances[].InstanceId"
# IMDSv2の有効化
$ aws ec2 modify-instance-metadata-options --instance-id <インスタンスID> --http-tokens required --http-endpoint enabled
# 変更されていることを確認
$ aws ec2 describe-instances --filters "Name=tag:Name,Values=<インスタンス名>" --query "Reservations[].Instances[].MetadataOptions"
実際に、インスタンスメタデータの取得にトークンが必要なことを下記コマンドで確認できます。
EC2インスタンスにSSHか、セッションマネージャーで接続して確認してください。
# インスタンスのメタデータ取得→エラーが出ればOK!
curl http://169.254.169.254/latest/meta-data/
# IMDSv2 インスタンスのメタデータ取得→取得できれば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/