GuardDutyの利用料金が確認できるGetUsageStatistics APIを試してみた

いつの間にか使えるようになっていたGuardDutyの利用料金を確認できるGetUsageStatistics APIを試してみました。
2021.02.26

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

こんにちは、臼田です。

みなさん、GuardDutyのチェックしてますか?(挨拶

今回は知らぬ間に追加されていたGuardDutyの利用料金が確認できるAPIであるGetUsageStatisticsを試してみたいと思います。

知らぬ間に強化されていた使用状況ページ

API紹介の前にまずはこちらをご確認ください。GuardDutyの「使用状況」ページでは、GuardDutyが実際どれくらいのログを確認して、費用がかかっているかわかるページでした。しばらく見ないうちにこのページで詳細が見れるようになっていました。

注目ポイントはS3の部分で、バケット単位で細かくいくらかかっているかわかるようになっていました。なかなかやりおるマン。

そして、今回試すGetUsageStatistics APIはここで見れる情報を取得するものです。

やってみた

今回はawscliでやってみます。リファレンスはこちら

とりあえず使ってみるとこんな感じ。

$ aws guardduty get-usage-statistics --detector-id xxxxxxxxxxxxxxxxxxxxxxxxxxxx --usage-statistic-type SUM_BY_ACCOUNT --usage-criteria DataSources=S3_LOGS,CLOUD_TRAIL,DNS_LOGS,FLOW_LOGS
{
    "UsageStatistics": {
        "SumByAccount": [
            {
                "AccountId": "999999999999",
                "Total": {
                    "Amount": "4.151986873055727",
                    "Unit": "USD"
                }
            }
        ]
    },
    "NextToken": "xxxxxxxxxxxxxxxxxxxxxxxxx"
}

アカウント単位の合計金額が取得できました。オプションについて説明します。必須のオプションは以下の3つです。

  • --detector-id: DetectorのID
  • --usage-statistic-type: 統計タイプ。以下4つの統計タイプからどれか1つを選択して使用する。
    • SUM_BY_ACCOUNT: アカウント毎の統計
    • SUM_BY_DATA_SOURCE: データソース毎の統計
    • SUM_BY_RESOURCE: リソース(S3バケット)毎の統計
    • TOP_RESOURCES: 利用料の高い順に並べたリソース(S3バケット)
  • --usage-criteria: クエリ対象のアカウント・データソース・リソース(S3バケット)の指定。データソースの指定が必須。複数対象を含めることが可能。

APIについての説明は以下も参考になります。

GuardDuty コストの見積もり - Amazon GuardDuty

最初のクエリはアカウント毎の合計金額の取得ですが、複数のAWSアカウントのGuardDutyを集約していれば、それらの結果も表示できるようです。マルチアカウントで詳細に取得できるのと、バケット単位で取得できるので、Cost Explorerともすこし違う使い方ができそうですね。

続いてデータソース毎の結果を見てみましょう。

$ aws guardduty get-usage-statistics --detector-id xxxxxxxxxxxxxxxxxxxxxxxxxxxx --usage-statistic-type SUM_BY_DATA_SOURCE --usage-criteria DataSources=S3_LOGS,CLOUD_TRAIL,DNS_LOGS,FLOW_LOGS,AccountIds=999999999999
{
    "UsageStatistics": {
        "SumByDataSource": [
            {
                "DataSource": "FLOW_LOGS",
                "Total": {
                    "Amount": "1.9052065908908844E-4",
                    "Unit": "USD"
                }
            },
            {
                "DataSource": "DNS_LOGS",
                "Total": {
                    "Amount": "1.1740196496248246E-4",
                    "Unit": "USD"
                }
            },
            {
                "DataSource": "S3_LOGS",
                "Total": {
                    "Amount": "0.6836675999999999",
                    "Unit": "USD"
                }
            },
            {
                "DataSource": "CLOUD_TRAIL",
                "Total": {
                    "Amount": "3.46128928",
                    "Unit": "USD"
                }
            }
        ]
    },
    "NextToken": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

 

アカウントIDも一緒に指定してみました。前述の通り複数の対象を含めることが可能です。

必須のオプション以外に--unitで通貨を指定できるようですが、試しにJPYを指定してみましたが以下のように怒られました。現状はUSDオンリーのようです。

An error occurred (BadRequestException) when calling the GetUsageStatistics operation: Unsupported currency, supported values are: [USD]

まとめ

GuardDutyの利用料金を確認できるGetUsageStatistics APIについて紹介しました。

S3バケット単位で料金が見れることもあり、細かいチェックができそうです。マルチアカウントで使うこともできるようなのでぜひ使ってみてはいかがでしょうか?