AWS Lambda×MCPで自社リソースをAI連携する実装ガイド
目次
目次
AWS Lambda×MCPで自社リソースをAI連携する実装ガイド
生成AI/AIエージェントに社内データや業務システムを安全に使わせたい。しかしAIに直接AWS権限やDB接続情報を渡すのはリスクが高い。MCP(Model-Consuming Protocol)を介し、AWS Lambdaを中間層に置く構成は、権限分離・監査・承認フローを実現しやすく、本番運用に向く実装パターンです。本記事では設計方針とともに、実装レベルの例(Lambda入出力、IAMポリシー、MCPツール説明、ログ項目)を示します。
この記事でわかること
- AWS LambdaをMCPツールとして公開する基本アーキテクチャ
- MCP Client / MCP Server / Lambda Tool MCP Server の関係
- 具体的なLambda入出力例・IAMポリシー例・MCPツール説明文例
- 監査ログ・承認フロー・プロンプトインジェクション対策の実践ポイント
MCPを使ってAIと自社リソースを連携するとは
MCPとは
MCPはAIエージェントが外部ツールを見つけ、説明を読み、呼び出すための標準的な枠組みです。Claude DesktopやCursor、Amazonのエージェント基盤などがMCP Clientに相当します。MCP Serverはツール一覧や実行エンドポイントを提供します。
安全な実行境界
重要なのは「AIが何を実行できるか」を明確に制限すること。Lambda関数単位で責務を分離し、IAMで最小権限を与え、入力検証とログ出力ルールを守ることで安全性を担保します。
全体アーキテクチャ(概略)
- ユーザー → AIエージェント(MCP Client)
- MCP Server(ツールカタログ) → Lambda(AWS上でツール実行)
- Lambda → S3/DynamoDB/RDS/社内API/SaaS
- 監査基盤:CloudWatch Logs / CloudTrail / X-Ray / EventBridge
実装ハンズオン(ステップ・バイ・ステップ)
Step 1:ユースケースを決める(まずは参照系)
PoCはS3ドキュメント検索や顧客情報の照会など読み取り専用から始める。更新・削除は承認フローを設けてから段階的に開放する。
Step 2:Lambda関数の入出力例
例:S3上の文書検索(Python)
def handler(event, context):
# event: {"query":"契約更新手順", "max_results":5, "caller":"agent-x"}
query = event.get("query","")
# validate input (length, prohibited chars)
# search logic -> results list
return {
"status":"ok",
"query": query,
"results":[
{"key":"docs/policy.pdf", "snippet":"...要約..." },
...
]
}
Step 3:入力スキーマとエラー形式
入力はJSON Schemaで定義し必ずサーバー側で検証。エラーは統一フォーマットにする。
{
"error": {"code":"InvalidInput","message":"query is empty","retriable":false}
}
Step 4:読み取り専用IAMポリシー例(S3)
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":["s3:GetObject","s3:ListBucket"],
"Resource":[
"arn:aws:s3:::example-company-docs",
"arn:aws:s3:::example-company-docs/*"
]
}
]
}
Lambda実行ロールはこのようなポリシーのみをアタッチし、ワイルドカードは避ける。
Step 5:MCPツール説明文(AIへ提示するメタデータ)
{
"name":"search_internal_docs",
"description":"社内ドキュメントからキーワード検索し要約を返します。参照専用。更新/削除は行いません。個人情報はマスキングされます。",
"input_schema":{
"type":"object",
"properties":{
"query":{"type":"string"},
"max_results":{"type":"integer"}
},
"required":["query"]
},
"output_schema":{ "type":"object" }
}
説明には「参照専用」「禁止事項(例:個人情報の露出禁止)」を明記すること。
Step 6:MCP登録・接続
Lambda Tool MCP Serverに上記メタデータを登録し、MCP Client(Claude等)からツールカタログに表示されるようにする。クライアント固有の認証設定は導入先に合わせる。
Step 7:監査ログと監視設計
CloudWatch Logsに以下項目を残す:
- timestamp
- caller_agent_id(MCP Clientの識別子)
- tool_name
- input_hash(機密情報はハッシュ化)
- result_summary(フルデータは保存しない)
- execution_id / request_id
CloudTrailでロールアクティビティ、EventBridgeで承認イベント、X-Rayで遅延分析を行う。
本番運用で必須の設計ポイント
最小権限の原則
関数ごとにロールを分割。参照/作成/更新/削除でロールを分離し、本番環境は別アカウントまたは別プレフィックスで管理。
承認フローの実装例
更新系操作はLambdaが「実行提案」を作成し、Step Functions→Slack承認→承認後に実行Lambdaを呼ぶ。承認ログをEventBridgeに渡す。
プロンプトインジェクション対策
- ホワイトリストで許可された操作のみ実行
- 入力は必ずスキーマ検証・正規化
- 外部テキストに含まれる命令は無視するルールをLambdaに組み込む
コスト・パフォーマンス注意点
- AIは複数ツールを呼びやすい → 不要呼び出しを防ぐツール説明と入力制限を厳格に
- コールドスタート対策:軽量ランタイム/Provisioned Concurrency検討
- 冪等性:同じ操作を複数回実行しても問題にならないようトークン設計
よくある失敗パターン(アンチパターン)
- AIに広範な管理者権限を与える
- 1つのLambdaに参照・更新・削除を詰め込む
- AI生成のSQLやAPIパラメータを無検証で実行する
- ログに機密情報を平文で出力する
- 更新・削除操作に承認フローを入れていない
FAQ
MCPを使わずAPI Gatewayだけで連携しても良いか?
可能だが、MCPはAI側でツールの発見・説明理解・自動選択ができるため、複数クライアント対応やツール管理が容易になる点で有利です。
既存LambdaをそのままMCPツールにできるか?
多くは可能。ただし入力スキーマ・出力形式・ログ・権限をAI利用前提で見直す必要があります。
本番導入前に最低限確認すべき項目は?
IAM最小権限、入力バリデーション、監査ログ設計、シークレット管理(Secrets Manager)、承認フロー、プロンプトインジェクション対策、コスト上限の設定。
まとめ
AWS LambdaをMCP連携の中間層に使うと、AIエージェントに社内リソースを安全に利用させるための「実行境界」を作れます。まずは読み取り専用ユースケースでPoCを行い、IAM・監査・承認フローを整備したうえで更新系へ段階的に拡張してください。実装例(入出力・ポリシー・ツール説明)は本稿のテンプレートを使えば短期間で形にできます。
必要であれば、貴社環境(VPC、RDS、SaaS連携の有無)に合わせた設計レビューやテンプレート(CloudFormation / CDK)サンプルもご提供できます。お気軽に相談ください。