AI

ISMAP言明書(≒セキュリティチェックシート)をChatGPTに書かせる by Prompt Flow

セキュリティチームの ぐっちー です。年末年始に時間があったので、Azure AI Stuido の Prompt Flow という機能を使って、ChatGPT(Azure OpenAI)にISMAPの言明書(≒セキュリティチェックシート)を書かせる実験をして遊んでみました。※ 先に言っておきますが対処療法です。ニーズはあまりなさそうですが、冬休みの自由研究的な意味で作りました。

ご注意
  • 本ブログの内容は2024年1月11日時点までの情報を元に作成しております。
  • 本ブログの内容は個人の見解・感想に基づくものです。統計的な調査に基づくものではありません。
  • Azure AI StudioのPrompt Flowは本書執筆時点ではプレビュー中です。

ISMAPとは何なのか?

ISMAP(イスマップ)は「政府情報システムのためのセキュリティ評価制度(Information system Security Management and Assessment Program)」の略称です。政府調達の対象となるクラウドサービスは、第三者の監査を経て本制度が公表する「ISMAPクラウドサービスリスト」に登録されたものに限定されることになる見通しです。

ISMAPが出来上がった背景には、2018年に掲げられた「クラウド・バイ・デフォルト原則」があります。これにより、政府情報システムはクラウドサービスの利用が第一候補として検討されることとなりました。1一方でクラウドサービス利用においてはオンプレミスのシステムとは異なった観点でのセキュリティが必要です。そこで、統一的な枠組みを設けることで、円滑な導入と高いセキュリティ水準を両立することを目指してISMAPは生まれました。

ISMAPは何が辛いのか?

上記のように素晴らしい理念の下に設立されたISMAPですが、クラウドサービス事業者(CSP)の目線に立つと、厳しい制度であると言うのが実情です。ISMAPの厳しさに関しては何万字でも語れてしまうので、多くは割愛しますが、大きなポイントとしては「監査項目の多さ」と「監査のきめ細かさ」にあると思っています。

まず、「監査項目の多さ」は単純ですごく伝わりやすいかと思います。ISMAPの管理策は約1300あり、他のセキュリティ認証や規格等とは一線を画す物量となっています。一方、「監査のきめ細かさ」は伝わりにくいのですが、「ISMAP 標準監査手続」と言う書類がISMAPのポータルページで公開されているので、それを読むと緩く伝わると思います。とにかく細かさがISMS・Pマークの比じゃありません。そして、この2つがISMAPの登録工数、運用工数、そして取得費用に大きく跳ねてきます。

そんな厳しい条件も相まってか、ISMAPクラウドサービスリスト2に掲載されているクラウドサービスは日系の超大手や外資系のクラウドサービスがほとんどであり、ベンチャーのサービスが入る余地はあまりありません。

「言明書」の作成をAIにやらせてみる

前述の通り、ISMAPは非常に監査項目が多いですが、 ISMAPの監査を受ける際には、その監査項目ごとに自社での取り組み状況を「言明書_別添2(以下、言明書)」という書類に記載します。「言明書」は聞きなれない言葉かもしれませんが、雑に説明すると「1300行のセキュリティチェックシート」だと思っていただけたらいいかと思います。言明書はISMAPポータルから取り寄せができますが、指定の規格を購入していることを前提なので実質有料(数万程度)です。

言明書の記入サンプル。これを採用する管理策分(1000項目近く!?)埋めなければなりません。

今回の検証では、 この言明書の作成をChatGPT(Azure OpenAI)にやらせてみました。 実装においては、Azure AI StudioのPrompt Flowと言うAIアプリケーションの開発サービスを使って実装しています。 流れは非常にシンプルで以下のフローです。

事前準備として、 Azure AI Search に自社の規定の内容を使ったベクトルデータベースを作成しておきます。 ベクトルデータベースの作成については今回のブログでは割愛しますが、別ブログで書いていたりするので、そちらをご覧いただけたら幸いです。

次に本格的なフローの流れについて解説します、[input] ではISMAPの管理策(要件)を受け取ります。すると、次のプロセスでは、アジュール愛サーチに類似する項目がないかの検索を書きに行きます。 検索手法については、マイクロソフトのプラットフォームの中では最も検索精度が良いと言われている「ベクトル・セマンティックハイブリット検索」を採用しています。

from promptflow import tool

@tool
def my_python_tool(kanrisaku: str) -> str:
    import requests
    import json
    
    url = "<Azure AI Search Endpoint>"
    keys = "<Azure AI Search Key>"
    
    headers = {
        'Content-Type': 'application/json',
        'api-key': f'{keys}'
    }
    
    json_data = {
        "vectorQueries": [
            {
                "kind": "text",
                "text": f"{kanrisaku}",
                "k": 50,
                "fields": "embedding"
            }
        ],
        "search": f"{kanrisaku}",
        "select": "document_title,document_contents",
        "queryType": "semantic",
        "semanticConfiguration": "<semanticConfiguration>",
        "captions": "extractive",
        "answers": "extractive",
        "top": "50"
    }
        
    response = requests.post(url, headers=headers, json=json_data)
    response_data = response.json()
    
    first_item = response_data["value"][0]

    document_title = first_item["document_title"]
    document_contents = first_item["document_contents"]
    
    return {
        "document_title":f"{document_title}" ,
        "document_contents":f"{document_contents}"
    }

このシステムはエンドユーザーに提供したりする想定はないため、エラー処理とかは特にしてません。最後に、類似する規定を受けの項目を受け取ったら、それをもとにChatGPT(Azure OpenAI)が言明書に記載する内容を作成し [output] を返します。

完成したものをテストする

ISMAP管理策の全量は、引用しているJIS規格の著作権等々の関係でISMAPのポータルサイト上で公開されていません。なので、今回のテストではISMAPのポータルサイトや付随する文書上で公開されている管理策のみに対象を絞ってテスト結果を共有します。まずは、以下の項目をインプットして結果を見ます。

4.5.1.1 組織は、情報セキュリティマネジメントの確立、実施、維持及び継続的改善に必要な資源を決定し、提供する。[27001-7.1]管理目的を満たすためには、継続的に管理策を実施するとともに、人員の増加、システムの増加などの環境の変化に対応するために、適切な時期に適切に提供できるよう、経営資源を確保する。

引用:政府情報システムのためのセキュリティ評価制度(ISMAP)管理基準3

出力を Azure AI Studio の Prompt Flow で確認すると以下のようになります。

「ISMSマニュアル 4.4 情報セキュリティマネジメントシステム」に定める通り、当社は情報セキュリティマネジメントの確立、実施、維持及び継続的改善に必要な資源を決定し、提供しています。また、継続的に管理策を実施するとともに、適切な時期に適切に経営資源を確保できるようにしています。

Prompt Flow(Azure OpenAI+Azure AI Search)で生成

評価:新卒の子よりはいいアウトプット?

生成AIを評価することは「何を持って評価するか?」が難しいですが、 今回のケースではISMAP監査(ISMAPクラウドリスト掲載の審査)を数社通したり、付随するプロジェクトマネジメントやメンバーの成果物RVの経験のある筆者が独断と偏見で評価します。

まず、今回のアウトプットに関しては、 そのまま監査法人に出して監査できる水準のものではありません。しかしながら、GPT-4を利用した場合は「ISMS・Pマークコンサルタント2-4年目の方(メンバーレベル)」にお願いするのと同等のアプトプットが出せそうだという筆者主観です

参考

「ISMS・Pマークコンサルタント2-4年目の方」と言っても、個人毎に能力差はあると思いますが、筆者の経験に基づくイメージです。ツッコミどころ満載なのは自覚していますが、そんなにツッコまないでいただけたら幸いです。

「ISMS・Pマークコンサルタント1年目の方」だと、そもそもISMAPの管理基準(1300項目)に記載されていることが何を意味するかの理解が追いつかないので比較になりません。ISMAPの管理基準は日本語的に難解なので、「そもそも読むところ」にハードルがあります。そのため、比較対象を2-4年目の方としました。この時点で新卒1年目の子を軽く凌駕する結果です。

当然、ハルシネーション(幻覚・でっちあげ)を起こしそうな時もあります。GPT-4は非常に賢いですが、アウトプットの生成以前の検索部分で欲しい情報を拾って来れないケースがいくつかあり、検索で失敗した際には見当違いの回答をしてました。ただ、検索が成功しているケースでは、少し手直しすれば監査を受けられる水準のアウトプットがでてきており、「ISMS・Pマークコンサルタント2-4年目の方」と同等なアウトプットができるかと評価しました。人間のコンサルタントもミスを犯したりサボったりするので「エラーの傾向が変わったな」という印象ではあります。

今回のシステムのアウトプット(スクショに関しては、Web公開されている管理策に限る)

当然だがISMAPに準ずる規定がある前提だし、ISMAPの辛いところは「言明書」だけじゃないで!

当然ではありますが、この仕組みはISMAPに準ずる規定(運用)がある前提です。ISMAPに準ずる規定(運用)が準備できていない場合は、それを整備するところから始めないといけません。ちなみに、ISMAPの管理基準はJIS 27001、27002、27014、27017、政府統一基準(一部)、NIST SP800-171(一部)の内容で構成されているため、そもそもの整備状況がままならない企業の方が多い気がします。

また、今回は「言明書作成」にフォーカスを当てたソリューションを作ってみました。しかしながら、ISMAPの辛いところは「言明書作成」だけではなく、あくまで1つの要素にすぎません。大変なのは、ISMAP管理基準に基づいて構築したセキュリティの運用部分などであり、大変なところからアプローチしないと根本対処になりません。そう言った意味では、このソリューションは対処療法に過ぎないと考えています。

セキュリティチェックシートの記入にも使えそう?

言明書別添2はセキュリティチェックシートのようなものであり、今回作った仕組みは、セキュリティチェックシートの記入にも使えそうではあります。ただ、セキュリティチェックシートは企業毎に様々なフォーマットがあり、それに対応するには都度システム改修が必要となる可能性があるため、あまりにも分量が多いとかではない限り、費用対効果を出せないかと思います。そもそも、セキュリティチェックシートを送りつける風習自体にも課題が多いかと思うので、これも対処療法にしかならないかと思います。

余談:Prompt Flowは便利!

今回のシステムはPrompt Flowを使って構築しています。Prompt Flow は、Azure AI Studio と Azure Machine Learning に組み込まれた生成AIアプリケーションの開発サイクル(構築・テスト・運用)全体を合理化するために設計された総合開発ツールです。4 個人的にPrompt Flowが気に入っている部分を何点か紹介します。

トレース

生成AI搭載のアプリは一般のアプリに比べて遅い傾向があります。これは生成AI自体(特にGPT-4)のレスポンスが遅いことが主たる要因で、ごく当たり前の話ではありますが、あまりにも遅いとユーザー体験の質が落ち、使ってもらえなくなる懸念があります。そこで、Prompt Flowでは書くフローの実行時間をトレースし、分析に活かすような機能も搭載しています。

ユーザーからの質問に対して、英語の検索キーワードに変換し、Web検索をかけ、Web検索結果を整形し、Web検索結果と質問をChatGPTに投げ、回答を生成し、日本語に翻訳するフローのトレースログ

バリアント(ABテスト)

生成AIの検証をやっていると、「このモデルではどうか?」とか「このプロンプトだと結果はどうなる?」というような観点で、検証に検証を重ねるケースが多いと思います。それを支援してくれるのが「バリアント」です。1つのフローの中に複数の「バリアンと(バージョン)」を用意することで、プロンプトの内容を変えたり、モデルを変更してアウトプットの違いを比較できます。

同じインプットでも、中間で差し込むプロンプトをいじってアウトプットに差異が出るかの実験

評価フロー(バッチテスト)

バリアントと少し似ていますが、手動で作ったデータセット(最大1000件)や元々Prompt Flowに組み込まれている評価セットを使って、作ったフローを評価できます。生成AI搭載のシステムを作った後、手動でテストをしているようでは日が暮れてしまいますが、このような仕組みを使うと効率的に評価ができるかと思います。

バルク実行で結果を表示

Pythonが実行できる

単にAzure OpenAIやAzure AI Searchと接続できるだけではなく、PythonのコードもPrompt Flow上で実行可能です。受け取ったデータの整形や他のAPIの実行などユースケースに応じた作り込みを手慣れな言語でできるのがメリットです。

当社ではLogic Appsを使ってPrompt Flowと同じようなフローを構築したりしますが、Logic AppsだとPythonをはじめとするプログラムを実行できないので、いろいろ工夫したい人にはこちらの方が合っているかと思います。

そのままWeb APIとしてデプロイ

作ったフローはそのままWeb APIとしてデプロイすることができます。Web APIなので、APIを呼ぶことができれば基本的にどんなシステムからも実行できるというのが嬉しいポイントです。

おわりに

冒頭に申し上げた通り、現時点では対処療法に過ぎず、クラウドサービスベンダーやユーザー企業がこれを個別開発するの割りに合わないものだと思います。しかし、今後はこう言った機能を搭載したSaaSが登場したり、技術進歩によりさらに良いものが生まれてきそうだと考えています。2024年もISMAPに限らず、生成AIをどうやってビジネスに活かしていくかをテーマに検証を重ねたいと思います。

参考文献

注釈

  1. 政府情報システムにおけるクラウドサービスの利用に係る基本方針 ↩︎
  2. ISMAPクラウドサービスリスト – ISMAPポータル ↩︎
  3. 制度案内 – 制度規程等 (ismap.go.jp) ↩︎
  4. Azure Machine Learning プロンプト フローとは – Azure Machine Learning | Microsoft Learn ↩︎

ぐっちー

コンサル会社にてISO27017やISMAP等のセキュリティ規格案件を経験した後、クラティブに転職。趣味はダンス(Soul, Lock, Waack)です。