NTTドコモR&Dの技術ブログです。

Amazon Bedrock × Slackでセキュリティエンジニアを創ってみた

はじめに

社内のセキュリティ規定やマニュアルは膨大で、エンジニアが必要な情報を探すのに多くの時間がかかっていました。「このシステムにはどのセキュリティ対策が必要?」「この作業環境でこのツールを使っても大丈夫?」といった日々の疑問をすぐに質問でき、すぐに解答をもらえる仕組みがあれば、業務効率は大きく向上とセキュリティエンジニアの稼働削減が期待できます。

そこで、Amazon BedrockとRAG(Retrieval-Augmented Generation)技術を活用し、Slackから気軽に質問できる「AIセキュリティアシスタント」を構築しました。本記事では、その構築手順と実際の利用評価結果について簡単にご紹介します。

利用イメージ

前提条件

本システムの構築にあたり、以下の環境と知識を前提としています。

必要な環境・サービス

  • AWSアカウント: Amazon Bedrock、Lambda、S3などのサービスが利用可能なこと
  • Slackワークスペース: Bot作成権限があること
  • セキュリティ規定・マニュアル: PDF形式などのドキュメント群

必要な知識レベル

  • AWSの基本的なサービス(Lambda、S3など)の理解
  • RAG(Retrieval-Augmented Generation)の基本概念
  • Slack APIの基礎知識
  • Python(RAGの基本利用には必須ではないが、カスタム処理や精度向上のため活用可能)

利用するAWSサービス

  • Amazon Q developer application: Slackと連携した質問応答アプリケーション
  • AWS Lambda: リランキング処理と出典情報の整形
  • Amazon Bedrock: 基盤モデルを利用したAIアシスタント機能
  • Amazon S3: ドキュメントデータの保存
  • Amazon Bedrock Knowledge Base: RAGによるドキュメント検索機能
  • Amazon OpenSearch Serverless: ベクトルデータの保管・検索

システム構成

本システムは、Slackをインターフェースとし、Amazon Bedrockを中核としたRAGシステムで構成されています。

アーキテクチャ図

主要コンポーネント

1. ドキュメントストレージ(Amazon S3)

社内のセキュリティ規定、マニュアル、ガイドラインなどのPDFファイルを保存します。 ※S3内のドキュメントは手動更新が必要で、都度Knowledge Baseで同期する必要があります。

参考情報

2. RAG検索エンジン(Bedrock Knowledge Base)

ユーザーの質問に関連するドキュメントをベクトル検索で高速に取得します。単なるキーワード検索ではなく、意味的に関連する情報を抽出できるのが特徴です。

3. 質問処理アプリケーション(Amazon Q developer application)

Slackの専用チャンネルと連携し、質問を自動的に受信します。Slack Appの作成は不要で、Q developer applicationと専用チャンネルを紐付けるだけで利用可能です。

4. 回答最適化処理(AWS Lambda)

Lambda関数で以下の処理を実装しています。

1. ハイブリッド検索による網羅的な情報取得

  • ベクトル検索とキーワード検索を組み合わせた「ハイブリッド検索」を採用
  • より幅広い関連情報を漏れなく取得できるように工夫

2. Amazon Rerank 1.0による精度向上

  • Knowledge Baseで取得した検索結果を、BedrockのRerank APIで再評価
  • 20件の初期検索結果から、最も関連性の高い5件に絞り込み
  • 質問との関連性が高い情報だけを使うことで、回答の精度と簡潔性を向上

3. 詳細な出典情報の提供

  • ドキュメント名、ドキュメントタイプなど、メタデータから多角的に情報を抽出
  • 参照元のURL(S3パスやSharePointリンク等)も併せて提供
  • 利用者が「本当にその情報で正しいのか」を自分で確認できる仕組みを実現

出力詳細イメージ

これらの工夫により、RAGの回答精度が大幅に向上し、根拠も明確に示されるため、利用者の信頼性も高まりました。

5. 回答生成AI(Amazon Bedrock)

Lambda関数で最適化された検索結果を基に、Claude等の大規模言語モデルが自然な日本語で回答を生成します。根拠となるドキュメント情報とURLも併せて提示します。

6. Slackインターフェース

普段使っているSlackから直接質問できるため、新しいツールの学習コストがなく、即座に導入できます。

構築手順

システム構築は以下のステップで進めます。

ステップ1: ドキュメントの準備とアップロード

まず、社内のセキュリティ関連ドキュメントを収集し、S3バケットにアップロードします。

  1. S3バケットを作成(例: security-docs-bucket
  2. ドキュメント(例:word,pdf)をアップロード
  3. バケットポリシーでBedrock Knowledge Baseからのアクセスを許可

ステップ2: Amazon Bedrock Knowledge Baseの設定

Bedrock Knowledge Baseを作成し、ドキュメントをインデックス化します。

  1. AWSコンソールでBedrock Knowledge Baseを作成
  2. データソースとしてS3バケットを指定
  3. 埋め込みモデルを選択(例: Amazon Titan Embeddings)
  4. ベクトルデータベースを設定
  5. インデックス化を実行(ドキュメント量に応じて数分~数十分)

ステップ3: Lambda関数の作成(回答精度向上の工夫)

RAG精度向上のため、Lambda関数を実装します。lambdaを挟まずとも、RAGの構築は可能です。

実装する主要機能:

  1. ハイブリッド検索の設定

    • ベクトル検索とキーワード検索を組み合わせて、幅広く情報を取得
    • 初期検索では20件程度の候補を取得
  2. Amazon Rerank 1.0の適用

    • 取得した20件の検索結果を、質問との関連性で再評価
    • 最も関連性の高い上位5件に絞り込み
    • これにより、「ノイズ」となる情報を排除し、回答の精度を向上
  3. 出典情報の詳細な抽出と整形

    • ドキュメント名、ドキュメントタイプ、ページ番号を取得
    • 参照元URL(S3パスやSharePointリンク)を抽出
    • 利用者が元の資料を確認しやすいよう、構造化された形式で整形
  4. 最適化された情報でBedrock APIを呼び出し

    • リランキング後の高精度な5件をプロンプトに組み込む
    • Claude等のモデルで、根拠に基づいた正確な回答を生成

ステップ4: Amazon Q developer applicationとSlackの連携

Amazon Q developer applicationとSlackの専用チャンネルを連携します。

  1. AWS ConsoleでAmazon Q developer applicationを作成
  2. Slackワークスペースに専用チャンネルを作成
  3. Q developer applicationとSlackチャンネルを紐付け
  4. Lambda関数をQ developer applicationのアクションとして登録
  5. 動作確認用の質問を投稿してテスト

参考情報:

ステップ5: 動作確認とチューニング

実際に質問を投げて、回答の品質を確認します。

  • 回答精度の確認
  • レスポンス時間の確認(簡易的に体感で)
  • プロンプトの最適化

利用評価(オンライン評価)

構築したシステムを実際に社内エンジニア14名に利用してもらい、評価を実施しました。

評価方法

利用者には実際の業務で発生する質問を投げてもらい、以下の4つの観点で5段階評価を依頼しました。

  • 有用性: 回答が業務に役立つか
  • 根拠性: 回答に適切な根拠が示されているか
  • 簡潔性: 回答が分かりやすく簡潔か
  • 一貫性: 複数回質問しても一貫した回答が得られるか

評価結果サマリー

14件の評価から得られた平均スコアは以下の通りです。

評価項目 平均スコア
有用性 3.29
根拠性 3.93
簡潔性 4.29
一貫性 3.29

総合満足度の分布:

  • 良い: 6件(42.9%)
  • 普通: 5件(35.7%)
  • 悪い: 3件(21.4%)

評価結果の詳細分析

高評価だった事例

事例1: ドキュメント検索での活用

質問内容: 「DDoS対策についての対応フローが記載してあるドキュメントを教えてください」

評価: 有用性5、根拠性5、簡潔性5、一貫性4

利用者コメント: 「ドキュメントを探す目的であればとても優秀だと思います。DDoS対策の運用に関する骨子も作成してくれて驚きました。」

事例2: 監査ログに関する考え方の確認

質問内容: 「監査ログに関して正常時のログ出力の必要性について」

評価: 有用性5、根拠性5、簡潔性5、一貫性3

利用者コメント: 「自身の考え方の補強として利用したが、欲しい回答が得られた。書いていないことについても『こう考えられる』という回答が得られた点が良かった。」

事例3: 相談前の事前確認

質問内容: 「カテゴリ2環境に該当する仮想デスクトップに、OSSツールをインストールするのはセキュリティ要件上問題ないか」

評価: 有用性4、根拠性3、簡潔性4、一貫性3

利用者コメント: 「誰かに聞く前にまずAIアシスタントで確認し、教えてくれた根拠を添えて誰かに相談するという使い方ができて便利だと感じました。」

改善が必要だった事例

事例4: 具体例の提示が不十分

質問内容: 「情報管理区分の秘密度についての概要と具体例」

評価: 有用性1、根拠性5、簡潔性4、一貫性2

利用者コメント: 「参照してくれたマニュアルは正しかったが、秘密度それぞれの具体例を上手く回答してもらえなかった。表形式で記載されている箇所などが上手く情報として取り込まれていないのではないか。」

事例5: 適用範囲外の質問でのハルシネーション

質問内容: 「AWS環境にAPI GatewayやLambdaといったリソースを作成する際に気を付けること」

評価: 有用性1、根拠性1、簡潔性3、一貫性3

利用者コメント: 「利用できないユースケースではハルシネーションが発生し、誤った認識になるリスクがある。利用できないユースケースについて注意事項としてまとめていただくと効果的。」

主要なインサイト

評価を通じて得られた重要な知見をまとめます。

1. 分からないことを素早く解消(簡潔性4.29/5.0)

技術文書検索における課題は「正しい情報を探すのに時間がかかる」こと。本システムは、Bedrockのリランキング機能で関連性の低い情報を除外することで、欲しい情報だけを端的に提示することが実現できました。

2. 「事実確認型」の質問で真価を発揮

「DDoS対策のドキュメントは?」「監査ログの要件は?」といった事実確認型の質問で特に高スコアとなりました。一方、「具体例を教えて」という抽象的な質問では精度が低下。RAGシステムは「書かれていない情報の推論」に限界があることを示しています。

3. 組織内の「暗黙知の可視化」効果

「相談前の事前確認」という使い方が浸透したことで、これまで口頭でやり取りされていた知識が、検索可能な形で残る副次効果が生まれました。

4. ハルシネーション防止には「知識境界の明示」が必須

AWS構成の質問でハルシネーションが発生した事例から、「この質問はマニュアルの範囲外です」という明示的な応答をするなどのガードレールが必要です。

まとめ

Amazon BedrockとSlackを組み合わせたAIセキュリティアシスタントの構築により、以下の効果が得られました。

得られた成果

  • 情報検索時間の大幅な短縮: 膨大なマニュアルから必要な情報を数秒で取得
  • 高い簡潔性: 4.29/5.0の評価で、分かりやすい回答を実現
  • 相談前の事前確認ツールとしての活用: 根拠を示してくれるため、セキュリティエンジニアへの相談もスムーズに
  • 誰でも使いやすい: ドコモ社内ではSlackをコミュニケーションツールとして多用しているため、新しいツールの学習や導入コストが不要

今後の展望(野望)

  • Amazon Bedrock Knowledge Baseに利用しているベクトルDB(Open Search Serverless)は保存するデータ量に依存して月数万円のコストがかかるためPoC利用については注意が必要です。今後は東京リージョンにS3 Vector等コスパの良いサービスがGAした際には移行予定です。
  • 現在は利用者が私の担当周りのメンバー(社外含)に限られている状態のため、コストと運用が度外視できれば全社展開が理想ですがバランスとって展開進めていきます。

最後に

本仕組みは、セキュリティ分野以外への展開も可能です。例えば、開発ガイドライン、運用マニュアル、障害対応手順書など、様々な社内ドキュメントに適用できます。

Amazon Bedrockは、マネージドサービスとして基盤モデルを簡単に利用でき、RAG機能も統合されているため、このようなシステムを迅速に誰でも構築できます。社内ドキュメントの活用に課題を感じている方は、ぜひ検討してみてください。