Sumo Logic で AWS 環境の検知から自動対応までを行う
今回は、Sumo Logic を使って、AWS 環境の取り込んだログから検知して自動対応をやってみたいと思います。
To-be
こんな感じのことをやっていこうと思います。
検知する
Sumo Logic は AWS と親和性が高く、簡単なログ取り込みと可視化ができるように Out of Box(作り込みいらず)の仕組みが取り入れられています。
また、CrowdStrike の脅威インテリジェンスを Sumo Logic 内で無料で使えることができるので、生のログ情報から脅威と見られる証跡がないかリアルタイムに検知することもできます。
検知や分析の方法は様々ありますが、この CrowdStrike との連携での例を見ると、下記の App を使ってみたいと思います。
(CrowdStrike の脅威インテリジェンスとの連携は、こちらの App 以外でも他の App や自分で作成するクエリで全てのログに対して使うことができます。)
AWS Threat Intel (Threat Intel for AWS) をインストールした場合だと、脅威インテリジェンスを使った可視化も可能ですが、アラートのもととなるサーチ文が用意されているので、これを使います。
執筆時点だと3種類ありますが、それぞれ以下のような検知が可能です。
- Threats Associated with Accepted VPC Traffic Flow
- VPC フローログのログの許可された通信の内、高い信頼性で脅威と判定されたIPアドレスが含まれていた場合に結果を表示
- Threats Associated with CloudTrail Events
- CloudTrail のログに含まれるIPアドレスが高い信頼性で脅威と判定された場合に結果を表示
- Threats Associated with requesting Client - ELB
- ELB ログに含まれるIPアドレスが高い信頼性で脅威と判定された場合に結果を表示
下記は VPC フローログの例ですが、脅威に合致した情報がログ内に含まれていた場合は出力があります。
先に自動化アクションの設定を行う
次に Sumo Logic のアラート設定を行いたいところですが、設定手順的に先に自動化アクションを設定します。
AWS 側でEC2を停止する Lambda を作成する
Lambda が EC2 インスタンスを停止するための権限設定
IAM にアクセスして Lambda 用のポリシーを作成します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "ec2:Start*", "ec2:Stop*" ], "Resource": "*" } ] }
Lambda を信頼されたエンティティとしたロールを作成して、ポリシーをアタッチしました。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Sumo Logic から Lambda を実行するための権限設定
ユーザーにアタッチするポリシーを作成します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunctionUrl" ], "Resource": "arn:aws:lambda:*:*:function:*" } ] }
ユーザーを作成して、コンソールのアクセスは提供せずに先程のポリシーをアタッチします。
Lambda 関数を作成する
Lambda にアクセスして、関数を作成します。
コードは以下のような感じにしています。
権限は先程作成した Lambda 用のロールを設定します。
import boto3 region = 'ap-northeast-1' instances = 'i-0466442ee6a1bcc7d' ec2 = boto3.client('ec2', region_name=region) def lambda_handler(event, context): ec2.stop_instances(InstanceIds=instances) print('stopped your instances: ' + str(instances))
作成した Lambda 関数の設定で認証タイプAWS/IAMにして関数URLを生成します。
(Lambda の関数URLのかわりに API Gateway を作成してもOKです。)
この辺りの設定方法は下記も参考にできます。
Sumo Logic から Lambda への Webhook インテグレーション
Sumo Logic コンソールで Webhook インテグレーションの設定を行います。
Manage Data > Monitoring > Connections で 「+」ボタンで進みます。
AWS Lambda を選択。
名前を入力、URLには AWS で作成した Lambda 関数の関数URLを確認して入力します。
アクセスキーIDとアクセスキーは作成したIAMユーザーで生成したAPIアクセスキーを確認して設定します。
あとは、Alert Payload と Recovery Payload の値も含めてデフォルトの値で保存します。
アラートと、アラート発火時にアクションを起こすよう設定する
最初に確認した Out of Box のログサーチを使ってアラートの設定を行います。
サーチの右側にある三点リーダーをクリックするとメニューが出てくるので、「Save As」を選択します。
今回は下記のような頻度とアラートタイプを設定した Webhook にして設定を完了させました。
これで、脅威インテリジェンスとマッチしたログが出力されてきたら EC2 インスタンスが停止されます。
まとめ
このように、AWS のログを Sumo Logic に取り込むことで、Sumo Logic 内で使える CrowdStrike の脅威インテリジェンスを検知を行い、自動の復旧対処までを行う設定を行いました。
この他の検知パターンや復旧パターンを追加することで色々なセキュリティ運用が自動化できそうです。
ぜひセキュリティ運用の効率化や改善にご活用ください。