CIS AWS Foundations Benchmarkのモニタリング要件を満たすCloudFormationテンプレート　

## はじめに
CIS AWS Foundations Benchmarkでは、CloudTrailで記録されるAPIコールに対して全14項目の
モニタリングを設定することが推奨されています。(3.Monitoring)
この14項目をモニタリングするためのCloudWatch Logsメトリクスフィルタとアラームを設定する
CloudFormation テンプレートを作成しました。

## CIS AWS Foundations Benchmark とは
米国の非営利団体である CIS (Center for Internet Secuirty) が公開している
AWSアカウントの基本的なセキュリティを実装するための技術的なベストプラクティスです。
CISのベンチマークは PCI DSS などのコンプライアンス要件で業界標準のベストプラクティスとの
記載があった場合などに参照されます。

**CIS Amazon Web Services Foundations Benchmark v1.2.0 - 05-23-2018**
https://d1.awsstatic.com/whitepapers/compliance/AWS_CIS_Foundations_Benchmark.pdf

## AWS Security Hubによるコンプライアンスの自動チェック
AWS Security Hub は AWS re:Invent 2018で発表されたAWS環境全体のセキュリティと
コンプライアンスの状況を確認することが可能なサービスです。

https://aws.amazon.com/jp/security-hub/

Security Hub は CIS AWS Foundations に定義されている各項目を
自動的かつ継続的にチェックすることができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/468efc31-60fc-5cbf-9977-c01a38a69731.png)



## 作成したCloudFormationテンプレートについて
[GitHub](https://github.com/hayao-k/aws-cis-cfn-template/blob/master/CloudWatch_Alarms_for_CloudTrail_API_Activity.yaml)においています。

以下のドキュメントに掲載されている、Amazonのテンプレートをもとに作成しています。
([CloudWatch_Alarms_for_CloudTrail_API_Activity.json](https://s3-us-west-2.amazonaws.com/awscloudtrail/cloudwatch-alarms-for-cloudtrail-api-
activity/CloudWatch_Alarms_for_CloudTrail_API_Activity.json))

**テンプレートを使用して アラームを作成する**
https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/use-cloudformation-template-to-create-cloudwatch-alarms.html

CloudTrailの証跡設定内でリンクされているものと同一です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/e06770d4-c11e-2e36-2b07-6cf55c3c3f89.png)

オリジナルのテンプレートはCIS AWS Foundations の推奨モニタリング項目を
網羅できていないため、不足分のメトリクスフィルタおよびアラーム設定を追加しました。
具体的には以下の項目です。

* 3.2 - Ensure a log metric filter and alarm exist for Management Console sign-in without MFA
* 3.3 - Ensure a log metric filter and alarm exist for usage of "root" account
* 3.7 - Ensure a log metric filter and alarm exist for disabling or scheduled deletion of customer created CMKs
* 3.8 - Ensure a log metric filter and alarm exist for S3 bucket policy changes
* 3.9 - Ensure a log metric filter and alarm exist for AWS Config configuration changes
* 3.13 - Ensure a log metric filter and alarm exist for route table changes

オリジナルに含まれる以下の項目は、CIS AWS Foundations の対象外であるため
あえて削除しています。

* EC2InstanceChanges
* EC2LargeInstanceChanges

また個人的な好みでYAML形式に書き換えています。

## CloudFormationスタックの作成
### 前提条件
予め以下の条件を満たす証跡が作成されている必要があります。

* 全てのリージョンを対象としていること
* 管理イベントは読み込み/書き込みイベントをすべて記録していること
* CloudWatch Logs への配信が設定されていること

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/3397cbe7-e8cc-0af3-e2cf-8aaffaed9a38.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/ba9e157b-766b-b0bf-f247-c8f39ba859c1.png)

またCloudFormationテンプレートを予め任意のS3バケットにアップロードしておきます。

### スタックの作成
S3にアップロードしたテンプレートファイルを指定してスタックの作成を行います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/d39d4aa6-250e-75bc-6a60-386488f2388e.png)

スタック名、アラームを通知するメールアドレスおよびCloudWatchLogsへの
配信設定を行ったロググループ名を入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/f869801e-8136-dcfe-2768-a9aa0860afd7.png)

移行の項目は任意の内容で設定し、スタックを作成します。
入力したメールアドレス宛にSNS Topicのサブスクリプション確認メールが届きますので
リンクを押下して、登録を完了します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/b31646f1-0032-1a9b-c1c7-74ee56807ee4.png)
スタックの作成が完了することを確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/a2b0766b-4c08-99a2-50f5-0d21f6bfa537.png)

### 結果確認
CloudWatchのコンソールから対象のロググループを確認すると以下のようなメトリクスフィルタ
およびアラーム設定が追加されていることを確認できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/51bcea32-5e82-7d1f-eefb-27e5d8716c2d.png)

Security HubでCIS AWS Foundationsの自動チェックを有効化している場合は以下のように
コンプライアンス状況を確認できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/248ecf38-e101-29ba-b163-d4a176b73b24.png)
グリーンが多いと気持ちがいいですね！

## 作った後に気づいた
CIS AWS Foundations Benchmark 全体をカバーするクイックスタートが既に公開されていました。。。
https://aws.amazon.com/jp/quickstart/architecture/compliance-cis-benchmark/

ですが、せっかく作ったので公開させていただきます。
参考になれば幸いです。

## 参考資料
**Announcing Industry Best Practices for Securing AWS Resources**
https://aws.amazon.com/jp/blogs/security/announcing-industry-best-practices-for-securing-aws-resources/
**AWS Security Hub を使用した CIS AWS Foundations Benchmark の計測**
https://d1.awsstatic.com/Compliance%20V2/JP_Security%20and%20Compliance/CIS%20BenchMark%20and%20SecurityHub-SolutionDays2019_JP.pdf