社員の個人LINEを活用してAI社長を運用する際、経営者が最も不安に感じるのは「社外の人間が勝手にAI社長を使って社外秘の情報を引き出してしまうのではないか」というセキュリティリスクです。
LINE公式アカウントはURLやQRコードさえあれば誰でも友だち追加できます。しかし、「友だち追加されること」と「AI社長の応答機能を利用できること」は完全に切り離して制御できます。
本記事では、LINE Messaging APIで取得できる固有のユーザーIDを活用したホワイトリスト判定と、社員認証コードによる多層防御、さらに役職別の閲覧権限制御の仕組みを解説します。
LINE Messaging APIが渡す「User ID」の正体
LINE公式アカウントにユーザーがメッセージを送信した際、Webhookを通じてサーバーへJSONデータ(イベント)が届きます。その中に含まれるのが「userId」です。
LINEのUser IDの特徴
Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxのような33文字の暗号化された固有文字列。- LINEアプリのプロフィールに表示される表示名やLINE IDとは異なり、第三者が偽装することは極めて困難。
- プロバイダー(アカウント運営元)ごとに一意に発行されるため、他のボットのIDとは重複しない。
このUser IDを社内のホワイトリストと照合することで、「このメッセージを送ってきたのは本当に当社の社員か?」を100%確実に判定できます。
ステップ1:ホワイトリスト判定による外部遮断
最もシンプルで強固な防御壁が、許可された社員のUser IDだけを辞書データとして保持する方法です。
# 許可された社員のホワイトリスト定義例
AUTHORIZED_USERS = {
"U1234567890abcdef1234567890abcdef": {
"name": "江口",
"role": "manager",
"department": "営業部"
},
"U9876543210fedcba9876543210fedcba": {
"name": "山田",
"role": "president",
"department": "役員"
}
}
サーバー側の処理では、メッセージを受信した瞬間に以下の判定を行います。
user_id = event["source"]["userId"]
if user_id not in AUTHORIZED_USERS:
# 社外のユーザーには固定の定型文だけを返して終了(AIや社内DBは一切呼ばない)
reply_message(event["replyToken"], "このアカウントは社内専用です。利用権限がありません。")
return
この一行の判定があるだけで、万が一QRコードが外部に流出して見知らぬ誰かが友だち追加したとしても、社内の情報やAI機能にアクセスされる心配はゼロになります。
ステップ2:社員認証コード+管理者承認フロー
「社員のLINE User IDをどうやって最初に登録すればいいのか?」という運用上の疑問が生じます。
社員にIDを直接調べさせるのは難しいため、「初回認証コード」を導入します。
安全な初回登録フロー
- 友だち追加:社員が社内掲示板のQRコードからAI社長を追加する。
- コード入力:AI社長「社員認証コードを入力してください」と案内。社員が事前配布された「A2026-XXXX」を入力。
- 管理者へ通知:管理者のLINEまたはSlackへ「江口さんからAI社長の利用申請があります [承認] [拒否]」と通知が飛ぶ。
- 承認と紐付け:管理者が承認ボタンを押すと、その社員のLINE User IDと社員番号がデータベースに正式登録され、AI利用が可能になる。
この「User ID + 社員認証コード + 管理者承認」の3重ロックを施すことで、中小企業であってもエンタープライズ級の堅牢な社内限定環境が実現します。
ステップ3:役職別のアクセス権限制御
社内限定運用ができても、「一般社員が全社員の給料や役員会の秘密議事録を自由に見られては困る」という問題があります。
AIのプロンプトだけで「給料は教えないでください」と制御しようとすると、巧妙なプロンプトインジェクション(脱獄指示)で突破される危険があります。そのため、必ずプログラム側で権限判定を行います。
| 役職 | 閲覧・相談可能な範囲 | アクセス制限 |
|---|---|---|
| 社長・役員 | 経営数字、全社KPI、全議事録、全マニュアル | 全権限アクセス可 |
| 部門管理職(部長・課長) | 自部門KPI、業務マニュアル、承認ルール、案件相談 | 他部門の詳細数字・全社機密議事録は除外 |
| 一般社員 | 業務マニュアル、社内規程、社内FAQ、判断基準 | 財務数字・給与情報・役員会議事は完全遮断 |
ユーザーの役職(role)に応じて、RAGの検索対象インデックスをプログラム側で切り替えることで、機密情報の漏洩を構造的に防ぐことができます。
まとめと次回予告
LINE公式アカウントでの運用であっても、サーバー側のホワイトリスト判定と多層認証を組み合わせることで、完全な社内閉鎖AIと同等の安全性を確保できます。
次回は、このセキュリティ機構を組み込んだ実際のPythonコードを公開します。
次回予告:第9回
次回(Part 9)は、バックエンド実装として「Pythonで作るLINE AI社長:Messaging APIとLLMをつなぐ実装コード」をお届けします。
FastAPIによるWebhookサーバーの立ち上げ、署名検証、ユーザー認証、OpenAI API呼び出しまでの実動コードを余すところなく解説します。
【全12回連載目次】中小企業のための「AI社長」実践導入ガイド
- 第1回:なぜ会社の情報を全部入れてはいけないのか?4つの情報分類と成功の骨格
- 第2回:普通のAIと「AI社長」を分けるもの:最重要ナレッジ「社長の判断基準」の言語化
- 第3回:思考と価値観を抽出する「社長への100問」:判断基準ファイルの作り方と実践質問集
- 第4回:組織図と役割分担の設計:AI社長が「誰に頼めばよいか」を迷わず案内する仕組み
- 第5回:失敗事例の蓄積と「禁止事項」:AI社長の経験値と絶対に譲れない境界線
- 第6回:プロンプトをパンクさせない3層システム設計:System Prompt・RAG・リアルタイムAPIの住み分け
- 第7回:なぜ「個人LINE+公式アカウント」なのか?中小企業の導入ハードルを下げる構成論
- 第8回:社内限定運用のセキュリティ設計:LINE User ID制限と社員認証コードによるアクセス制御 現在の記事
- 第9回:Pythonで作るLINE AI社長:Messaging APIとLLMをつなぐバックエンド実装
- 第10回:現場に定着するリッチメニューUIと、会社と共に育つナレッジ更新サイクル
- 第11回:ナレッジの保管場所とデータ管理術:GoogleスプレッドシートとGoogleドライブをAI社長の「記憶庫」にする方法
- 第12回:Googleスプレッドシート×Python連携実装:ナレッジをリアルタイムに読み込むバックエンド構築
