安全な AI 開発
Complete developer guide to building secure AI applications - from input validation to deployment
Updated: August 2026
セキュリティ原則
1。多層防御
Implement multiple layers of security controls. No single control should be relied upon exclusively.
2。最低特権
ユーザー、API、AI コンポーネントに必要最小限の権限を付与します。
3.フェイル セキュア
エラーが発生した場合、デフォルトでは許容的な状態ではなく安全な状態に設定されます。
4。ゼロ トラスト
Never trust, always verify. Validate at every boundary, including internal systems.
入力検証
All user input must be validated and sanitized before processing. This is your first line of defense against prompt injection and other attacks.
入力検証クラス
```python
import re
from typing import Optional, List
class InputValidator:
# Known injection patterns
INJECTION_PATTERNS = [
r"ignore\s+(previous|prior|all)\s+(instructions|rules)",
r"(forget|disregard)\s+(your|all)\s+(instructions|rules)",
r"you\s+are\s+(now|still)\s+(dan|do\s+anything)",
r"system\s+prompt:",
r"{{.*}}",
r"\[INST\]|\[/INST\]|<\|end\|>",
]
# Encoding patterns
ENCODING_PATTERNS = [
r"base64:", # Base64 prefix
r"\\x[0-9a-fA-F]{2}", # Hex encoding
r"%[0-9a-fA-F]{2}", # URL encoding
]
def validate(self, user_input: str) -> dict:
"""Validate user input for potential attacks."""
issues = []
# Length check
if len(user_input) > 10000:
issues.append("Input exceeds maximum length")
# Check for injection patterns
for pattern in self.INJECTION_PATTERNS:
if re.search(pattern, user_input, re.IGNORECASE):
issues.append(f"Suspicious pattern detected: {pattern}")
# Check for encoding attempts
for pattern in self.ENCODED_PATTERNS:
if re.search(pattern, user_input):
issues.append(f"Encoded content detected")
# Check for high entropy (possible encoding)
unique_chars = len(set(user_input))
if len(user_input) > 50 and unique_chars / len(user_input) < 0.3:
issues.append("High entropy detected - possible encoding")
return {
"valid": len(issues) == 0,
"issues": issues,
"sanitized": self._sanitize(user_input)
}
def _sanitize(self, user_input: str) -> str:
"""Basic sanitization."""
# Remove control characters
sanitized = re.sub(r'[\x00-\x1F\x7F]', '', user_input)
return sanitized.strip()
```
検証チェックリスト
- アプリケーション境界で検証
- 入力長の確認
- インジェクションのパターン マッチ
- エンコード試行の検出
- タイプ検証
- 処理前にサニタイズ
- 検証の失敗をログに記録
- レート制限
出力処理
LLM outputs must be validated and sanitized before being presented to users or passed to other systems.
コンテンツ フィルタリング
- 機密データの漏洩をチェック
- システム プロンプトが漏洩していないことを確認する
- 出力形式の検証
- 挿入されたコンテンツをチェックする
PII 検出
- 個人情報のスキャン
- 機密データのマスクまたは秘匿化
- PII 暴露試行をログに記録
- 検出時のユーザー通知
フォーマット検証
- JSON 出力の検証
- 予想される構造をチェック
- 許可された値を確認
- 該当する場合は HTML をサニタイズ
出力ハンドラーの例
```python
import re
import json
class OutputHandler:
PII_PATTERNS = {
"ssn": r"\b\d{3}-\d{2}-\d{4}\b",
"email": r"\b[\w.-]+@[\w.-]+\.\w+\b",
"phone": r"\b\d{3}[-.]?\d{3}[-.]?\d{4}\b",
}
def process_output(self, raw_output: str) -> dict:
"""Process and validate LLM output."""
result = {
"original": raw_output,
"cleaned": raw_output,
"warnings": [],
"blocked": False
}
# Check for system prompt leakage
if "system prompt" in raw_output.lower():
result["warnings"].append("System prompt reference detected")
# Scan for PII
for pii_type, pattern in self.PII_PATTERNS.items():
matches = re.findall(pattern, raw_output)
if matches:
result["warnings"].append(f"{pii_type} detected in output")
# Optionally mask
result["cleaned"] = re.sub(pattern, "[REDACTED]", result["cleaned"])
return result
```
API セキュリティ
認証
- 強力な API キー管理を使用する
- 可能な場合は OAuth 2.0 を実装
- JWT トークン検証
- API キー ローテーション
承認
- ロールベースのアクセス制御 (RBAC)
- API キーの範囲
- ユーザーごとのレート制限
- テナント分離
レート制限
- トークンベースの制限
- リクエストベースの制限
- コスト管理
- 段階的スロットル
API セキュリティ チェックリスト
- HTTPS のみを使用
- レート制限の実装
- すべての入力を検証
- すべての出力をサニタイズ
- 埋め込みではなく API キーを使用する
- リクエスト署名の実装
- API アクセスのログ
- CORS を適切に実装
認証と認可
ユーザー認証
- 強力なパスワード ポリシー
- MFA サポート
- セッション管理
- トークンの有効期限
API 認証
- API キー管理
- OAuth スコープ
- JWT 検証
- キーのローテーション
承認
- RBAC 実装
- 権限チェック
- リソース レベルのアクセス
- 監査ログ
データ セキュリティ
データ分類
- 機密データの識別
- 機密性によって分類
- カテゴリごとにコントロールを適用
- 定期的な監査
暗号化
- 転送中の TLS
- 保存中の AES
- キー管理
- キーのローテーション
PII 処理
- 検出
- 最小化
- 同意管理
- 削除の権利
ログとモニタリング
ログに記録する内容
セキュリティ イベント
- 認証試行
- 認証エラー
- レート制限超過
- 不審なパターン
AI 固有のイベント
- プロンプト インジェクションの試行
- システム プロンプト アクセス
- ツール呼び出し
- AI によるデータ アクセス
運用イベント
- API コール
- エラーと例外
- パフォーマンス メトリック
- コスト追跡
モニタリングのベスト プラクティス
- セキュリティ イベントのリアルタイム アラート
- セキュリティ指標のダッシュボード
- 自動化された異常検出
- SIEM との統合
- 定期的なログのレビュー
- 保持ポリシー
一般的な脆弱性
1。 AI 機能の IDOR
AI がリソースにアクセスする際の安全でない直接オブジェクト参照
例
User asks AI to "read file X" and AI has access without proper authorization checks.
2. LLM 経由の SSRF
AI ツールによるサーバー側のリクエスト フォージェリ電話をかける
例
AI を騙して内部サービスにリクエストを作成させます。
3.認証バイパス
AI エンドポイントの認証が弱いか欠落している
例
適切な認証チェックのない AI API エンドポイント。
4。 Vector DB の公開
機密性の高い埋め込みを含む保護されていないベクター データベース
例
機密データが埋め込まれたパブリックにアクセス可能なベクトル DB。
コンプライアンス
GDPR (EU)
- 処理の法的根拠
- データの最小化
- アクセス/削除の権利
- データのポータビリティ
CCPA (California)
- 知る権利
- 削除権限
- オプトアウトの権利
- 無差別
AI 固有
- EU AI 法の要件
- AI リスク評価
- 透明性の義務
- 人間による監視