AWS Security Hub を有効にすると AWS Config の利用料が倍増した話

記事タイトルとURLをコピーする

CI部 佐竹です。
本日は Security Hub にまつわるお金の話です。

はじめに

以前、Amazon Macie で利用料が意図せず増加してしまうブログ記事を記載しました。

blog.serverworks.co.jp

今回もそのような、意図しない AWS 利用料増加に関するブログとなっています。

Security Hub

Security Hub はセキュリティのチェック状況を Organizations の全アカウントを跨いで確認できるコンプライアンスに関する機能です。

昨今、AWS のアカウント発行数と AWS 採用社数が増加し続ける中で、企業が各 AWS アカウントの統制を取るのは大変な仕事になってきています。その中で、Organizations(組織) に跨ったコンプライアンス状況を確認することが可能な Security Hub は、特に複数の AWS アカウントを保持されている大手企業様で利用が増えております。

Security Hub を有効化する = Config Rules

公式ドキュメントに記載されている以下の内容通り、Security Hub を有効化することで、AWS Config Rules が実行されるようになります。

AWS Security Hub は、サービスリンクされた AWS Config ルールを使用して、コントロールのセキュリティチェックの大部分を実行します。

https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/securityhub-prereq-config.html

つまり、Security Hub の実態は AWS Config Rules によるコンプライアンス違反のチェックです。

AWS Config の利用料金

AWS Config の料金は以下の通りです。

AWS リージョンごとに、AWS アカウントに記録された設定項目あたり 0.003USD をお支払いいただきます。

また、実際の Billing ダッシュボードの画面キャプチャを掲載します。

f:id:swx-satake:20210621163256p:plain

AWS Config APN1-ConfigurationItemRecorded

$0.003 per Configuration Item recorded in Asia Pacific (Tokyo) region

Config 利用料の変化を Athena クエリで分析する

先に記載した $0.003 per Configuration Item recorded in Asia Pacific (Tokyo) region の値=料金が、Security Hub 有効化前と、有効化後の月額利用料で比較し「倍」になってしまいました。この原因を究明すべく AWS サポートに調査協力を仰いだところ、以下のクエリ1を受け取りました。

‐-[クエリ1]--

SELECT configurationItem.resourceType,
         configurationItem.resourceId,
         COUNT(configurationItem.resourceId) AS NumberOfChanges
FROM < データベース名 >.< テーブル名 >
CROSS JOIN UNNEST(configurationitems) AS t(configurationItem)
WHERE "$path" LIKE '%ConfigHistory%'
        AND configurationItem.configurationItemCaptureTime >= '2020-12-01T%'
        AND configurationItem.configurationItemCaptureTime <= '2020-12-31T%'
        AND configurationItem.resourceType = 'AWS::Config::ResourceCompliance'
GROUP BY  configurationItem.resourceType, configurationItem.resourceId
ORDER BY  NumberOfChanges DESC

これは S3 に格納された AWS Config のログ ( LOCATION 's3://<BUCKET-NAME>/AWSLogs/<ACCOUNT-ID>/Config/<REGION>/'; ) を分析するクエリとなっています。

なお、本件は以下のナレッジセンター公式ページも合わせてご確認ください。

aws.amazon.com

このクエリを少しカスタムし、コメントアウトすることでこのようなクエリ2に変更しました。

‐-[クエリ2]--

SELECT configurationItem.resourceType,
--         configurationItem.resourceId,
         COUNT(configurationItem.resourceId) AS NumberOfChanges
FROM default.awsconfig_2020
CROSS JOIN UNNEST(configurationitems) AS t(configurationItem)
WHERE "$path" LIKE '%ConfigHistory%'
        AND configurationItem.configurationItemCaptureTime >= '2020-12-01T%'
        AND configurationItem.configurationItemCaptureTime <= '2020-12-31T%'
--        AND configurationItem.resourceType = 'AWS::Config::ResourceCompliance'
GROUP BY  configurationItem.resourceType
--, configurationItem.resourceId
ORDER BY  NumberOfChanges DESC

f:id:swx-satake:20210621164935p:plain

結果を確認すると AWS::Config::ResourceCompliance が Security Hub を有効にする前の月と比較してかなり増えていることがわかりました。どれくらいかというと、おおよそ6倍です。

この AWS::Config::ResourceCompliance が Security Hub によって増えたことがクエリにより明らかになりました。さらに、その詳細を追います。

コスト増の理由

結論は、題名の通り Security Hub の有効化による Config Rules の増加、それに伴う Config 利用料の増加です。

そして、以下が詳細な原因分析結果です。

原因一覧

  1. Security Hub で AWS::SSM::ManagedInstanceInventory (SSM Agentの死活監視)のチェックが有効化された
  2. 独自に CloudWatch Agent の死活管理チェックを Security Hub で有効化した
  3. 独自に30日間連続で停止している EC2 Instance かどうかのチェックを Security Hub で追加した
  4. 複数台(100台以上)の EC2 Instance が毎日夜間停止し、日中起動するスケジュール管理がされていた

分析に至る背景

Security Hub 有効化以前は、EC2 Instance 個別の Config Rules における履歴(configurationItem.resourceId)に対する NumberOfChanges がそれぞれ 1 のみだったのに対し、有効化後は 114、62、59 とそれぞれが増加したことがわかりました。補足すると、これは クエリ1 を使用しての分析によるものです。

  • AWS::EC2::Instance/i-0123456789adceeada 1→114
  • AWS::SSM::ManagedInstanceInventory/i-0123456789adceeada 1→62
  • AWS::SSM::AssociationCompliance/AWS::SSM::ManagedInstanceInventory/i-0123456789adceeada 1→59

この原因を1つずつ調査している中、先頭に記載しました原因が判明しました。

個別のインスタンスを掘り下げた詳細な要因

前提として AWS::Config::ResourceCompliance はインスタンスの変化を JSON の変化として捉えます。例えば EBS の容量を変更すると、それに伴い設定パラメータの集合体である EBS の JSON が変化し、変更前の JSON と 変更後の JSON で Diff があった場合にフックされるということです。

AWS::EC2::Instance

AWS::EC2::Instance/i-0123456789adceeada ( Instance ID は仮) が 114 あったのは、以下の4つを繰り返すためです。

  1. 夜間停止によるJSON変更
  2. 夜間停止期間中による30日間連続停止のチェックのJSON変更
  3. 早朝起動によるJSON変更
  4. 日中起動期間中による AWS::SSM::ManagedInstanceInventory チェックのJSON変更

4回×30日間でおおよそ120回出現します。

AWS::SSM::ManagedInstanceInventory

AWS::SSM::ManagedInstanceInventory/i-0123456789adceeada が 62 あったのは、以下の2つを繰り返すためです。

  1. 夜間停止によるJSON変更
  2. 日中起動期間中による CloudWatch Agent の有効化によるJSON変更

2回×30日間でおおよそ60回出現します。

AWS::SSM::AssociationCompliance/AWS::SSM::ManagedInstanceInventory

AWS::SSM::AssociationCompliance/AWS::SSM::ManagedInstanceInventory/i-0123456789adceeada が 59 あったのは、以下の2つを繰り返すためです。

  1. 夜間停止によるJSON変更
  2. Diff のない変更の検知(※)

2回×30日間でおおよそ60回出現します。

(※)・・・ここだけは「変更がないものの」変更として検知されてしまうようでした

利用料増加の要因まとめ

Security Hub を有効した場合、夜間停止をしている EC2 インスタンスにおいて、JSON の差分発生をトリガーに AWS Config Rules の利用料が増加してしまうことが判明しました。

またこの料金の回避方法は、Security Hub において「チェックを停止する」以外の回避方法がないこともわかりました。

まとめ

f:id:swx-satake:20210621181714p:plain:w150

本日は、AWS Security Hub を有効化することで AWS Config の利用料が増えるという実例を紹介させて頂きました。また、合わせて調査に利用した Athena のクエリもご紹介いたしました。

加えて、AWS Config の利用料が増える背景として、夜間停止している EC2 インスタンスの存在があったことも判明しました。

AWS Config の利用料が増えた原因を調査されたい方の参考になれば幸いです。

ではまたお会いしましょう。

佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ

マネージドサービス部所属。AWS資格全冠。2010年1月からAWSを利用してきています。2021-2022 AWS Ambassadors/2023 Japan AWS Top Engineers/2020-2023 All Certifications Engineers。AWSのコスト削減、最適化を得意としています。