PR

【AWSセキュリティ】WAFとGuardDutyで固めるサーバーレスSaaSの多層防御アーキテクチャ

はじめに:サーバーレスSaaSは「何もしなくても安全」ではない

「サーバーレスだからインフラ管理は不要。つまりセキュリティもAWS任せで大丈夫」。これは、サーバーレス開発者が陥りがちな、最も危険な誤解の一つです。

確かに、AWSは基盤となるインフラのセキュリティに責任を持ちます。しかし、その上で動作するアプリケーション、データ、そしてIAM権限のセキュリティに責任を負うのは、まぎれもなく私たち開発者自身です。

特に、不特定多数のテナントからのアクセスを受け付けるSaaSアプリケーションは、常に悪意のある攻撃者の標的となります。イベントインジェクション、脆弱な依存関係、過剰なIAM権限といった、サーバーレス特有の攻撃ベクターから、あなたのビジネスと顧客データをどう守りますか?

この記事では、AWSが提供する2つの強力なセキュリティサービス、AWS WAFAmazon GuardDutyを組み合わせ、サーバーレスSaaSのための「多層防御」アーキテクチャを構築する方法を徹底解説します。WAFによる「入り口対策」とGuardDutyによる「内部対策」を組み合わせることで、あなたのSaaSを鉄壁の要塞に変えることができます。

第1防御層:AWS WAFによる「境界防御」

AWS WAF (Web Application Firewall) は、あなたのSaaSアプリケーションの「門番」です。API GatewayやCloudFrontといったエッジサービスの最前線に立ち、悪意のあるWebリクエストがバックエンドのLambda関数に到達する前にブロックします。

実装パターン

  1. AWSマネージドルールの活用(必須): まずは、AWSが提供・更新しているマネージドルールセットを有効にしましょう。特に以下の2つは、あらゆるWebアプリケーションにとって必須です。

    • Core rule set (CRS): OWASP Top 10にリストされているような、SQLインジェクションやクロスサイトスクリプティング(XSS)といった最も一般的で危険な攻撃をブロックします。
    • Known bad inputs rule set: 脆弱性を悪用することが知られている、不正な入力パターンをブロックします。
  2. レートベースルールの設定: 「同一IPアドレスから5分以内に100回以上のリクエストがあったらブロックする」といったルールを設定します。これにより、パスワードクラックを狙うブルートフォース攻撃や、小規模なDoS攻撃を自動的に緩和できます。

  3. カスタムルールの作成: あなたのSaaSの仕様に合わせて、独自のルールを定義します。例えば、「/adminエンドポイントには、社内IPからしかアクセスを許可しない」といった地理的・IPベースの制限が可能です。

テナント別考慮: テナントごとに異なるIP制限をかけたい場合、リクエストヘッダーにテナントIDを含め、WAFルールでそのヘッダーの値を評価することで、テナント固有のアクセス制御を実現できます。

第2防御層:Amazon GuardDutyによる「内部脅威検知」

もしWAFをすり抜けた攻撃によってLambda関数が侵害されてしまったら?GuardDuty Lambda Protectionは、その「万が一」を検知する、内部の監視カメラです。

Lambda Protectionの有効化

GuardDutyの設定画面から「Lambda Protection」を有効化するだけ。たったこれだけで、アカウント内の全てのLambda関数のネットワークアクティビティログの監視が自動で開始されます。既存の関数に一切変更を加える必要はありません。

検知できる脅威の例

GuardDutyは、侵害されたLambda関数が起こす、以下のような異常な振る舞いを機械学習で検知します。

  • C&Cサーバーとの通信: Lambda関数が、マルウェアの指令サーバー(C&Cサーバー)として知られる悪意のあるIPアドレスと通信を開始した。
  • 仮想通貨マイニング: Lambda関数が、そのコンピューティングリソースを不正に利用して仮想通貨のマイニングを行っている。
  • Torネットワークへの接続: Lambda関数が、匿名化ネットワークであるTorへの接続を試みている。
  • データの窃取: Lambda関数が、普段通信することのない、疑わしい外部IPアドレスに対して大量のデータを送信している。

アーキテクチャ:WAFとGuardDutyを組み合わせた多層防御

これら2つのサービスを組み合わせることで、プロアクティブな多層防御アーキテクチャが完成します。

graph TD
    A[攻撃者] -->|悪意のあるリクエスト| B{AWS WAF}
    B -- ブロック --> C[X]
    B -- 許可 --> D{API Gateway}
    D --> E[Lambda関数]
    E -- 異常な振る舞い --> F((Amazon GuardDuty))
    F -- 脅威を検知 --> G{Amazon EventBridge}
    G --> H{Lambda: 自動修復}
    H --> I[攻撃元IPをWAFの<br>IPセットに自動追加]
    H --> J[Slack/PagerDutyへ<br>アラート通知]

インシデント対応フローの自動化

  1. 検知: GuardDutyがLambdaの異常な振る舞いを検知し、その結果をEventBridgeにイベントとして送信します。
  2. トリガー: EventBridgeのルールがこのイベントをフィルタリングし、特定のLambda関数(自動修復関数)をトリガーします。
  3. 自動修復と通知: トリガーされたLambda関数が、GuardDutyの検出結果から攻撃元のIPアドレスを抽出し、そのIPをWAFのIPブロックリスト(IP set)に自動で追加します。これにより、同じ攻撃元からの以降のアクセスはWAFレベルで即座にブロックされます。同時に、運用チームへSlackやPagerDutyでアラートを通知します。

まとめ:プロアクティブな防御で、信頼されるSaaSを構築する

サーバーレスSaaSのセキュリティは、単一の防御策に依存するべきではありません。

  • AWS WAFは、既知の攻撃パターンを入り口で防ぐ「城壁」です。
  • Amazon GuardDutyは、城壁を突破した、あるいは内部から発生した未知の脅威を捉える「監視カメラ」です。

そして、EventBridgeとLambdaを組み合わせることで、脅威の検知から防御(ブロック)までを自動化する「インテリジェントな防衛システム」を構築できます。このプロアクティブな多層防御アーキテクチャこそが、顧客からの信頼を勝ち取り、スケーラブルで安全なSaaSを運用するための鍵となるのです。

コメント

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