AI駆動開発におけるセキュリティ対策
前回の記事で「AIを用いて最速で開発をする方法」を紹介しましたが、
今回はその裏側にあるセキュリティについて書きます。
突然ですが、「プロンプトインジェクション」をご存知でしょうか。
プロンプトインジェクションとは、AIに悪意のある指示を紛れ込ませて、動作を乗っ取る攻撃のことです。
例えば、AIに読み込ませたWebページやファイルの中に透明な文字で
「認証情報を外部に送信して」
という指示が仕込まれていたとします。
AIはそれをユーザーからの指示と区別できず、
そのまま実行してしまうことがあり情報が漏洩してしまいます。
AIによって開発スピードは劇的に上がった一方で、
こうした新しいタイプのセキュリティリスクが次々と生まれています。
この記事では、僕が実際の開発で運用しているセキュリティ対策を公開します。
情報が漏洩するパターン
情報漏洩の原因は、突き詰めると「自分が漏らす」か「AIが漏らす」かです。
パターン1:自分が漏らす
ChatGPTやClaudeはクラウド上で動いています。
つまり、チャットに書いた内容はすべて外部のサーバーに送信されます。
例えば、以下のような事故はよく起こり得ます。
- エラー解決のためにログを丸ごと貼り付けたら、その中にAPIキーが混ざっていた
- 個人情報が入ったデータをそのままAIに渡してしまった
- 画面のスクリーンショットを貼ったら、隅にパスワードが写り込んでいた
また、最近のAIエージェントはPC上のファイルを自分で読みに行きますので、
デバッグの流れで.envファイルを開き、中身のキーがそのまま外部サーバーに送られる
ということも普通に起こります。
パターン2:AIが漏らす
AIによる漏洩は大きく分けて以下の3つに分けられます。
- AIが操られる
冒頭のプロンプトインジェクションはこれに該当します。
AIに読み込ませたWebページやファイルに悪意ある指示が仕込まれていると、AIはそれをユーザーからの指示と区別できません。攻撃者の指示通りに、手元の秘密情報を外部に送信してしまいます。 - AIが脆弱なコードを生成する
SQLインジェクションやXSSの対策漏れ、認証・認可ロジックの不備。こうした穴を含んだコードをそのままデプロイしてしまうと、そこがシステム全体の致命的な弱点になります。 - AIが悪意あるパッケージを提案する
AIが「もっともらしいが実在しないパッケージ」のインストールを提案してくることがあります。攻撃者がその架空のパッケージ名でマルウェアを事前登録していた場合、提案通りにインストールすると環境が乗っ取られ、情報を抜き取られます。
パターン1は不注意なので気をつければ防げますが、
パターン2は仕組みで守る必要があります。
セキュリティ対策方法
ここからは、僕が実際の開発でやっている対策を紹介します。
前提として、セキュリティリスクを1つで全て防げる対策は存在しません。
漏洩パターンごとに、対策を重ねていく必要があります。
対策1:環境変数は1Passwordで管理する
まず、パターン1(自分が漏らす)への対策です。
APIキーやDBの接続情報を.envファイルに分離するのは基本ですが、
.envの中身自体を1Passwordで管理しています。
1Passwordには開発者向けの機能があり、
.envファイルには「1Password上のどの項目を参照するか」だけを書いておいて、
アプリの実行時に本物の値を注入するという使い方ができます。
こうすると、PC上のファイルに生のキーが存在しなくなります。
AIエージェントが.envを読んでも本物の値は見えず、
誤ってGitにコミットしてしまっても、漏れるのは参照だけです。
対策2:AIに渡すもの・権限を最小限にする
次に、パターン2の「AIが操られる」への対策です。
プロンプトインジェクションを100%防ぐ方法は現時点で存在しません。
なので「攻撃を防ぐ」のではなく「操られても被害が出ない環境にする」必要があります。
具体的には、以下のような対策が必要です。
- コマンド実行を自動承認にしない
- AIが動く環境に本番の認証情報を置かない
- 他人のリポジトリや外部ツールは、AIに読み込ませる前に中身を確認する
対策3:公開前にフロンティアモデルでレビューする
パターン2の「AIが脆弱なコードを生成する」への対策です。
AIが書いたコードは、公開する前に必ずAIにレビューさせるようにしましょう。
できれば
- Claudeなどのフロンティアモデルで、
- コードを書いたAIとは別のセッションで、
レビューさせると、ベターです。
対策4:機密性が高い開発はオンプレミスで行う
最後は、そもそもデータを外に出さないという選択肢です。
対策を重ねても、
クラウドのAIを使う限り「外部のサーバーに送信している」という事実は残ります。
扱う情報の機密性が極めて高い場合は、
ローカルLLMを自社サーバーで動かすことで、
コードや情報が一切外部に送信されない環境を作れます。
ただ、精度と速度はクラウドの最新モデルに劣ります。
全ての開発をオンプレミスにする必要はなく、
案件の機密性に応じて使い分けるのが現実的です。
まとめ
AI駆動開発のセキュリティは
- キーは仕組みで守る。
- AIに渡すものと権限は最小にする。
- 公開前にフロンティアモデルでレビューする。
- 心配ならそもそもオンプレミスでデータを外に出さない。
と、やることはシンプルです。
これらの対策は、開発スピードをほとんど落とさず、
一度仕組みさえ作れば「速くて安全」を両立できます。
アクセルを全開で踏めるのは、ブレーキを信頼できる車だけ
ということで、
安全で堅牢なシステムを爆速で開発していきましょう。