AWS Configを使って本気でAWSアカウントを守る

# はじめに
この記事はDevOps on AWS大全の一部です。
DevOps on AWS大全の一覧は[こちら](https://qiita.com/tech4anyone/items/b06f88035d27c6ef13b2)。

この記事ではAWS Configに関連する内容を超詳細にまとめています。

具体的には以下流れで説明します。

- AWS Configとは
- AWS Configの仕組み
- AWS Configの活用
- AWS Configのベストプラクティス

AWSの区分でいう「Level 200：トピックの入門知識を持っていることを前提に、ベストプラクティス、サービス機能を解説するレベル」の内容です。

# この記事を読んでほしい人
- AWS Configがどういうサービスか説明できるようになりたい人
- AWS Configを採用するときのベストプラクティスを説明できるようになりたい人
- AWS Certified DevOps Engineer Professionalを目指している人

# AWS Configとは
AWS Configは、AWSリソースの設定変更を監視し、記録し、評価するサービスです。

AWS Configは、リソースの現在の設定と過去の設定履歴を保存し、設定変更のタイミングや内容を追跡できます。
また、AWS Configは、リソースの設定が事前に定義したルールに準拠しているかどうかをチェックし、準拠していない場合に通知やアクションを実行できます。

これによりAWSリソースのコンプライアンスを記録し監査するだけではなく即時是正することが可能になります。

# AWS Configの仕組み
AWS Configは、以下のコンポーネントで構成されています。

## ルール
リソースの設定が望ましい状態に準拠しているかどうかを評価するロジックです。
ルールは、AWSマネージドルールとカスタムルールの2種類があります。
AWSマネージドルールは、AWSが提供する一般的なベストプラクティスに基づくルールです。
一方、カスタムルールは、ユーザーが自分で作成するルールで、AWS Lambda関数を使用して評価ロジックを記述します。

ルールは、設定変更が発生したときや定期的なスケジュールでトリガーされ、ルールの評価結果は、準拠または非準拠のいずれかになります。

一点、AWS Configはルールに基づく評価を行うだけで、ルールから外れる操作を拒否するものではないという点に注意が必要です。

## 設定レコーダー
AWSリソースの設定変更を検出し、設定アイテムと呼ばれるJSON形式のドキュメントに保存します。
設定アイテムには、リソースのID、タイプ、属性、関連するリソースなどの情報が含まれます。
設定レコーダーは、S3バケットに設定アイテムを保存し、オプションでSNSトピックに通知を送信します。

## 配信チャネル
設定レコーダーが保存するS3バケットとSNSトピックを指定します。
配信チャネルは、1つのAWSアカウントにつき1つだけ作成できます。

## コンフィグレーションストリーム
AWS Configが検出した設定変更や評価結果をリアルタイムでストリーミングする機能です。
コンフィグレーションストリームは、Amazon Kinesis Data Firehoseを使用して他のAWSサービスや外部のアプリケーションにデータを配信できます。

## コンフィグスナッショット
AWSアカウント内のすべてのリソースの現在の設定情報を含むファイルです。
コンフィグスナッショットは、S3バケットに保存されます。コンフィグスナッショットは、手動で作成することも、定期的なスケジュールで自動的に作成することもできます。


# AWS Configの活用
## AWS Configで検知したコンプライアンス違反を自動修正
AWS Configはコンプライアンス違反を検知するだけですが、SSMと組み合わせることでコンプライアンス違反の自動修正が可能になります。

![](https://storage.googleapis.com/zenn-user-upload/a51a4edcf3dc-20231215.png)

具体的にはAWS Configで設定したルールが非準拠になった際にSSM Documentをトリガーするという方法です。
SSM Documentには事前に修正時に実施する処理を記載して起き、コンプライアンス違反になるとAWS Configがトリガーを引くことで自動実行されるという仕組みです。

## AWS Configで検知したコンプライアンス違反を通知
AWS Configでコンプライアンス違反を検知し、AWS Configでイベント駆動の通知を実現することも可能です。

![](https://storage.googleapis.com/zenn-user-upload/7459126d8b81-20231215.png)

具体的にはAWS Configで設定したルールが非準拠になった際にSNSあるいはEventBridgeをトリガーするという方法です。
実プロジェクトでは公開チャットに通知を飛ばすことで、コンプライアンス違反になる操作を抑止するという方法がよくとられています。

## アグリゲータを利用したマルチアカウント監視
AWS Configはアグリゲータを利用することで中央アカウントから各アカウントのコンプライアンス監視を実現することができます。

![](https://storage.googleapis.com/zenn-user-upload/c99c0ed69db0-20231215.png)

基本的にアグリゲータを利用する場合には収集対象アカウント側からの承認が必要ですが、Organizationを使っている場合には個別承認は不要です。

また、AWS Configルールは個別アカウント側に作成することになるのでCloudFormationのStackSetsを用いたマルチアカウント展開するとよいでしょう。

AWS ConfigのConformance Pack（コンフォーマンスパック）は、一連のAWS Configルールとリマインダーをパッケージ化し、特定のコンプライアンス要件やガバナンスのニーズに合わせてAWSリソースを監視および評価するための機能です。Conformance Packを使用することで、組織全体で一貫したコンプライアンスおよびガバナンスの枠組みを容易に展開し、管理することが可能になります。

# AWS Configのベストプラクティス
AWS Configのベストプラクティスを以下の表にまとめました。

| 項目 | ベストプラクティス |
| --- | --- |
| AWS Configの有効化 | AWS Configは、すべてのリージョンで有効化することを推奨します。これにより、マルチリージョンで展開されたAWSリソースの設定変更を一元的に管理できます。 |
| 設定ルールの選択 | AWS Configでは、AWSマネージドルールとカスタムルールの2種類の設定ルールを利用できます。AWSマネージドルールは、AWSが提供する一般的なベストプラクティスやポリシーに基づいたルールで、簡単に設定できます。カスタムルールは、自分で作成したLambda関数を利用して、独自のロジックや要件に基づいたルールを作成できます。 |
| 設定ルールの頻度を最適化 | 設定ルールは、変更ベースまたは期間ベースで評価されます。変更ベースでは、対象となるAWSリソースの設定が変更されたときに評価されます。期間ベースでは、指定した時間間隔（1時間から24時間）で評価されます。変更ベースは、リアルタイムに設定変更を検知できる利点がありますが、頻繁な変更がある場合はコストが高くなる可能性があります。期間ベースは、コストを抑えられる利点がありますが、設定変更から評価までにタイムラグが発生する可能性があります。 |
| 通知と修正 | AWS Configは、SNSトピックを利用して、設定ルールの評価結果や設定変更の通知を受け取ることができます。また、AWS Config Rulesでは、自動修正機能を利用して、設定ルールに違反したリソースの設定を自動的に修正することができます。自動修正機能は、AWSマネージドルールの一部やカスタムルールで利用できます。 |

# まとめ
この記事ではAWS Configに関連する内容を超詳細にまとめました。

- AWS Configとは
- AWS Configの仕組み
- AWS Configの活用
- AWS Configのベストプラクティス

次回はAWS Organizationについて超詳細解説します。