これはTDCソフト株式会社アドベントカレンダー2024 の4日目の記事です。
背景
顧客環境においてAWS Control TowerでAWSアカウントを管理しているのですが、あるアカウントにおいてAWS Configのコストが高騰していることがありました。
原因は、AWS Batch on Fargateで構成されているジョブにおいて、大量のジョブを並行実行する負荷試験を実施した結果、ネットワークインターフェースに関するイベントがAWS Configに記録され続けたというものでした。
本来であれば、対象のAWSアカウントのAWS Configの設定で特定のリソースタイプを除外することが可能です。
参考: https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/select-resources-excluding.html
しかし、コンプライアンスの観点から、個別のアカウントでAWS Configを編集することを無効にしているため、別の方法で実現する必要がありました。
実現方法
以下のブログを参考にさせてもらいました
- https://aws.amazon.com/jp/blogs/news/customize-aws-config-resource-tracking-in-aws-control-tower-environment/
- https://zenn.dev/septeni_japan/articles/e5396eeb30b388
AWS Configの設定を除外することは、Security Hubでも検知されなくなることから、セキュリティ上の観点からリスクを伴います。
今回の対応は、コスト高騰を防ぐための期間限定の暫定的対処という位置付けにしています。
参考のリンクはCloudFormationで実施していますが、今回はTerraformでリソースの作成を行いました。
構成
作成したLambda関数は実現方法のAWS公式ブログにもあるAWSControlTowerExecution
ロールを利用します。強い権限のロールであることから、マスタアカウントへのアクセス権の管理なども含め十分ご注意いただくことをお勧めします。
実現の流れ
事前準備
事前に以下の手順を実施しておく
- マスタアカウトにおいてパラメータストアの初期構築(Terraformで管理)
- マスタアカウトにおいてOverride設定用のLambdaをデプロイ(Terraformで管理)
オーバーライドを実施する場合
- マスタアカウトにて、設定を有効にするアカウントIDと除外したいリソースタイプをパラメータストアに格納しておきます。(Terraformで管理)
- 二重チェックの意味で、マネジメントコンソールからLambdaのテスト画面で対象アカウントを指定して関数を実行(子アカウント)
オーバーライドを止める場合
- マスタアカウトにて、設定を無効にするアカウントIDと除外したいリソースタイプをパラメータストアから削除しておきます。(Terraformで管理)
- 二重チェックの意味で、マネジメントコンソールからLambdaのテスト画面で無効にする対象アカウントを指定して関数を実行(子アカウント)
まとめ
上記の対応で子アカウント上のAWS Configのオーバーライドを設定することができました。
繰返しになりますが、Configのオーバーライドはセキュリティリスクを伴うため、オーバーライドをしないような運用対処が可能であれば(今回ではAWS Batchの並列実行の回数を少なくする)、そちらを実施いただくことを推奨します。
注意事項
- こちらの対応はあくまで一例であり、読者の方が本構成を利用する際はセキュリティ上のリスクを十分に把握された上、読者の方の責任で実施をお願いいたします。