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

10 阅读3分钟

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

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

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

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

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

第一层:IAM 最小权限

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

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

{
    "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 约束:

{
    "Condition": {
        "StringEquals": {
            "aws:RequestedRegion": "cn-northwest-1"
        }
    }
}

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

第二层:VPC 网络隔离

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

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

Agent (私有子网) → VPC Endpoint → Bedrock
                   ↑
             流量不出 VPC

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

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

{
    "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 检测:自动脱敏个人身份信息
  • 词汇过滤:自定义禁用词
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
    })
)

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

完整架构

请求 → 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…