#この記事でやること
AWSへのアクセスキーが漏れて、xlargeインスタンスが立てられてしまったというのをちらほら聞きます。
そうなってからでは遅いので、万が一、不正なアクセスがあった場合に、一早く気づけるようにするために、不正ログインをSlackに通知するようにしておきましょう。
今回説明する仕組みは、CloudTrailに記録されているAWSコンソールへのログイン情報をCloudWatchのログに記録し、CloudWatchのアラート機能を利用し、指定IPアドレス以外からのログインを抽出、Lambaを利用してSlackの通知をするというものです。
以下の順番で説明していきます
- CloudTrailとCloudwatchの統合
- LambaでSlackに通知する関数を追加
- Cloudwatchのalertを設定
- SNSを利用して、CloudwatchのalertとLamba関数を紐付ける
#CloudTrailとCloudWatchの統合
CloudTrailに記録されるログイン情報をCloudWatchのログに記録するために、まずCloudtrailに行って、証跡を作ります。
手順は、
- CloudTrailの証跡情報に移動
- 「証跡の作成」をクリック、以下の情報を埋めていきます
3. 証跡情報の作成>証跡名(slack-notifyなど)
4. データイベント>S3パケット作成
5. ストレージの場所>S3パケット(slack-strageなど) - CloudTrail一覧に戻り、証跡が作成されていることを確認し、もう一度作成した証跡の詳細に移動します
4. 右上の「ログの記録」がONになっていることを確認
5. Cloudwatch Logs>設定で内容を確認し「次へ」をクリック、詳細を確認し、「許可」します - これで、CloudTrailとCloudWatchの統合が完了です
#LambaでSlackに通知する関数を追加
Slackに不正ログインを通知するために、Lamba関数を作成します。
その前に、下記のサイトを参考にSlackのWebhook URLを取得しておいてください。
slackのIncoming Webhookを試してみた。
それでは、早速、Lamba関数を作成していきます。
手順は、
- AWS Lambaに移動
- 「一から作成」を作成して、以下の情報を埋めて、「関数を作成」します
3. 名前(slack-notifyなど)
4. ランタイム(Node.jsなどお好きな言語を)
5. ロール(既存のロールを選択)
6. 既存のロール(先ほど作成したロールを選択します) - すると詳細ページに移動するので、「関数コード」にスクリプトを記載します(こちらの方のコードが参考になります)
- これで、Slackに不正ログインを通知するためのLamba関数を作成が完了です
CloudWatchのalertを設定
CloudWatchでAWSコンソールに不正ログインがあった際に、通知してくれるalertを作成していきます。
手順は以下です。
- CloudWatchのログに移動
- 「CloudTrailとCloudWatchの統合」で作成した、ロググループのメトリクスフィルタをクリック
- 「メトリクスフィルタの追加」をクリック、フィルタパターンに以下の関数を記載します(今回は指定したIPアドレス外からのアクセスを探知するため、***には限定するIPアドレスをご記載ください
{ $.responseElements.ConsoleLogin = "Success" && $.sourceIPAddress !="×××.×××.×××.×××" }
4.右下の「メトリクスの割り当て」をクリックし、必要な情報を記載したら、フィルタの作成をクリックします
5. フィルタが作成し終えたら、フィルタ詳細ページからアラームの作成します
6. これで、CloudWatchのalertを設定の完了です
#SNSを利用して、CloudwatchのalertとLamba関数を紐付ける
最後に、Amazon Simple Notification Service(SNS)を利用して、CloudWatchのalertがあった場合に、Lamba関数を実行するよう設定していきます。
手順は以下です。
- SNSのトピックに移動
- 新しいトピックを作成します
- トピックを作成できたら、詳細ページから、「サブスクリプションの作成」をクリックし、以下の情報を埋めていきます
4. プロトコル(AWS Lamba)
5. エンドポイント(Lambaに設定した関数) - これで、CloudwatchのalertとLamba関数を紐付けの完了です(アラートが発生したら、Slackに通知が来ます)
#まとめ
セキュリティ関係はインシデントが起こってからでは遅いので、AWSのセキュリティベストプラクティスを読みながら、開発の最優先事項として、取り組むことをオススメします!
セキュリティのベストプラクティス