AWSアカウントでEC2が作成されたときにメール通知【CloudWatch Events + AWS Config】

記事タイトルとURLをコピーする

エンジョイ AWS!
サーバーワークス エンジニアの伊藤Kです。

AWSアカウントの管理者をされている方で、例えばユーザーが自由にEC2インスタンスを構築できるよう権限を委任した場合に、
利用料チェックの観点から、EC2が構築されたこと自体は検知したい、といったニーズはあるのではないでしょうか。
そんなときにきっと役に立つ、「AWSアカウントでEC2インスタンスがローンチされたときにメール通知」の方法を紹介します。

構成

Amazon CloudWatch Eventsで、AWS Configの「ResourceDiscovered」イベントをトリガーとして、Amazon SNSでEメールを送信します。

f:id:swx-kenichi-ito:20210115215130p:plain

手順

前提として、以下の2点は完了していることとします

  • AWS Configの有効化
  • 通知用メールアドレスへEメールを送信するSNS Topicの作成(ここでは「Default_Topic」という名前で作成したものとします)

f:id:swx-kenichi-ito:20210115215201p:plain

それでは手順です。
以下、 公式のドキュメント に沿って進めていきます。


マネジメントコンソールからCloudWatchを開いて、
左のメニューから「イベント」 → 「ルール」を選択し、「ルールの作成」をクリックします。

f:id:swx-kenichi-ito:20210115215222p:plain


「ルールを作成する」画面で「イベントパターン」を選択し、
「サービス別のイベントに一致するイベントパターンの構築」プルダウンリストを開いて、
「カスタムイベントパターン」を選択します。
「カスタムイベントパターンの構築」に、公式ドキュメントから以下のイベントパターンの例をコピーして貼り付けます。

f:id:swx-kenichi-ito:20210115215242p:plain


{
  "source": [
    "aws.config"
  ],
  "detail-type": [
    "Config Configuration Item Change"
  ],
  "detail": {
    "messageType": [
      "ConfigurationItemChangeNotification"
    ],
    "configurationItem": {
      "resourceType": [
        "AWS::EC2::Instance"
      ],
      "configurationItemStatus": [
        "ResourceDiscovered"
      ]
    }
  }
}


「ターゲットの追加」をクリックします。

f:id:swx-kenichi-ito:20210115215304p:plain


ターゲットのドロップダウンメニューを選択し、「SNS トピック」 を選択します。
「トピック」で通知Eメール送信用のトピックを選択します。
「インプットトランスフォーマー」を選択します。

f:id:swx-kenichi-ito:20210115215324p:plain


「入力パス」テキストボックスに、公式ドキュメントから以下のパスの例をコピーして貼り付けます。

{
    "awsRegion": "$.detail.configurationItem.awsRegion",
    "awsAccountId": "$.detail.configurationItem.awsAccountId",
    "resource_type": "$.detail.configurationItem.resourceType",
    "resource_ID": "$.detail.configurationItem.resourceId",
    "configurationItemCaptureTime": "$.detail.configurationItem.configurationItemCaptureTime"
}


「入力テンプレート」テキストボックスに、公式ドキュメントから以下のサンプルテンプレートをコピーして貼り付けます。

"On <configurationItemCaptureTime> AWS Config service recorded a creation of a new <resource_type> with Id <resource_ID> in the account <awsAccountId> region <awsRegion>. For more details open the AWS Config console at https://console.aws.amazon.com/config/home?region=<awsRegion>#/timeline/<resource_type>/<resource_ID>/configuration"

f:id:swx-kenichi-ito:20210115215754p:plain


「設定の詳細」をクリックします。


「ルールの詳細を設定する」画面で「名前」に任意の名前を入力し、
「状態」は「有効化」にチェックが入った状態で「ルールの作成」をクリックします。

f:id:swx-kenichi-ito:20210115215810p:plain


ルールの一覧に作成したルールが表示され、ステータスが緑の丸になっていることを確認します。

f:id:swx-kenichi-ito:20210115215828p:plain

いざ検知

では、EC2を1インスタンス起動(ローンチ)してみます。
新規ローンチのみが対象で、既にあるインスタンスの起動が誤検知されないことを確認するために、既存のインスタンスの停止 → 開始も同時間帯に実施しました。

f:id:swx-kenichi-ito:20210115215847p:plain


起動から15分で、対象の1台のみ綺麗にメールが届きました!
インスタンスIDも確認できます。

f:id:swx-kenichi-ito:20210115215906p:plain

気になるお値段は

毎月110円前後で済みそうです。

CloudWatch Events 100万件までは 1 USD
AWS Config 今回の設定前から記録は動いている前提のため、今回は追加で料金は発生しない
SNS 無料枠で済みそう
・毎月最初の 100 万 Amazon SNS リクエストは無料
・Email/Email-JSON 1,000 件まで無料



それでは、楽しいAWSライフを!
f:id:swx-kenichi-ito:20210115220251p:plain

伊藤K (記事一覧)

SRE部

おっさんエンジニア。

甘いお菓子が大好きですが、体重にDirect Connectなので控えています。

「エンジョイ AWS」を合言葉に、AWSを楽しむことを心がけています。