你的 AI Agent 在裸奔吗?四层防护方案,从权限到审计一次讲透

最近很多人在部署 AI Agent------接个大模型 API,写几个工具函数,跑起来就上线了。

但有个问题大家不太提:Agent 的权限管理

传统应用,代码写了什么就执行什么,行为是确定的。Agent 不一样------它根据 prompt 和上下文动态决定调什么 API、传什么参数。你代码里给了它 S3 的读写权限,它可能在你没预期的时候去读了不该读的文件。

不是恶意,是它「觉得有必要」。

所以 Agent 的安全策略需要从「信任代码」转向「约束行为」。这篇讲怎么用亚马逊云科技的 IAM、VPC、CloudTrail、Bedrock Guardrails 搭一套四层防护。

第一层:IAM 最小权限

核心原则:Agent 只能做你明确允许的事

给 Agent 配专用 IAM Role,权限精确到具体 Action 和 Resource:

json 复制代码
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel",
                "bedrock:InvokeModelWithResponseStream"
            ],
            "Resource": "arn:aws-cn:bedrock:*::foundation-model/anthropic.claude-*"
        }
    ]
}

几个要点:

  • bedrock:InvokeModel 而不是 bedrock:*
  • Resource 限定到具体模型系列
  • 不给 ListFoundationModels(Agent 不需要「探索」)

还可以加 Condition 约束:

json 复制代码
{
    "Condition": {
        "StringEquals": {
            "aws:RequestedRegion": "cn-northwest-1"
        }
    }
}

限定区域,防止 Agent 跨区域调用。

第二层:VPC 网络隔离

把 Agent 跑在私有子网里。没有公网 IP,没有 NAT Gateway(除非业务必须)。

Agent 访问 Bedrock 走 VPC Endpoint(内网),不走公网:

markdown 复制代码
Agent (私有子网) → VPC Endpoint → Bedrock
                   ↑
             流量不出 VPC

安全组只放行 TCP 443 到 Endpoint,其他全拒。

VPC Endpoint 还可以加 Endpoint Policy,在网络层再做一次权限过滤:

json 复制代码
{
    "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 管「谁能做什么」,Endpoint Policy 管「这个入口允许什么」。双重保险。

第三层:CloudTrail 审计

Agent 的每个 API 调用都会被 CloudTrail 记录。重点配置:

1. 开启 Bedrock 模型调用日志

日志写入 S3 + CloudWatch Logs,包含调用时间、模型、token 量。

2. 设置 CloudWatch 告警

告警 条件 动作
调用频率异常 5 分钟内 > 100 次 SNS 通知
非工作时间活动 北京 22:00-06:00 有调用 SNS 通知
权限拒绝 Agent Role 出现 AccessDenied 通知 + 暂停

3. 定期审计

每周 review 一次 Agent 的 API 调用日志,看有没有异常模式。

第四层:Bedrock Guardrails

在模型调用层面加防护:

  • 内容过滤:屏蔽不当内容
  • 话题限制:Agent 只讨论业务相关话题
  • PII 检测:自动脱敏个人身份信息
  • 词汇过滤:自定义禁用词
python 复制代码
response = client.invoke_model(
    modelId='anthropic.claude-3-sonnet-20240229-v1:0',
    guardrailIdentifier='my-agent-guardrail',
    guardrailVersion='1',
    body=json.dumps({
        "anthropic_version": "bedrock-2023-05-31",
        "messages": [{"role": "user", "content": user_input}],
        "max_tokens": 4096
    })
)

加上应用层的输入验证(长度限制、注入检测),完整的防护链就搭好了。

完整架构

markdown 复制代码
请求 → WAF限流 → 输入验证 → Guardrails
                                 ↓
              IAM Role(最小权限)
                                 ↓
              VPC 私有子网 → Endpoint → Bedrock
                                 ↓
              CloudTrail + CloudWatch 审计告警

四层,每层独立。某一层被绕过,其他层仍然有效。

部署 Checklist

  • Agent 有专用 IAM Role
  • IAM 策略精确到 Action + Resource
  • 加了 Condition 约束(区域、token 上限)
  • 运行在 VPC 私有子网
  • 通过 VPC Endpoint 访问(不走公网)
  • CloudTrail 开启
  • Bedrock 调用日志开启
  • CloudWatch 告警已配
  • Guardrails 已配置
  • 应用层有输入验证

别等出事了再补。先搭好框架,后面加 Agent 就是填配置的事。


🔗 Amazon Bedrock:aws.amazon.com/cn/bedrock/ 🔗 Bedrock Guardrails:aws.amazon.com/cn/bedrock/... 🔗 IAM:docs.aws.amazon.com/iam/ 🔗 CloudTrail:aws.amazon.com/cn/cloudtra...

相关推荐
意疏1 小时前
openJiuwen实战:用AsyncCallbackFramework为Agent增强器添加可观测性
java·服务器·前端
马士兵教育1 小时前
2026年IT行业基本预测!计算机专业学生就业编程语言Java/C/C++/Python该如何选择?
java·开发语言·c++·人工智能·python·面试·职场和发展
Book思议-2 小时前
顺序表和链表核心差异与优缺点详解
java·数据结构·链表
小杨的博客2 小时前
Java + Selenium实现浏览器打印功能
java·selenium
wefly20172 小时前
M3U8 播放调试天花板!m3u8live.cn纯网页无广告,音视频开发效率直接拉满
java·前端·javascript·python·音视频
兆子龙2 小时前
antd 组件也做了同款效果!深入源码看设计模式在前端组件库的应用
java·前端·架构
祁梦2 小时前
Redis从入门到入土 --- 黑马点评判断秒杀资格
java·后端
兆子龙2 小时前
lodash 到 lodash-es 多的不仅仅是后缀!深入源码看 ES Module 带来的性能与体积优化
java·前端·架构
Memory_荒年2 小时前
限流算法:当你的系统变成“网红景点”,如何避免被游客挤垮?
java·后端