はじめに
AWSのConfigは想像以上の強さをもっており、
AWSサービス全体の監視をしてくれるだけではなく、
サービスが業務要件やコンプライアンスに準拠しているか否かも判断することができ、
必要に応じて当AWSサービスを停止、または削除する等を行うこともできます。
ゴール
本記事のゴールとしては、
Amazon Linux 2 AMI以外に、AMIに登録していないEC2を作成されましたら、当EC2の自動削除と、メール通知を実現することを目標とします。
つまり、以下のAMIから作ったEC2しか作れないっていうことです。
その他のAMI、例えばWindowsやRedHatなどのAMIからは、EC2を作れないことになります。
また、ルールに準拠されていない削除されたEC2に対しては、こういうアラートメールが届く想定です。
1.SNS作成
SNS作成後に、サブスクリプションを作成し、自分のEメールを入力します。
上記のメールアドレスに届いたら、「Confirm subscription」を押下し、承認します。
2.IAMロール作成
IAMのロールは
AmazonSSMAutomationRole
を追加します。
さらに、インラインポリシーを追記し、MyAutomationRole"
を追加します。
MyAutomationRole"
ポリシーはこんな感じで追加してください
ロールの信頼関係に、ssm.amazonaws.com
とec2.amazonaws.com
にしてください。
3.Config作成
次にConfigを作成しますが、私は「1-clickセットアップ」で作成しました。
はじめにご説明させていただいた、Linux Amazon 2のAMI IDをパラメータに登録しておきます。
ami-0c02fb55956c7d316
その他の設定項目はデフォルトのままで作成します。
作成後に、「アクション」→「修復の管理」を押下します。
修復方法は自動修復とし、修復のアクションは「AWS-TerminateEC2Instance」を選択します。
リソースIDパラメータは」、InstanceIdを選択します。
パラメータのロールに、IAM側で作成したロールのARNを貼り付けし、保存します。
4.Eventbridge作成
名前を説明を入力の上、ルールタイプは「イベントパターンを持つルール」を選択します。
イベントソースにConfig
イベントタイプにConfig Rules Compliance Change
特定のメッセージタイプにComplianceChangeNotification
ターゲットに、SNSトピックを選択し、
ターゲット入力を設定に入力トランスフォーマー
を選択します。
そのあと入力トランスフォーマーを選択します。
サンプルイベントにConfig Rules Compliance Change
を選択します。
「ターゲット入力トランスフォーマー」に下記の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"
}
下記コードをテンプレートに入力し、保存します。
"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"
"( °-° ) Σ(°̀ᗝ°́) =͟͟͞͞(꒪ᗜ꒪ ‧̣̥̇) Σ( ºΔº 〣)"
"前方高エネルギー接近中、非戦闘員は速やかに退避せよ!!"
"あなたが作ったEC2はルールに準拠されていないため、"
"AWS Configに削除されました~!!"
"∑(๑ºдº๑)!! Σ( °o°) (๑°ㅁ°๑)!! ฅ(º ロ º ฅ)"
"以下は削除されたEC2情報です!!よく確認しておいてね~!!"
"・ID:<id>"
"・動作タイプ:<detail-type>"
"・アカウント:<account>"
"・時間:<time>"
"・リージョン:<region>"
"・インスタンスID:<resourceId>"
"・AWS Configルール名:<configRuleName>"
"・AWS Config ARN名:<configRuleARN>"
"・メッセージタイプ:<messageType>"
"・コンプライアンスタイプ:<complianceType>"
"・リソースタイプ:<resourceType>"
"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"
その他の設定はデフォルトのままで設定します。
5.テスト実施
上記のAMI IDに準拠していないEC2を作成してみます。
例えばUbuntuのAMIを選んで、作成します。
すぐConfigではコンプライアンスに比準拠と検出されました。
Configから当ルールに準拠していないEC2を削除しました。
メールのほうに、無事に定義されたアラートメールが届いたことを確認できました。
一方で、Amazon Linux 2を作ったら、削除されていないことを確認できました。
参考
顔文字は下記のサイトから参考しました。