ユニット 4 / 11

アクセス制御、ID、および秘密の管理

利益:

  • 認証と認可を分離し、RBAC/ABAC による最小限の認可を適用する機能
  • ユーザーコンテキストでモデルを実行することにより、混合プロキシリスクを回避する機能
  • シークレット管理システムを使用して API キーを保存およびローテーションする機能

AI システムに対する攻撃の大部分は、モデルを「騙す」ことではなく、盗まれた API キーや過剰に認証されたアカウントから始まります。このセキュリティ層は古典的な情報セキュリティに由来しますが、AI のコンテキストでは新たなリスクが追加されます。つまり、モデルが他人に代わって乗車を呼び出し、サービス アカウントがすべてのデータにアクセスし、キーが GitHub に漏洩します。この単元では、認証、認可(RBAC/ABAC)、最小限の認可、シークレット管理を使用して AI システムへのアクセスを絞り込む方法を学びます。

認証と認可の違い

この 2 つの用語はよく混同されます。

  • 認証:「あなたは誰ですか?」 — ユーザー/サービスが実際に主張している本人であることを証明する (パスワード、トークン、証明書、MFA)。
  • 権限: 「何ができますか?」 — 認証された当事者がアクセスできるリソース/アクションを決定します。

AI システムの重要な微妙な点は、モデルがユーザーに代わって作業を実行するとき、そのユーザーの権限で動作しているのか、それとも広範なサービス アカウントで動作しているのか、ということです。後者は危険です。インジェクションによってだまされたモデルがサービス アカウントへの完全なアクセス権を取得するためです。

注意: 「混乱した代理人」問題: 権限の低いユーザーが、権限の高いモデルをアウトソーシングすることでアクセスできないデータに間接的にアクセスします。モデルは常に、ユーザー自身の広範な権限ではなく、ユーザーの権限のコンテキスト内で動作する必要があります。

RBAC と ABAC

  • RBAC (ロールベースのアクセス制御): アクセスはユーザーのロールに応じて異なります。 「サポート スペシャリスト」の役割は、顧客メモを読むことはできますが、削除することはできません。シンプルかつ一般的。
  • ABAC (属性ベースのアクセス制御): アクセスは、ユーザーの部門、データのプライバシー ラベル、時刻、リクエストの送信元ネットワークなどの属性に依存します。より細かく調整されていますが、より複雑です。

ほとんどの組織は RBAC から始めて、機密データについては ABAC まで深めます。 AI の経験則: モデルは、リクエストを行ったユーザーの役割/属性に基づいて、呼び出すすべてのエージェントとアクセスするすべてのデータをフィルターする必要があります。

ステップバイステップ: 最小限の権限の行使

  1. 棚卸しをしましょう。モデルはどのツールを呼び出し、どのデータにアクセスしますか?それらをすべてリストアップしてください。
  2. 各アクセスを正当化します。 「このアシスタントには本当に削除権限が必要ですか?」それ以外の場合は、取り外してください。
  3. 読み取り専用のデフォルト。モデルはデフォルトで読み取り可能である必要があります。個別の狭い範囲のトークンの書き込み/削除が必要です。
  4. ユーザーコンテキストを移動します。サービス アカウントではなく、ユーザーの権限で車両を呼び出します。
  5. 有効期間が短い資格情報。有効期間の長いキーの代わりに、有効期間が短い自動更新トークンを使用します。

機密管理

シークレットとは、API キー、パスワード、トークン、証明書など、秘密にしておく必要がある認証情報です。 AI プロジェクトで最も一般的な事故は、モデル プロバイダーの API キーがコードに埋め込まれており、バージョン管理 (Git) に漏洩する場合です。

正しい適用:

  • コードにキーを埋め込まないでください。環境変数またはシークレット管理システム (キーを暗号化して保存し、アクセスを制御するサービス) を使用します。
  • ローテーション: 定期的な間隔 (90 日ごとなど) でキーを更新します。漏れが疑われる場合は直ちに中止してください。
  • スコープの縮小: 各スイッチには、必要なサービスと必要な許可のみが含まれます。
  • 監査: 誰が、いつ、どこでキーを使用したかを記録します。

4 つのコピー可能なテンプレート

レビュー制御プロンプトにアクセスします:

以下のツール リストの各ツールについて、次の点を評価します。 - このツールは、このアシスタントのジョブを実行するために必要ですか? (はい/いいえ) - 読み取り専用ですか、それとも書き込み/消去ですか? - このツールはユーザーの権限またはサービスアカウントで呼び出されますか?不要な、または過度に許可されたものには「削除/編集」としてマークを付けます。<tools>{{ tools_list }}</tools>

秘密漏洩スキャンのプロンプト:

API キー、パスワード、トークン、接続文字列、秘密キーのコード スニペットで、ハードコーディングされたシークレットである可能性のあるものを見つけます。それぞれに行とタイプを指定します。値をレスポンスにコピーします。マスク (最初の 4 文字 + ***)。<code>{{source }}</code>

最小権限決定ルール:

新しいツール/アクセス要求が到着したら、次のことを尋ねます。1.このアクセス権なしでタスクを実行できますか? -> 「はい」の場合: REJECT2。読み取り専用で十分ですか? -> 「はい」の場合: 書き込み権限を付与します3。範囲を単一のソースに絞り込むことはできますか? -> 「はい」の場合: daratデフォルトの答えは「いいえ」です。アクセスは理由によって獲得されます。

ローテーションカレンダーのリマインダー:

シークレットごとに、所有者、作成日、有効期限、範囲を記録します。 90 日を超えたキー、または 30 日間使用されていないキーを「ローテーション/キャンセル候補」として報告します。

弱いプロンプト / 強いプロンプト

下手なアプローチ

強力なアプローチ

モデルは単一のサービス アカウントですべてのデータにアクセスします

モデルはリクエストを行ったユーザーの権限でアクセスします。

API キーはコードに埋め込まれており、変更されることはありません

キー シークレット マネージャーのローテーション、90 日

アシスタントに対する広範な「何でもできる」権限

デフォルトは読み取り専用、狭く書き込みます

アクセスは決して審査されません

定期的なアクセスのレビューと取り消し

ミニケース3個

ケース 1 — 混合プロキシ データの漏洩。社内アシスタントは、すべての従業員レコードにアクセスできるサービス アカウントを使用して作業していました。インターンのユーザーは、「役員給与表を要約してください」と言うことで、通常は見ることのないデータにアクセスしました。なぜなら、モデルはユーザーの権限ではなく、モデル自体の広範な権限の文脈で疑問を呈したからです。ユーザー コンテキストが移動するように調整されると、インターンは自分だけが見ることができる録画を取得できるようになりました。

ケース 2 — キーの漏洩、2 週間で 190,000 TL の請求。開発者はモデル API キーをヘルパー スクリプトに埋め込み、パブリック リポジトリにプッシュしました。ボットは 40 分でキーを見つけ、それを 2 週間使用しました。請求額は190,000TLに達しました。キーがシークレット マネージャーに移動され、ローテーションに接続され、リポジトリ スキャンが追加されたとき、インシデントは再発しませんでした。

ケース 3 — 読み取り専用のデフォルトにより割り込みが防止されました。 DevOps アシスタントは、プロンプト インジェクション経由で「本番データベースのリセット」コマンドを受け取りました。ただし、アシスタントには読み取り専用トークンのみが与えられました。書き込み/消去は別の承認されたフローで行われました。コマンドは認証エラーで拒否され、イベントがアラームとして記録されました。データの損失はありませんでした。

ヒント: 新しいアクセス要求に対するデフォルトの回答を「いいえ」にします。アクセスは正当化によって獲得されるものです。全員にワイドを与えてからカットバックすることはほとんど行われず、リスクが蓄積します。

よくある間違い

  • 大規模なサービス アカウントでモデルを実行すると、ユーザー コンテキストが失われます (混合プロキシ)。
  • API キーをコードに埋め込み、バージョン管理に漏洩します。
  • キーをまったく回転させない(「動作中、タッチしないでください」)。
  • デフォルトでアシスタントに書き込み/削除権限を与えます。
  • アクセスを一度許可すると、再度アクセスを許可しません。
  • 認証と承認を混同し、「ログインしているのですべてにアクセスできる」と想定します。

要約すると

  • 認証は「あなたは誰ですか」という質問であり、承認は「あなたに何ができるか」という質問です。 AI では、両方がユーザーのコンテキストで動作する必要があります。
  • モデルは、独自の広範な権限ではなく、リクエストを行ったユーザーの権限で動作する必要があります (混合機関のリスクを回避)。
  • RBAC から始めて、機密データに関する ABAC を深めます。最小限の権限をデフォルトにします。
  • コードに秘密を埋め込まないでください。それをシークレットマネージャーに保存し、絞り込んで定期的にローテーションします。
  • 読み取り専用のデフォルトとナロー書き込みにより、インジェクションの影響が大幅に制限されます。

アプリケーションタスク

AI アシスタントがアクセスするすべてのツールとデータをリストします。それぞれ 3 つの質問に答えてください: (1) それは本当に必要ですか? (2) 読み取り専用で十分ですか? (3) ユーザーコンテキストで実行されますか?次に、ハードコードされたシークレットをすべて検索し (上記のスキャン プロンプトを介して)、見つかったキーごとにローテーション プランを作成します。少なくとも 1 つの不要な権限を削除してください。

チェックリスト

  • [ ] モデルは、リクエストを行ったユーザーの権限コンテキストで実行されます。
  • [ ] ツールとデータへのアクセスは、最小特権の原則に絞り込まれています。
  • [ ] 書き込み/消去は読み取り専用とは別であり、認証済みであり、範囲が狭いです。
  • [ ] コードには秘密は埋め込まれていません。秘密管理者に保管されています。
  • [ ] キーのローテーションスケジュールとキャンセル手順があります。
  • [ ] アクセスは定期的に見直されます。