【入門編】 AWS CloudTrailとGuardDutyによる異常検知とインシデント対応 – 暗号理論・認証基盤 & エンドポイントセキュリティ防御ガイド

こんにちは!セキュリティの世界へようこそ。
新人のIT担当者や、これからクラウドインフラに触れる開発者の皆さん、「セキュリティ対策」って聞くと、何だか難しそうだな…って身構えてしまいますよね。

大丈夫です。一歩ずつ、身近な例えから紐解いていきましょう!

今回は、クラウド(AWS)の世界で私たちのシステムを守る「AWS CloudTrail(クラウドトレイル)」と「Amazon GuardDuty(ガードデューティ)」という、とっても頼もしい2人の「警備員コンビ」についてお話しします。

—

1. 家の防犯に例えて理解する「CloudTrail」と「GuardDuty」

まずは、私たちが普段暮らしている「家」を想像してみてください。

皆さんは、自宅の玄関に鍵(共通鍵や公開鍵などの暗号技術)をかけますよね。でも、頑丈な鍵をかけただけで安心していませんか? 熟練の空き巣は、あらゆる手口で鍵を開けようとしたり、窓ガラスを破ったりして侵入してきます。

ここで重要になるのが、「誰が、いつ、どこから家に出入りしたか」の記録です。

CloudTrailは「防犯カメラと出入り管理ノート」

AWSの世界では、サーバーやデータベースに対する「誰がどの操作をしたか(API呼び出し)」というすべての動きが記録されます。これが AWS CloudTrail です。
「午前3時に、海外のIPアドレスから、金庫(データベース)の鍵が開けられた」といった履歴を、一言一句漏らさずノートに書き留めてくれる防犯カメラのような存在ですね。

GuardDutyは「怪しい動きを察知する優秀な警備員」

ただ、CloudTrailが記録するノートは膨大です。人間の目で24時間ずっと監視するのは、正直不可能ですよね。そこで登場するのが Amazon GuardDuty です。
GuardDutyは、AWSの膨大なログをAIと最新の脅威インテリジェンス(世界中のサイバー攻撃のデータベース)で常に監視し、「おい、今の動き、絶対に泥棒のやり方だぞ!」と異常を検知して警報を鳴らしてくれる優秀な警備員なんです。

—

2. 攻撃者はどこを狙う? 実録・よくあるクラウドの油断

現場のインシデント(事故)対応で本当によくあるのが、「開発者のうっかりミスによる認証情報の漏洩」です。

例えば、テスト用に作ったプログラムの中に、AWSの合言葉である「アクセスキー」を書き込んだまま、うっかりGitHubなどの公開リポジトリにアップロードしてしまうケースです。

攻撃者は、世界中で常にボット(自動プログラム)を走らせて、インターネット上に公開されたソースコードからこの合言葉を探しています。合言葉を見つけた瞬間、攻撃者はあなたのAWS環境にこっそり侵入し、勝手に高額な仮想通貨マイニング用のサーバーを何台も立ち上げてしまいます。

気づいた時には、翌月に数百万円の請求書が届いている……なんて笑えない話が、実際にゴロゴロ転がっているんです。

こうした脅威をいかに早く見つけ、被害を最小限に食い止めるかが、私たちエンジニアの腕の見せ所になりますよね。

—

3. 自動検知・通知フローの構築をしてみよう!

それでは、GuardDutyが怪しい動きを検知したときに、Slackなどのチャットツールへ自動でアラートを飛ばす仕組みを、実際に作ってみましょう!

全体の流れとしては以下のようになります。
1. Amazon GuardDuty が怪しい振る舞いを検知する
2. Amazon EventBridge(イベントの橋渡し役)がその警報を受け取る
3. AWS Lambda(プログラムを実行する仕組み)に通知を投げる
4. Lambda が加工して Slack にメッセージを送信する

ステップ1:通知用のLambda関数を作成する

まずは、警報を受け取ってSlackにメッセージを届けるためのPythonコード(Lambda用)を見てみましょう。小難しい設定は置いておいて、「こういうコードで動くんだな」と雰囲気を掴んでみてくださいね。

import json
import urllib.request
import os

# SlackのWebhook URL(環境変数から安全に呼び出します)
SLACK_WEBHOOK_URL = os.environ['SLACK_WEBHOOK_URL']

def lambda_handler(event, context):
    # GuardDutyから飛んできたイベントの中身を取り出します
    detail = event.get('detail', {})
    title = detail.get('title', 'GuardDutyからのアラート')
    description = detail.get('description', '不審なアクティビティが検知されました。')
    severity = detail.get('severity', 0)
    
    # 緊急度(Severity)に応じて色やメッセージを調整すると親切ですね
    color = "danger" if severity >= 7.0 else "warning"
    
    # Slackに送るメッセージの組み立て
    slack_message = {
        "attachments": [
            {
                "color": color,
                "title": f"🚨 [GuardDuty検知] {title}",
                "text": description,
                "fields": [
                    {
                        "title": "緊急度レベル",
                        "value": str(severity),
                        "short": True
                    }
                ],
                "footer": "AWS Security Automation"
            }
        ]
    }
    
    # SlackへHTTPリクエストを送信
    req = urllib.request.Request(
        SLACK_WEBHOOK_URL,
        data=json.dumps(slack_message).encode('utf-8'),
        headers={'Content-Type': 'application/json'}
    )
    
    try:
        with urllib.request.urlopen(req) as response:
            res_body = response.read()
        print("Slackへの通知が成功しました:", res_body.decode('utf-8'))
    except Exception as e:
        print(f"エラー: Slackへの通知に失敗しました: {e}")
        raise e

ステップ2:EventBridgeでルールを設定する

次に、GuardDutyが発したアラートを、先ほどのLambda関数にバトンタッチするための設定を行います。

AWSマネジメントコンソールから「Amazon EventBridge」を開き、ルールを作成します。

  • イベントパターン: 「AWSサービス」 -> 「GuardDuty」 -> 「GuardDuty Finding」を指定します。
  • ターゲット: 先ほど作成したLambda関数を指定します。

たったこれだけで、GuardDutyが驚異を検知した瞬間に、数秒であなたのチャットに通知が飛ぶ仕組みが完成します!

—

4. インシデント発生時の初動対応(泥臭い実務の知恵)

もし、Slackに「海外からの不審なアクセス」や「ブルートフォース攻撃の検知」といったアラートが飛んできた時、パニックになってはいけません。現場のエンジニアとして、冷静に以下の「3つのステップ」で初動対応を行いましょう。

1. アクセスキーの無効化(即座に鍵を替える)
怪しい動きをしているユーザーや、漏洩した可能性のある アクセスキー(Access Key IDなど)を、迷わず即座に「無効化(Inactive)」または「削除」します。システムを止めるのではなく、泥棒の合言葉だけを無効にするイメージです。
2. CloudTrailで足取りを追う
CloudTrailのログを開き、その合言葉を使って攻撃者が「どのリソース(EC2、S3バケットなど)に触ったか」を徹底的に洗い出します。「データを盗まれていないか」「勝手に怪しいプログラムを動かされていないか」を確認する一番重要な作業です。
3. パスワードやシークレットのローテーション
関連するすべての認証情報を作り直し、安全な状態に戻します。

—

まとめ:セキュリティは「完璧」より「早期発見とリカバリ」

いかがでしたでしょうか?
今回は、CloudTrailとGuardDutyを使った異常検知の仕組みと、インシデント対応の基礎を解説しました。

セキュリティの世界では、「100%絶対に侵入されないシステム」を作ることは不可能です。だからこそ、「侵入されてもすぐに気づき(GuardDuty)、足跡をたどり(CloudTrail)、被害を最小限に食い止める仕組み」をあらかじめ作っておくことが何よりも大切になります。

難しく考えず、まずはご自身のAWS環境でGuardDutyを「ポチッと有効化」してみることから始めてみませんか?
一歩ずつ、安全で強いシステムを一緒に作っていきましょう!

コメント

タイトルとURLをコピーしました