AWS Configの料金が高いのは、ガードレールのチェック間隔だった
目的
Security Hubのセキュリティ基準を有効化後、特定のAWSアカウントのConfig料金がすごく高くなったので調べてみた。
原因を確認する
AWSの請求書をみると、Configルールの評価数における金額を確認することができます。
"ConfigurationItemRecorded(リソースの変更回数)"は、4000ほどですが、"ConfigRuleEvaluations(ルール評価数)"は、7万回以上あります。ルール数は、Security Hubのセキュリティ基準である、「AWS 基礎セキュリティのベストプラクティス」と「CIS AWS Foundations Benchmark」、それとデフォルトガードレールなので、たかだが、200程度です。
それにしては、ルール評価数が多すぎる。
そこで、どのようなルールで評価が行われているか、以下のサイトを参考に確認しました。
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