[アップデート]Amazon GuardDutyの抑制ルールで(たぶん)すべての値をJSONパスで指定して条件に加えられるようになりました
こんにちは、臼田です。
みなさん、AWSの脅威検出してますか?(挨拶
今回はAmazon GuardDutyのアップデート通知より抑制ルールの柔軟性が上がったという連絡があったのでチェックしてみましょう。
アップデート通知の内容
下記の内容が通知されました。
{
"version": "1",
"type": "NEW_FEATURES",
"featureDetails": [
{
"featureDescription": "Amazon GuardDuty now supports creating suppression rules using any finding field, offering flexibility to filter findings based on all attributes of the finding JSON. This expanded capability allows creating more precise suppression rules tailored to security workflows, helping organizations focus on relevant findings by streamlining alert management.",
"featureLink": "https://docs.aws.amazon.com/guardduty/latest/ug/findings_suppression-rule.html"
}
]
}
※アップデート通知の受け取り方は下記参照
内容の意訳は以下のとおりです。
Amazon GuardDutyは、検出フィールドを自由に選択して抑制ルールを作成できるようになり、検出 JSON のすべての属性に基づいて検出結果を柔軟にフィルタリングできます。この拡張機能により、セキュリティワークフローに合わせたより精度の高い抑制ルールを作成できるようになり、アラート管理を効率化することで、組織は関連性の高い検出結果に集中できるようになります。
Amazon GuardDutyでは、AWS上の様々な脅威を検出できますが、場合により煩雑な検出が出た時に「抑制ルール」を利用して特定のパターンのみ、通知をしないでおく事が可能です。
従来はこの抑制ルールで使用できる属性(Finding TypeやEC2インスタンスIDなど)は、検出内容の中でも一部の要素だけでした。例えばLambda関数のバージョン、S3バケットの所有ID、EBSマルウェアスキャンの危険なファイルの検出数など、findingsのJSONには沢山の情報が記載されていましたが、これらを条件としてフィルターした抑制ルールが作成できませんでした。
今回のアップデートでは、これらの属性をJSONパスっぽいもので指定できるようになっていて、通知上はすべての属性でフィルターできるとなっていました。
やってみた
実際に動作を見てみましょう。
わたしが現時点で確認している限りでは、本機能はCLI/SDKのみ対応でAWSマネジメントコンソールからは操作できませんでした。
このアップデートが対応しているAPIは下記2つです。
- CreateFilter: 抑制ルールの作成
- UpdateFilter: 抑制ルールの更新
なお、同じフィルターの機能はListFindingsでも利用できますが、そちらはまだこのフィルターに対応していませんでした。
以下のように実行してみました。アクション元のASN IDとASN名は従来から利用できましたが、ISPは対象外だったのでこれを指定してみました。
DETECTOR_ID=$(aws guardduty list-detectors --query 'DetectorIds[0]' --output text)
aws guardduty create-filter \
--detector-id $DETECTOR_ID \
--name "digitalocean-isp" \
--action ARCHIVE \
--finding-criteria '{
"Criterion": {
"service.action.networkConnectionAction.remoteIpDetails.organization.isp": {
"Equals": ["Digital Ocean"]
}
}
}'
## レスポンス
{
"Name": "digitalocean-isp"
}
画面を見てみると、抑制ルールが作られていることが確認できます。

更新画面に行くと、コマンドを実行したとおりになっていました。

そして、以下のようにこの属性はAWSマネジメントコンソール上では直接の編集が難しいと書かれていました。
To edit this filter attribute, use the AWS CLI or an AWS SDK.
実際に追加を試みましたが、直接このJSONのパスを入れることも、それらしい選択肢もありませんでした。現時点ではこの表記通りの機能状態のようです。
このフィルターがListFindingsで機能しない事を確認します。
$ aws guardduty list-findings --detector-id $DETECTOR_ID --finding-criteria '{
> "Criterion": {
> "service.action.awsApiCallAction.remoteIpDetails.organization.isp": {
> "Equals": ["Digital Ocean"]
> }
> }
> }'
aws: [ERROR]: An error occurred (BadRequestException) when calling the ListFindings operation: The request was rejected because the parameter findingCriteria has an invalid value.
Additional error details:
Type: InvalidInputException
invalid valueとなり実行できませんでした。ASNだと成功します。
$ aws guardduty list-findings --detector-id $DETECTOR_ID --finding-criteria '{
> "Criterion": {
> "service.action.awsApiCallAction.remoteIpDetails.organization.asn": {
> "Equals": ["14061"]
> }
> }
> }'
{
"FindingIds": [
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
]
}
ListFindingsでも使えるようになると嬉しいですね。
Lambda関数のバージョンの指定だと以下のようになります。
$ aws guardduty create-filter --detector-id $DETECTOR_ID --name "suppress-lambda-version" --action ARCHIVE --finding-criteria '{
> "Criterion": {
> "resource.lambdaDetails.functionVersion": {
> "Equals": ["$LATEST"]
> }
> }
> }'
{
"Name": "suppress-lambda-version"
}
他にも、利用できる値についてはAWS CLIのリファレンスなどに記載があります。
ここに書かれている属性の値は、アップデート通知からすると全てであると考えられますが、実際にすべてを網羅しているかは不明です。書かれているものほとんどがJSONパスっぽいものですが、リストが無視されていたり、直接取得したJSONとは違って各Keyがキャメルケースになっているなど、ちょっと扱いに気をつける必要があります。
- JSONパス: [0].Service.Action.AwsApiCallAction.RemoteIpDetails.Organization.Isp
- 指定してるもの: service.action.awsApiCallAction.remoteIpDetails.organization.isp
まとめ
Amazon GuardDutyで抑制ルールの条件が柔軟に、様々な属性を指定して書けるようになりました。
かゆいところに手が届くアップデートですね。活用しましょう。








