🍷

AWS Configの料金が高いのは、ガードレールのチェック間隔だった

2022/11/09に公開

目的

Security Hubのセキュリティ基準を有効化後、特定のAWSアカウントのConfig料金がすごく高くなったので調べてみた。

原因を確認する

AWSの請求書をみると、Configルールの評価数における金額を確認することができます。

"ConfigurationItemRecorded(リソースの変更回数)"は、4000ほどですが、"ConfigRuleEvaluations(ルール評価数)"は、7万回以上あります。ルール数は、Security Hubのセキュリティ基準である、「AWS 基礎セキュリティのベストプラクティス」と「CIS AWS Foundations Benchmark」、それとデフォルトガードレールなので、たかだが、200程度です。
それにしては、ルール評価数が多すぎる。
そこで、どのようなルールで評価が行われているか、以下のサイトを参考に確認しました。
https://aws.amazon.com/jp/blogs/mt/use-amazon-athena-and-aws-cloudtrail-to-estimate-billing-for-aws-config-rule-evaluations/

CloudTrailのログ検索用のAthenaテーブルを作成

まずは、AthenaのテーブルをCREATE TALBEします。TABLE名とLOCATION名は修正してください。

CREATE EXTERNAL TABLE cloudtrail_logs ( eventVersion STRING, userIdentity STRUCT< type: STRING, principalId: STRING, arn: STRING, accountId: STRING, invokedBy: STRING, accessKeyId: STRING, userName: STRING, sessionContext: STRUCT< attributes: STRUCT< mfaAuthenticated: STRING, creationDate: STRING>, sessionIssuer: STRUCT< type: STRING, principalId: STRING, arn: STRING, accountId: STRING, userName: STRING>>>, eventTime STRING, eventSource STRING, eventName STRING, awsRegion STRING, sourceIpAddress STRING, userAgent STRING, errorCode STRING, errorMessage STRING, requestParameters STRING, responseElements STRING, additionalEventData STRING, requestId STRING, eventId STRING, resources ARRAY<STRUCT< arn: STRING, accountId: STRING, type: STRING>>, eventType STRING, apiVersion STRING, readOnly STRING, recipientAccountId STRING, serviceEventDetails STRING, sharedEventID STRING, vpcEndpointId STRING
)
COMMENT 'CloudTrail table for aws-hogehoge-account'
ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://hogehoge/mogemoge/CloudTrail/'
TBLPROPERTIES ('classification'='cloudtrail')

ルール名でAWS Configルール評価数を問い合わせ

10月の1ヶ月分を確認してみる。

WITH dataset AS (
  SELECT 
     json_extract(additionaleventdata,'$.configRuleName') AS rule_name, 
     CAST(json_extract(requestparameters, '$.evaluations') AS ARRAY(MAP(VARCHAR, VARCHAR))) AS evaluations_array

  FROM cloudtrail_logs
  WHERE eventsource = 'config.amazonaws.com'
    AND eventname = 'PutEvaluations'
    AND eventTime >= '2022-10-01T%'
    AND eventTime <= '2022-10-31T%'
),
expanded_dataset as (
  SELECT 
    rule_name,
    e['complianceType'] as compliance_type
 
  FROM dataset, UNNEST(evaluations_array) AS t(e)
  
  WHERE e['complianceType'] != 'NOT_APPLICABLE'
)
SELECT 
  rule_name,
  count(compliance_type) as evaluations
FROM expanded_dataset
GROUP BY rule_name
ORDER BY evaluations DESC

結果をみると、Control Towerのガードレールで設定されているIAM系のルール評価が、ずば抜けて多い事がわかりました。

1時間に1回チェックしてるの?

この2つのコントロールのトリガータイプをみると、「定期的」で頻度は「1時間」となってました。
えっ? デフォルトだと1時間なの?って感じです。

MFAなのでセキュリティ上、優先度が高く、1時間に1回のチェックということでしょうか。いずれにせよ、ユーザ数も多いので、この頻度は流石に困ります。
MFAについては、Security Hubのセキュリティ基準でもチェックしているので、今後は、ガードレール設定で、このコントロールを適用しないことを検討していきます。

まとめ

  • Configの料金は、こまめに確認して必要以上に高くなっていないか確認しましょう。
  • ガードレールのコントロールには、デフォルトで1時間に1回の定期チェックをしているものもあるので、内容を確認して適切なチェック間隔に変えたほうが良さそうです。
  • Security Hubのセキュリティ基準のコントロールとガードレールで重複するようなものについては、どちらか一方での適用も検討しましょう。

Discussion