GithubHelp home page GithubHelp logo

fnifni / manual-changes-detecter-poc Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 599 KB

This code demonstrates the concept of using Config Stream and CloudTrail to derive artificial changes to the AWS environment.

License: MIT License

manual-changes-detecter-poc's Introduction

manual-changes-detecter-poc

概要

  • AWS環境の設定変更を通知するConfig通知(Config Stream)から、CloudTrail Eventを引き当てることで、変更を行ったユーザーを特定する概念実証コードです
  • 引き当てた情報をSlackに通知する機能を有しています
  • 信頼するarnを登録することで、特定arnが行った変更について、通知を除外する機能を有しています

Slack通知概要

slack-nortify2.png

タイトル

  • s3にバックアップしたConfig Stream本文へのハイパーリンク
  • アクセスするためには、事前にAWS環境へのログインが必要です

Action

  • 引き当てたCloudTrail Eventに記載されているAPI名

ResourceName

  • 引き当てたCloudTrail Eventに記載されているResource名

arn

  • 引き当てたCloudTrail Eventに記載されているUser Identifyに含まれるarn

EventID

  • 引き当てたCloudTrail Eventへのハイパーリンク
  • リンク先から、Config Timelineへのアクセスが可能
  • アクセスするためには、事前にAWS環境へのログインが必要です

利用上の注意

  • 本番ワークロードで利用する際は、状況に応じた改修やチューニングを必要とします
  • 単一AWSアカウント、単一リージョンでの利用を前提としています

ユースケース

  • 安定稼働している環境に対しての、人為的な変更作業を検出できるようにしたい
  • CloudFormationやTerraformなどのツールで利用しているIAM{ユーザー|ロール}以外での構成変更を検出できるようにしたい

構成するには

  • 構成パラメータは、こちらを参照してください

ざっくり構成

configuration-diagram.png

処理の概要

  1. Config Streamが変更情報をSNSに通知
  2. SNSがトピックをSQS(Dispache_SQS)にキューイング
  3. Cloudwatch Events(Time-Based)が一分間隔でLambda(Dispacher, Lookupper, SendSlack)を呼び出し
  4. Lambda(Dispacher)が、SQS(Dispache_SQS)からメッセージを読み出し
  5. Lambda(Dispacher)が、読みだしたメッセージをs3に保存
  6. Lambda(Dispacher)が、処理対象の情報が含まれているメッセージを、SQS(Lookup_SQS)にキューイング
  7. Lambda(Dispacher)が、読み込んだメッセージを削除
  8. Lambda(Lookupper)が、SQS(Lookup_SQS)からメッセージを読み出して、タイムスタンプとリソースタイプをキーにCloudTrailをLookupする
  9. Lookupの結果が取得できた場合、Lambda(Lookupper)が、処理対象の情報を選別し、通知に用いる情報を抽出/整形して、SQS(SendSlack_SQS)にキューイング
  10. Lookupの結果が空の場合、Lambda(Lookupper)が、SQS(Lookup_SQS_DL)にメッセージをキューイング
  11. Lambda(Lookupper)が、読み込んだメッセージを削除
  12. Lambda(SendSlack)が、SQS(SendSlack_SQS)からメッセージを読み出し
  13. Lambda(SendSlack)が、SlackのIncomming Webhookに投稿
  14. Slackのレスポンスが正常なら、Lambda(SendSlack)が、読み込んだメッセージを削除

Lookup_SQS_DLの処理

  1. Lambda(Lookupper)が、SQS(Lookup_SQS_DL)からメッセージを読み出して、タイムスタンプとリソースタイプをキーにCloudTrailをLookupする。
  2. Lookupの結果が取得できた場合、Lambda(Lookupper)が、処理対象の情報を選別し、通知に用いる情報を抽出/整形して、SQS(SendSlack_SQS)にキューイング
  3. Lookupの結果が空の場合、Lambda(Lookupper)が、ログに警告を書き出してメッセージを削除する
  4. Lambda(Lookupper)が、読み込んだメッセージを削除

manual-changes-detecter-poc's People

Stargazers

yuuzi avatar

Watchers

 avatar

manual-changes-detecter-poc's Issues

LookupperがCloudTrail Eventsを引当てられない場合、処理がループする

直接の原因

Cloud Trail Eventは、Lookupできるようになるまで数分〜十数分かかる
Lookupできるまでの対応として、LookupできなかったConfig StreamをLookup_SQS.fifoに書き戻している
このため、Config Stream内にconfigurationItemDiffが存在するが、Cloud Trail EventでLookupできないものは、ループする。

デバッグ用情報

"configurationItemCaptureTime": "2019-08-23T03:28:36.426Z",
"resourceType": "AWS::IAM::Policy",

対応方法

検討中

  • 案1:Dead Letter Queueに回して、30分後に再処理をかけて、ダメなら廃棄(または通知)
  • 案2:CloudTrail EventsをLookupする際の時間幅(configurationItemCaptureTime - 300s)を広げる

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.