Amazon BedrockとAmazon Kendraを使って、セキュリティチェックシートの記入の一部を自動化した話

--

SRE Unitの若松です。今回はAmazon BedrockとAmazon Kendraを使って、セキュリティチェックシートの記入の一部を自動化した話を紹介します。

セキュリティチェックシートとは

セキュリティチェックシートとは、サービス導入のためのセキュリティ要件を満たしているかをチェックするシートのことです。

セキュリティチェックシートの質問項目に回答していき、サービス導入の基準をクリアすることで、サービス導入に入ることができます。

このセキュリティチェックシートは、サービスの提供会社側で記載するケースが多く、弊社も多数のセキュリティチェックシートをお客様から受領して記載しています。

セキュリティチェックシート記載のフロー

弊社では、セキュリティチェックシートをお客様と直接のコミュニケーションを担っているビジネス部門が一次記入を行い、その後に開発部門と管理部門で一次記入の回答のチェックと一次記入で記載することができなかった部分の記入を行います。

弊社ビジネス部門が一次記入をする際には、弊社サービスTeachme Bizのヘルプセンターを参照しながら、記入を行っています。

このヘルプセンターでは、Teachme Bizの使い方だけでなく、弊社のセキュリティ対策についての記事も公開しています。セキュリティ対策についての記事は、セキュリティチェックシートでよくご質問いただく内容に対する回答を記載しています。

今回自動化する部分

弊社ビジネス部門がヘルプセンターを参照しながら一次記入を行っている部分は自動化できるのではないかと考え、一次記入の自動化を検討することにしました。

自動記入のフロー

結論から先にお話しすると、セキュリティチェックシートの一次記入は、以下のフローで自動化することにしました。

まず、弊社ビジネス部門がSlackのスラッシュコマンドを実行して、モーダルウインドウでスプレッドシートのURL、シート名、質問項目の範囲、回答項目の範囲を入力します。

入力された内容を元に、AWS上で処理が行われて、スプレッドシートに回答が記入されます。回答の記入が終わった後に、弊社ビジネス部門にSlack上で通知が行われます。

Slack上で入力する構成にした理由は、弊社では全従業員が日常的にSlackを使うため、利用のハードルを下げられると考えたからです。Slackからスプレッドシートの情報を渡す部分は、利用のハードルが低いものに置き換えもらって構いません。

事前準備

ここからは上記フローを実現する方法について解説します。

まずは、事前準備です。

弊社ヘルプセンターはZendeskのヘルプセンターの機能を使って公開しています。そのため、Amazon KendraのZendeskコネクターを使って、Zendesk上の記事をAmazon Kendraのインデックスのドキュメントとして登録しておきます。

処理の内容

次に、具体的な処理の内容について解説します。処理の流れは以下の通りです。

  1. Slackからリクエストを投げて、API Gateway経由でLambdaがリクエストを受け付けて、モーダルウインドウを表示するレスポンスを返す。
  2. モーダルウインドウからの入力をLambdaが受け取ったら、Googleスプレッドシートから質問項目を全て取得。
  3. Amazon Bedrockに質問内容を要約させる。
  4. Amazon Kendraで検索を実施。
  5. Amazon Kendraの検索でヒットした記事の全文をZendeskに取得しにいく。
  6. Amazon Bedrockに質問項目に対して、ヘルプセンターの記事内容が適切かチェックしてもらう。
  7. スプレッドシートに回答を書き込む。
  8. Slackに完了の通知を行う。

一つずつ解説していきます。

Slackからリクエストを投げて、API Gateway経由でLambdaがリクエストを受け付けて、モーダルウインドウを表示するレスポンスを返す。

まず、SlackのスラッシュコマンドのリクエストをAPI Gateway経由でLambdaが受けて、モーダルウインドウを表示するレスポンスを返します。

モーダルウインドウからの入力をLambdaが受け取ったら、Googleスプレッドシートから質問項目を全て取得。

モーダルウインドウからの入力を受け取ったら、Googleスプレッドシートから質問項目を取得します。

Amazon Bedrockに質問内容を要約させる。

次に、質問項目の内容をAmazon Bedrockに要約させます。これはセキュリティチェックシートの質問の文章が長い場合が多く、Amazon Kendraのクエリとしてそのまま利用できないケースが多いためです。質問の文章をそのまま検索クエリとしてAmazon Kendraに投げると、検索精度が落ちてしまいます。

Amazon Kendraで検索を実施。

質問項目の要約が終わった後は、Amazon Kendraに検索のクエリを投げます。検索結果から該当するヘルプセンターの記事のIDを取得します。検索でヒットする記事がなければ、空の値にしておきます。

また、Amazon Kendraのレスポンスには、ScoreConfidenceという検索結果の自信の度合いを表すパラメーターがあります。こちらのパラメーターでLOWのものは検索クエリにマッチしてないドキュメントである可能性が高いため、ヒットする記事が無かった扱いにして、空の値にしておきます。

Amazon Kendraの検索でヒットした記事の全文をZendeskに取得しにいく。

Amazon Kendraでの検索結果を元に、Zendeskにヘルプセンターの記事の全文を取得しにいきます。というのも、Amazon Kendraの検索結果では、query APIで100トークン、retrieve APIで200トークンまでしかドキュメントの内容を取得することができません。

そのため、ヘルプセンターの記事のIDを元に、Zendesk APIを使って、ヘルプセンターの記事の全文を取得しにいきます。

Amazon Bedrockに質問項目に対して、ヘルプセンターの記事内容が適切かチェックしてもらう。

ヘルプセンターの記事の全文を取得した後は、質問項目に対して、ヘルプセンターの記事の内容が適切かどうかを、Amazon Bedrockにチェックしてもらいます。

この処理を行う理由としては、質問項目に対して、ヘルプセンターの記事内容が適切かどうかのチェックをAmazon Bedrockに行わせた方がより回答精度が上がるためです。特に誤った回答はかなり減らすことができます。

スプレッドシートに回答を書き込む。

Amazon Bedrockのチェックをパスしたヘルプセンターの記事をスプレッドシートの回答範囲に書き込みます。

Slackに完了の通知を行う。

完了通知をSlackに投げます。

まとめ

今回はAmazon BedrockとAmazon Kendraを使って、セキュリティチェックシートの記入の一部を自動化した話を紹介しました。

検証にかなり時間を要しましたが、実際に利用してもらった弊社ビジネス部門のメンバーから「それにしてもこれべらぼうに便利ですね!」とコメントをもらえており、時間をかけた価値は十分あったと思っています。

この記事がセキュリティチェックシートの記入を少しでも自動化したいと考えている方の参考になればと思います。

We’re hiring!

スタディストでは、一緒に働く仲間を募集しています。

EntranceBookはこちらをご参照ください。

採用情報はこちらをご参照ください。

--

--