Amazon GuardDutyで1つのサンプルイベントのみ発生させる方法

2023.04.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon GuardDuty において通知テストや動作確認のためにサンプルイベントを発生させることがあります。AWS CLI を使うことで 1 つのサンプルイベントのみを発生させることができることを最近知ったため紹介します。

私はこれまで、マネジメントコンソールからたくさんのサンプルイベントを発生させていました。154 個ものイベントが発生するため、ノイズが多く、アーカイブも面倒でした。

これからはこうできるのでうれしいです。

重要度「高」のサンプルイベントのコマンド例です。

aws guardduty create-sample-findings \
  --detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
  --finding-types "Backdoor:EC2/DenialOfService.Dns"

重要度「中」のサンプルイベントのコマンド例です。

aws guardduty create-sample-findings \
  --detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
  --finding-types "Backdoor:EC2/Spambot"

重要度「低」のサンプルイベントのコマンド例です。

aws guardduty create-sample-findings \
  --detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
  --finding-types "Discovery:IAMUser/AnomalousBehavior"


試してみた

サンプルイベントを発生させるコマンドはcreate-sample-findingsです。


finding-typesオプションで発生させるサンプルイベントを指定します。

aws guardduty create-sample-findings \
  --detector-id bcc123adabffabc568a3aaa1bexample \
  --finding-types "Backdoor:EC2/DenialOfService.Dns"


コマンド実行にはディテクター ID が必須です。

マネジメントコンソールから確認できますが、いちいち確認するのは面倒なので AWS CLI で取得するようにします。

aws guardduty create-sample-findings \
  --detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
  --finding-types "Backdoor:EC2/DenialOfService.Dns"

DetectorIdsは list 形式のため最初の要素だけ取得するようにしています。1 つのリージョンでは 1 つのディテクターしか作れない認識ですが、念のため複数の値があっても問題ないようにしてみました。


検出結果タイプ名は次のドキュメントで確認できます。重要度の記載もあります。


注意点として、Backdoor:EC2/C&CActivity.Bなどのアンパサンドが含まれる検出結果タイプは明示的に文字列であることを指定するかエスケープする必要があります。

例えば、AWS CloudShell で実行する場合は下記コマンドのようにします。

aws guardduty create-sample-findings \
  --detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
  --finding-types "Backdoor:EC2/C&CActivity.B"
aws guardduty create-sample-findings \
  --detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
  --finding-types Backdoor:EC2/C\&CActivity.B


ディテクター ID はリージョン毎に異なります。

もしすべてのリージョンで 1 つのサンプルイベントを発生させたい場合は下記コマンドで対応できます。

aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
  echo "### Create sample findings in ${region}"
  detector=$(aws guardduty list-detectors --region ${region} --query "DetectorIds[0]" --output text)
  aws guardduty create-sample-findings \
    --region ${region} \
    --detector-id ${detector} \
    --finding-types "Backdoor:EC2/DenialOfService.Dns"
done

実行結果は次の通りです。

$ aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
> | while read region; do
>   echo "### Create sample findings in ${region}"
>   detector=$(aws guardduty list-detectors --region ${region} --query "DetectorIds[0]" --output text)
>   aws guardduty create-sample-findings \
>     --region ${region} \
>     --detector-id ${detector} \
>     --finding-types "Backdoor:EC2/DenialOfService.Dns"
> done
### Create sample findings in ap-south-1
### Create sample findings in eu-north-1
### Create sample findings in eu-west-3
### Create sample findings in eu-west-2
### Create sample findings in eu-west-1
### Create sample findings in ap-northeast-3
### Create sample findings in ap-northeast-2
### Create sample findings in ap-northeast-1
### Create sample findings in ca-central-1
### Create sample findings in sa-east-1
### Create sample findings in ap-southeast-1
### Create sample findings in ap-southeast-2
### Create sample findings in eu-central-1
### Create sample findings in us-east-1
### Create sample findings in us-east-2
### Create sample findings in us-west-1
### Create sample findings in us-west-2


さいごに

Amazon GuardDuty において AWS CLI を利用して特定のサンプルイベントのみを発生させる方法を紹介しました。

すごくよいです。

このブログがどなたかのご参考になれば幸いです。