【AWS】AWS Configでルールに準拠していないEC2を削除し、EventBridge + SNSメール通知する

# はじめに
AWSのConfigは想像以上の強さをもっており、
AWSサービス全体の監視をしてくれるだけではなく、
サービスが業務要件やコンプライアンスに準拠しているか否かも判断することができ、
必要に応じて当AWSサービスを停止、または削除する等を行うこともできます。

# ゴール
本記事のゴールとしては、
**Amazon Linux 2 AMI以外に、AMIに登録していないEC2を作成されましたら、当EC2の自動削除と、メール通知を実現することを目標とします。**
つまり、以下のAMIから作ったEC2しか作れないっていうことです。
その他のAMI、例えばWindowsやRedHatなどのAMIからは、EC2を作れないことになります。
![截屏2022-03-25 18.59.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/a5272dd9-5b35-842c-957f-5dbdd89c91fb.png)

また、ルールに準拠されていない削除されたEC2に対しては、こういうアラートメールが届く想定です。
![截屏2022-03-26 00.54.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/ea531d5e-b08b-3a6b-f282-b25379d78188.png)

# １．SNS作成
お好きな名前と表示名を入れて、SNSを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/b698533e-f09c-30ca-d89f-b4e09c312de0.png)

SNS作成後に、サブスクリプションを作成し、自分のEメールを入力します。
![截屏2022-03-25 18.47.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/b20e9d15-76ff-10a8-944d-b0b9c2300cbf.png)

上記のメールアドレスに届いたら、「Confirm subscription」を押下し、承認します。
![截屏2022-03-25 18.52.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/c4bf8839-2a9b-d516-992c-fb8c5f0751e1.png)

# ２．IAMロール作成
IAMのロールは
**``AmazonSSMAutomationRole``を追加します。
さらに、インラインポリシーを追記し、``MyAutomationRole"``を追加します。**
``MyAutomationRole"``ポリシーはこんな感じで追加してください
![截屏2022-03-25 19.28.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/8f407471-e11f-a10b-3b56-8d6fc836c19c.png)

ロールの信頼関係に、``ssm.amazonaws.com``と``ec2.amazonaws.com``にしてください。
![截屏2022-03-25 19.28.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/afbbd2a8-e06e-ea2f-3f98-2d19a47f29a8.png)


# 3．Config作成
次にConfigを作成しますが、私は「1-clickセットアップ」で作成しました。
![截屏2022-03-25 18.54.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/75c1dc71-5d52-4ed3-ceed-8168ebe85eeb.png)

新しいルールを追加します。
![截屏2022-03-25 18.56.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/2291a9d6-3bb5-34d1-df49-fb451250424e.png)

「approved-amis-by-id」を選択します。
![截屏2022-03-25 18.57.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/fb337525-6132-f979-aa46-fe1590ca51cb.png)

はじめにご説明させていただいた、Linux Amazon 2のAMI IDをパラメータに登録しておきます。
``ami-0c02fb55956c7d316``
![截屏2022-03-25 19.02.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/e1fb9f0d-90f9-cbe7-3e12-debc2861abb5.png)

その他の設定項目はデフォルトのままで作成します。
作成後に、「アクション」→「修復の管理」を押下します。
![截屏2022-03-25 19.08.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/e9205369-9dc2-b9da-32e8-f6d15a4eac3a.png)

修復方法は自動修復とし、修復のアクションは「AWS-TerminateEC2Instance」を選択します。
![截屏2022-03-25 19.20.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/b120e5c3-7500-44b8-265a-201b5c7e29ee.png)

リソースIDパラメータは」、InstanceIdを選択します。
パラメータのロールに、IAM側で作成したロールのARNを貼り付けし、保存します。
![截屏2022-03-25 19.22.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/d84a75a2-4716-2daf-3e20-4e599aaa8f38.png)


# ４．Eventbridge作成
名前を説明を入力の上、ルールタイプは「イベントパターンを持つルール」を選択します。
![截屏2022-03-25 19.05.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/e517c7ee-0caa-e266-9b77-b34b46daec70.png)

イベントパターンは、AWSのサービスに選択します。
![截屏2022-03-25 19.07.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/3dbe794f-9ad2-803d-4e47-3fbbce9cfe2a.png)

イベントソースに``Config``
イベントタイプに``Config Rules Compliance Change``
特定のメッセージタイプに``ComplianceChangeNotification``
![截屏2022-03-25 19.30.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/0aaea92e-cd8c-6132-270d-bb8598f83411.png)

ターゲットに、SNSトピックを選択し、
ターゲット入力を設定に``入力トランスフォーマー``を選択します。
そのあと入力トランスフォーマーを選択します。
![截屏2022-03-25 19.32.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/1f929e89-f7e0-3a0f-0781-1492e2910704.png)

サンプルイベントに``Config Rules Compliance Change``を選択します。
![截屏2022-03-26 00.42.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/7aa15007-8bf3-68ca-1fe6-5ea4b51ba504.png)

「ターゲット入力トランスフォーマー」に下記のJSONを入力します。
```json
{
  "account": "$.account",
  "complianceType": "$.detail.newEvaluationResult.complianceType",
  "configRuleARN": "$.detail.configRuleARN",
  "configRuleName": "$.detail.configRuleName",
  "detail-type": "$.detail-type",
  "id": "$.id",
  "messageType": "$.detail.messageType",
  "region": "$.region",
  "resourceId": "$.detail.resourceId",
  "resourceType": "$.detail.resourceType",
  "source": "$.source",
  "time": "$.time"
}
```
![截屏2022-03-26 01.04.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/7f5ee8f4-4935-9008-70be-54dd1a91fc17.png)

下記コードをテンプレートに入力し、保存します。
```
"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"

"( °-° )　　　 Σ(°̀ᗝ°́)　　 =͟͟͞͞(꒪ᗜ꒪ ‧̣̥̇)　　 Σ( ºΔº 〣)"

"前方高エネルギー接近中、非戦闘員は速やかに退避せよ!!"
"あなたが作ったEC2はルールに準拠されていないため、"
"AWS Configに削除されました～!!"

"∑(๑ºдº๑)!!　　Σ( °o°)　　(๑°ㅁ°๑)!!　　ฅ(º ﾛ º ฅ)"

"以下は削除されたEC2情報です!!よく確認しておいてね~!!"

"・ID：<id>"
"・動作タイプ：<detail-type>"
"・アカウント：<account>"
"・時間：<time>"
"・リージョン：<region>"
"・インスタンスID：<resourceId>"
"・AWS Configルール名：<configRuleName>"
"・AWS Config ARN名：<configRuleARN>"
"・メッセージタイプ：<messageType>"
"・コンプライアンスタイプ：<complianceType>"
"・リソースタイプ：<resourceType>"

"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"

```
![截屏2022-03-26 00.42.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/d654374b-c7a7-1921-50b7-6c7e275c9aae.png)

その他の設定はデフォルトのままで設定します。

# ５．テスト実施
上記のAMI IDに準拠していないEC2を作成してみます。
例えばUbuntuのAMIを選んで、作成します。
![截屏2022-03-25 23.21.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/642c92e1-6daf-3a67-8e82-2ec9b67efc59.png)

作成し始めました。
![截屏2022-03-26 00.47.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/1a26bb62-1d8a-f637-8f53-9478677c136f.png)

すぐConfigではコンプライアンスに比準拠と検出されました。
![截屏2022-03-25 23.25.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/7b19d3d5-760f-c55d-2155-2ed85b2ea0a6.png)

Configから当ルールに準拠していないEC2を削除しました。
![截屏2022-03-26 00.49.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/551b5765-c79f-f637-a557-cd9f0b7ad818.png)

メールのほうに、無事に定義されたアラートメールが届いたことを確認できました。
![截屏2022-03-26 00.54.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/ea531d5e-b08b-3a6b-f282-b25379d78188.png)

一方で、Amazon Linux 2を作ったら、削除されていないことを確認できました。
![截屏2022-03-26 00.59.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/865613/689cff01-e898-51d5-4c03-53e61c4abf39.png)

# 参考
顔文字は下記のサイトから参考しました。

https://www.lafary.net/culture/49558/