【入門編】 NIST AI RMF 1.0の4つの機能(MAP, MEASURE, MANAGE, GOVERN)の統合的実装 – ガバナンス・リスク管理 & 生成AIセキュリティ防御ガイド

こんにちは!AIの進化、目覚ましいですよね。最近では社内チャットに便利なAIを組み込んだり、新しいサービスを開発する時に生成AIのAPIを呼び出したりするのが当たり前のようになってきました。

でも、「便利なものには裏がある」というのがセキュリティの世界の常です。AIって、人間のように空気を読んでくれる反面、悪意ある入力(プロンプトインジェクションなど)をされると、うっかり社の機密情報をベラベラと喋ってしまったり、意図しない誤動作を起こしたりする「隙」を持っています。

今回は、そんな生成AIを安全に使い倒すための世界基準のフレームワーク「NIST AI RMF 1.0(AIリスク管理フレームワーク)」について、難しい専門用語をできるだけ省いて、身近な「お家の防犯」に例えながら優しく紐解いていきたいと思います。

一歩ずつ、一緒に学んでいきましょうね!

—

AIのセキュリティ対策、何から手をつければいいの?

「AIアプリを作ったはいいけど、セキュリティ対策ってどこから手をつければいいの?」
そんな疑問を持ったことはありませんか?

よくある失敗が、「とりあえずファイアウォールを入れておこう」とか「パスワードを複雑にしよう」といった、従来のWebサイト向けの対策だけで済ませてしまうケースです。AIは、従来のプログラムとは違って「確率で動く生き物」のような側面があります。だからこそ、AI特有のライフサイクル全体を見据えた管理が必要になるんです。

ここで登場するのが、アメリカ国立標準技術研究所(NIST)が定めた NIST AI RMF 1.0 です。難しそうな名前ですが、要するに「AIを安全に生きていかせるための4つのステップ」だと考えてください。

その4つの機能がこちらです。
1. GOVERN(ガバナンス):ルールと体制を作る
2. MAP(マップ):リスクの全体像を把握する
3. MEASURE(メジャー):リスクを測定・評価する
4. MANAGE(マネージ):リスクを管理・低減する

お家に例えるなら、「家族みんなの防犯ルールを決めて(GOVERN)、どこに泥棒が入りそうか下見をして(MAP)、鍵の頑丈さを測って(MEASURE)、実際に二重ロックや防犯カメラを設置する(MANAGE)」という流れですね。すごく自然で理にかなっていませんか?

—

4つの機能を「お家の防犯」で完全理解する

それでは、それぞれの機能をもう少し詳しく、かつ分かりやすく見ていきましょう。

1. GOVERN(ガバナンス):チーム全員の「防犯ルール」を決める

どんなに良いセキュリティツールを入れても、使う人間が「これくらいならいっか」と機密情報をAIに入力してしまったらおしまいです。まずは組織として「ウチの会社ではAIをこう使います、これは禁止です」という方針を決めなければなりません。

  • 実務でのアクション: AI利用ガイドラインの策定、誰が責任を持つかの明確化、開発者向けのセキュリティ勉強会の実施など。「迷ったら上長に相談する」という文化をチームメイトと作ることが第一歩になります。

2. MAP(マップ):どこに危険が潜んでいるか「地図」を描く

AIを使ったシステムを作る時、そのシステムが「どこで使われ、誰と対話し、どんなデータに触れるのか」を洗い出します。

  • 実務でのアクション: データフロー図の作成です。例えば、「ユーザーが打ち込んだプロンプトは外部のAI APIにそのまま送られているか?」「個人情報が含まれていないか?」といったデータの流れを可視化します。泥棒がどこから侵入できそうか、家の間取り図をチェックする作業と同じですね。

3. MEASURE(メジャー):リスクの「重症度」を測る

マップで洗い出したリスクが、どれくらい危険なものかをテストします。AIの場合、意図的に意地悪な質問(プロンプトインジェクションやジェイルブレイク)を投げてみて、AIが簡単にセキュリティを破ってしまわないかを「測定」します。

  • 実務でのアクション: テスト環境での脆弱性検証です。「この質問をされたら、AIは『答えられません』と拒否できるか?」を自動テストや手動のレッドチーミング(攻撃者目線での検証)で確認します。

4. MANAGE(マネージ):リスクを抑え込む「防犯対策」を実装する

測定して「ここは危ないな」と分かったところに対策を打ちます。AIの出力をそのまま画面に出すのではなく、間にフィルターを挟んで危険な言葉をブロックしたり、APIのアクセス制限をかけたりします。

—

開発現場で即実践!AIアプリを守るコード実装例

さて、ここからは一歩踏み込んで、実際の開発現場で使える防御の仕組みを見ていきましょう。
今回は、WebアプリケーションからAI(LLM)のAPIを呼び出す際に、「ユーザーからの入力をそのままAIに渡さず、危険なキーワードや不正な構造が含まれていないか事前にチェックする(MANAGEの実装)」簡単なNode.jsのサンプルコードを用意しました。

ご自身のプロジェクトにそのままコピペして、コメントを参考にカスタマイズしてみてくださいね。

/**
 * ユーザーからの入力を検証し、AIへの不正な入力をブロックするセキュリティミドルウェア
 * (NIST AI RMFの「MANAGE」フェーズにおける具体的なリスク低減策の例)
 */

const express = require('express');
const app = express();

app.use(express.json());

// 悪意のあるプロンプトインジェクションや機密情報の入力を検知するためのブラックリスト(例)
const FORBIDDEN_PATTERNS = [
    /ignore previous instructions/i, // 「これまでの指示を無視しろ」という典型的な乗っ取り文句
    /system prompt/i,             // システムプロンプトを聞き出す試み
    /password/i,                  // パスワードなどの機密ワード(必要に応じて調整)
    /<script\b[^<]*(?:(?!<\/script>)<script)*<\/script>/gi // 念のためのクロスサイトスクリプティング対策
];

/**
 * 入力値に危険なパターンが含まれていないかチェックする関数
 * @param {string} input - ユーザーからの入力文字列
 * @returns {boolean} - 危険な場合は true、安全な場合は false
 */
function containsSecurityRisk(input) {
    if (typeof input !== 'string') return false;
    
    // 定義したパターンに一致するかどうかをループでチェック
    for (const pattern of FORBIDDEN_PATTERNS) {
        if (pattern.test(input)) {
            console.warn(`[Security Alert] 危険な入力を検知しました: ${pattern}`);
            return true;
        }
    }
    return false;
}

// AI連携のエンドポイント
app.post('/api/ask-ai', async (req, res) => {
    const userInput = req.body.prompt;

    // 1. 入力が空でないかチェック
    if (!userInput) {
        return res.status(400).json({ error: 'プロンプトが空です。' });
    }

    // 2. 【MANAGE】リスクのフィルタリング(不審な入力のブロック)
    if (containsSecurityRisk(userInput)) {
        return res.status(403).json({ 
            error: 'セキュリティポリシー違反の可能性がある入力が検知されました。入力を修正してください。' 
        });
    }

    try {
        // 3. 安全性が確認された入力のみ、外部のAI APIへ転送する処理(疑似コード)
        // const aiResponse = await callOpenAIAPI(userInput);
        
        // 仮のレスポンス返却
        const aiResponse = "AIからの安全な回答です。";
        return res.status(200).json({ result: aiResponse });

    } catch (error) {
        console.error('AI API呼び出しエラー:', error);
        return res.status(500).json({ error: '内部サーバーエラーが発生しました。' });
    }
});

// サーバーの起動
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`セキュリティフィルター搭載のAIサーバーがポート ${PORT} で起動しました。`);
});

このように、アプリケーションの入り口でしっかりと「検知とブロック(MANAGE)」を行うだけでも、AIがハッキングされるリスクを劇的に減らすことができます。コードの中にある FORBIDDEN_PATTERNS の配列を、ご自身のサービスの要件に合わせてチューニングしていくのが現場のエンジニアの腕の見せ所です。

—

まとめ:完璧を目指さず、一歩ずつ取り組もう

今回は、NIST AI RMF 1.0の4つの機能(GOVERN、MAP、MEASURE、MANAGE)を、お家の防犯に例えながら解説しました。

セキュリティと聞くと、「なんだか難しそう」「完璧にやらないといけないんだろな」と身構えてしまうかもしれませんが、最初から完璧な要塞を作る必要はありません。

まずは、

  • チームでAI利用のルールについて軽く話してみる(GOVERN)
  • 自分のアプリがどこにデータを送っているか図に書いてみる(MAP)
  • 変な入力をされたらどうなるかテストしてみる(MEASURE)
  • 簡単なバリデーション(入力チェック)を追加してみる(MANAGE)

この「小さな一歩」の積み重ねこそが、あなたと組織のAIアプリを強力に守る盾になります。
焦らず、一歩ずつ安全な開発ライフを楽しんでいきましょう!

コメント

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