Policy Engine:AI Agent 时代的策略决策与安全执行核心

Policy Engine:AI Agent 时代的策略决策与安全执行核心

摘要

在传统企业系统中,权限控制通常由 RBAC、ABAC、ACL 等机制完成。但随着 AI Agent 从“生成内容”逐渐演变为“自主调用 Tool、访问数据、操作系统和执行现实世界动作”,传统权限模型开始暴露出明显局限。

Agent 不仅需要回答“用户是谁”,还需要回答:

  • 这个 Agent 能否调用这个 Tool?
  • 当前用户是否有权让 Agent 执行这个操作?
  • Agent 能否访问这个 Resource?
  • 当前参数是否满足安全规则?
  • 当前数据是否允许流向目标系统?
  • 当前风险是否需要人工审批?
  • 当前调用是否违反租户、环境、时间或金额限制?

这些问题不能依赖 LLM 的 Prompt 来解决,而应该由一个独立、确定性、可审计的 Policy Engine 负责。

本文从 Policy Engine 的基本模型开始,深入分析 RBAC、ABAC、ReBAC、PBAC、Capability Security、Policy Decision Point、Policy Enforcement Point、Policy-as-Code、OPA/Rego、Cedar、规则编译、缓存、分布式一致性、AI Agent Tool Authorization、Risk-based Policy、Human-in-the-Loop、数据流控制以及企业级架构设计。


1. 什么是 Policy Engine

Policy Engine 可以简单理解为:

输入一个安全决策请求,输出一个确定性的策略决策。

最简单的模型:

Policy Engine

Input:
    Subject
    Action
    Resource
    Context

Output:
    ALLOW
    DENY
    REVIEW

例如:

Subject:
    user-123

Action:
    customer.read

Resource:
    customer-456

Context:
    tenant = bank-a

Policy Engine:

DENY

因为:

user-123
没有访问
customer-456
的权限。

2. Policy Engine 与传统权限代码的区别

很多 Java 系统直接这样写:

if (user.isAdmin()) {
    allow();
}

随着系统复杂化,代码逐渐变成:

if (
    user.isAdmin()
    || (
        user.department.equals(resource.department)
        && resource.status.equals("ACTIVE")
        && currentTime.isBefore(deadline)
        && request.amount < 10000
    )
) {
    allow();
}

然后继续:

if (tenant.equals(resource.tenant)
    && region.equals(resource.region)
    && environment.equals("production")
    && ...
)

最终:

Authorization Logic 开始污染业务代码。

这就是 Policy Engine 存在的核心原因。

业务代码负责:

Business Logic

Policy Engine 负责:

Security Decision

3. Policy Engine 的核心职责

一个企业级 Policy Engine 通常负责:

Authentication Context
        |
        v
Authorization
        |
        v
Policy Evaluation
        |
        +-- RBAC
        +-- ABAC
        +-- ReBAC
        +-- Capability
        +-- Risk
        +-- Data Policy
        +-- Network Policy
        +-- Tenant Policy
        +-- Compliance
        |
        v
Decision

它并不一定负责:

Identity Authentication
Tool Execution
Database Execution

更典型的职责边界是:

PDP
Policy Decision Point

而执行权限的系统叫:

PEP
Policy Enforcement Point

4. PDP 与 PEP

这是理解 Policy Architecture 最重要的两个概念。

PDP

Policy Decision Point:

"Should this action be allowed?"

负责:

Evaluate Policy

PEP

Policy Enforcement Point:

"Enforce the decision."

负责:

ALLOW -> Execute
DENY  -> Block

完整流程:

User
 |
 v
Agent
 |
 v
PEP
 |
 | authorization request
 v
PDP
 |
 | ALLOW / DENY / REVIEW
 v
PEP
 |
 v
Tool

例如:

Agent
 |
 | call send_email
 v
Tool Gateway
       |
       | PEP
       v
Policy Engine
       |
       | DENY
       v
Tool Gateway
       |
       X
   Execution blocked

5. 为什么 Agent 特别需要 Policy Engine

传统应用:

User
 |
 v
API
 |
 v
Business Logic

Agent:

User
 |
 v
LLM
 |
 +-- Tool A
 +-- Tool B
 +-- Tool C
 +-- Tool D

LLM 具有:

Non-determinism
Autonomy
Planning
Context dependence
Tool selection

因此不能把安全规则写成:

System Prompt:

Never call delete_user.

因为:

Prompt
    !=
Security Boundary

真正安全的架构应该:

LLM
 |
 | "I want to call delete_user"
 v
Policy Engine
 |
 | DENY
 v
Tool Gateway
 |
 X

6. Policy Engine 的基本数学模型

可以将 Policy Decision 抽象成:

Decision = P(S, A, R, C)

其中:

S = Subject
A = Action
R = Resource
C = Context

例如:

P(
    user-123,
    customer.read,
    customer-456,
    {
        tenant: bank-a,
        ip: 10.10.1.20,
        time: 10:30
    }
)

返回:

DENY

更复杂的 Agent 场景:

Decision =
P(
    User,
    Agent,
    Tool,
    Action,
    Resource,
    Data,
    Context,
    Risk
)

因此 Agent Policy 比传统 RBAC 丰富得多。


7. Policy Decision 不应该只有 Allow / Deny

传统:

ALLOW
DENY

Agent 系统更适合:

ALLOW
DENY
REVIEW
STEP_UP
REDACT
TRANSFORM

例如:

send_email

如果发送内部邮件:

ALLOW

如果发送外部邮件:

REVIEW

如果包含 Secret:

DENY

如果只是包含 PII:

REDACT

例如:

Original:

Customer SSN:
123-45-6789

Policy:

REDACT

最终:

Customer SSN:
***-**-6789

因此 Policy Engine 可以从:

Authorization Engine

逐渐演化成:

Decision Engine


8. RBAC:Role-Based Access Control

RBAC 是最经典的权限模型:

User
 |
 v
Role
 |
 v
Permission

例如:

Alice
 |
 +-- ADMIN
       |
       +-- user.read
       +-- user.write
       +-- user.delete

优点:

简单
易理解
容易实现
容易管理

缺点:

角色爆炸
上下文能力弱
资源粒度不足
不适合复杂 Agent

例如:

customer-support-agent

不能简单地拥有:

customer.read

因为还需要判断:

哪个 customer?
哪个 tenant?
什么 purpose?
当前用户是否有权限?

9. Role Explosion

例如企业存在:

Department
Region
Level
Tenant
Environment

组合以后:

Engineer-US-Prod
Engineer-US-Dev
Engineer-EU-Prod
Engineer-EU-Dev
Manager-US-Prod
Manager-US-Dev
...

最终角色数量:

RoleCount =
Department × Region × Level × Environment × Tenant

这就是典型:

Role Explosion

因此现代 Policy Engine 通常会从:

RBAC

扩展到:

ABAC

10. ABAC:Attribute-Based Access Control

ABAC 不再只看:

Role

而是看:

Attributes

例如:

Subject:
    department = finance
    level = manager

Resource:
    department = finance
    classification = confidential

Context:
    environment = production

Policy:

ALLOW if:

subject.department == resource.department
AND
subject.level >= manager
AND
resource.classification <= confidential

ABAC 的核心优势:

权限来自属性,而不是角色本身。


11. Agent 最适合 ABAC + RBAC

实际企业系统不应该简单选择:

RBAC vs ABAC

而应该:

RBAC
+
ABAC

例如:

Role:
    customer-support

Attributes:
    tenant = bank-a
    region = US
    clearance = confidential

Policy:

ALLOW customer.read

IF:
    role == customer-support
    AND
    resource.tenant == subject.tenant
    AND
    resource.region == subject.region

这样既保留:

Role 管理简单

又具备:

Attribute 灵活性

12. ReBAC:Relationship-Based Access Control

ReBAC 进一步回答:

Subject 与 Resource 是什么关系?

例如:

User
 |
 +-- member_of --> Team A
 |
 +-- owns -------> Project A
 |
 +-- manages ----> Department A

Resource:

Project A

Policy:

ALLOW
if user is member of project.team

这种模型非常适合:

GitHub
Google Drive
Slack
Jira
CRM
Enterprise Knowledge Base

因为权限通常来自:

User
  |
Relationship
  |
Resource

13. Agent + ReBAC

例如:

Agent:
    customer-support-agent

User:
    Alice

Ticket:
    Ticket-123

关系:

Alice
 |
assigned_to
 |
Ticket-123

Policy:

ALLOW
if
    user.assigned_to(ticket)

Agent 可以代表 Alice 查询:

Ticket-123

但不能查询:

Ticket-999

这比:

customer.read = true

安全得多。


14. Capability Security

在 Agent 世界中,Capability Security 非常重要。

一个 Capability 可以表示:

Can perform action X
on resource Y
under constraints Z

例如:

Capability:
    email.send

Resource:
    internal.company.com

Constraint:
    maxRecipients = 10

Agent 获得:

Capability

而不是:

Full Role

因此:

Agent
 |
 +-- customer.read
 +-- ticket.create
 +-- email.send

这是 Agent 最自然的权限模型之一。


15. Policy Engine 的输入模型

企业级 Policy Request 可以定义:

{
  "subject": {
    "id": "user-123",
    "type": "user",
    "roles": ["support"]
  },
  "agent": {
    "id": "support-agent",
    "version": "2.1"
  },
  "action": "customer.read",
  "resource": {
    "type": "customer",
    "id": "customer-456",
    "tenant": "bank-a"
  },
  "context": {
    "environment": "production",
    "ip": "10.0.1.10"
  }
}

Policy Engine:

Request
   |
   v
Policy Evaluation
   |
   v
Decision

16. Decision Response

可以返回:

{
  "decision": "ALLOW",
  "policy": "customer-read-v3",
  "reason": "same-tenant",
  "obligations": []
}

或者:

{
  "decision": "REVIEW",
  "policy": "external-email-v2",
  "reason": "external-recipient",
  "obligations": [
    "human_approval"
  ]
}

或者:

{
  "decision": "DENY",
  "policy": "secret-exfiltration-v1",
  "reason": "secret-to-external-destination"
}

这比单纯:

true / false

更加适合企业系统。


17. Policy-as-Code

Policy Engine 最重要的技术思想之一:

Policy as Code

不要:

if (...) {
}

把所有权限逻辑硬编码在 Java。

而是:

Policy
 |
 v
Version Control
 |
 v
Testing
 |
 v
Review
 |
 v
Deployment

例如:

policies/
 ├── customer.rego
 ├── payment.rego
 ├── email.rego
 ├── tenant.rego
 └── data.rego

这样 Policy 可以:

Git
Code Review
CI/CD
Versioning
Rollback
Testing

18. OPA:Open Policy Agent

OPA 是 Policy-as-Code 的经典实现。

架构:

Application
    |
    | Query
    v
OPA
    |
    v
Policy

Policy 使用 Rego 表达。

例如:

package agent.authz

default allow = false

allow {
    input.subject.tenant == input.resource.tenant
    input.action == "customer.read"
}

Java 服务:

Spring Boot
     |
     v
OPA
     |
     v
ALLOW / DENY

这样业务代码不需要知道具体权限规则。


19. Rego 的思想

Rego 不是传统:

if / else

而是:

Policy =
Data
+
Rules

例如:

allow {
    input.user.role == "admin"
}

或者:

allow {
    input.user.department == input.resource.department
    input.action == "read"
}

这种方式特别适合:

Complex Authorization
Infrastructure Policy
Kubernetes Policy
API Authorization
Agent Security

20. Cedar:另一种现代 Policy Language

Cedar 的核心思想也是:

Policy as Code

例如概念上:

permit (
    principal,
    action == Action::"Read",
    resource
)
when {
    principal.department == resource.department
};

它强调:

Formal Authorization Model
Predictable Evaluation
Typed Entities

因此现代企业可以根据场景选择:

OPA / Rego
Cedar
自研 Policy DSL

21. Policy Engine 的内部架构

一个成熟 Policy Engine 内部可以分为:

                Policy Engine
                     |
       +-------------+-------------+
       |             |             |
       v             v             v
Policy Store    Compiler       Schema
       |             |             |
       +-------------+-------------+
                     |
                     v
               Evaluation Core
                     |
              +------+------+
              |             |
              v             v
          Decision       Explain
              |
              v
          Cache Layer

核心组件:

Policy Store
Policy Loader
Policy Compiler
Schema Validator
Evaluation Engine
Decision Cache
Explain Engine
Audit

22. Policy Store

Policy 可以存储在:

Git
Database
Object Storage
Config Service
Kubernetes ConfigMap

推荐:

Git
 +
CI/CD
 +
Policy Distribution

例如:

Git
 |
 v
Policy CI
 |
 +-- Syntax Check
 +-- Unit Test
 +-- Security Test
 |
 v
Policy Bundle
 |
 v
Policy Engine

23. Policy Compilation

如果每次请求都解析:

YAML
JSON
Rego
DSL

性能会非常差。

因此:

Policy Source
      |
      v
Parse
      |
      v
Compile
      |
      v
Optimized Representation
      |
      v
Runtime Evaluation

请求路径只做:

Evaluate

而不是:

Parse + Compile + Evaluate

24. Policy Evaluation 性能

在高并发系统中:

API Request

可能达到:

100k QPS

如果每次都:

Network -> Policy Server -> DB

延迟可能非常高。

例如:

Application
   |
   v
Policy Engine
   |
   v
Database

形成:

P99 = 50ms

对于一个简单 API:

Business logic = 10ms
Authorization = 50ms

明显不可接受。


25. Sidecar / Embedded Policy Engine

解决方案之一:

Application
 |
 +-- Policy Sidecar
 |
 +-- Business Service

或者:

Application
 |
 +-- Embedded Policy Engine

架构:

              Service Pod
        +---------------------+
        |                     |
        |  Application        |
        |       |             |
        |       v             |
        |  Policy Engine      |
        |                     |
        +---------------------+

优点:

低延迟
无网络 Hop
高吞吐

缺点:

Policy Distribution
Memory
Version Consistency

需要解决。


26. Policy Distribution

假设有:

1000

个微服务实例。

Policy 更新:

v10 -> v11

需要:

Policy Control Plane
        |
        v
Distribution
        |
 +------+------+------+
 |      |      |      |
 v      v      v      v
Pod1   Pod2   Pod3   PodN

常见方式:

Polling
Push
Pub/Sub
Kafka
gRPC Streaming
Config Center

27. Policy Consistency

一个非常重要的问题:

Pod A -> Policy v10
Pod B -> Policy v11

这时:

同一个请求

可能:

A -> ALLOW
B -> DENY

因此 Policy Engine 需要:

Policy Version

例如:

{
  "decision": "DENY",
  "policy_version": "2026.08.23.17"
}

这样审计时可以知道:

这个决策是在什么版本的 Policy 下产生的?


28. Decision Cache

Policy Decision 很多时候具有高重复性。

例如:

user-123
customer.read
customer-456

连续调用 100 次。

可以缓存:

Cache Key =
subject
+
action
+
resource
+
context
+
policyVersion

例如:

ALLOW
TTL = 30s

但必须注意:

Authorization Cache 最大的问题不是性能,而是权限撤销后的 stale decision。


29. Cache Invalidation

例如:

10:00
User has permission

10:01
Admin revokes permission

10:02
Cache still says ALLOW

于是:

Security Violation

因此高风险权限:

Payment
Delete
Production
Secret

不应该简单使用长 TTL。

可以采用:

Risk-based TTL

例如:

READ:
    60s

WRITE:
    10s

PAYMENT:
    0s

DELETE:
    0s

30. Explainability:为什么允许?

企业 Policy Engine 必须解决:

Why was this request allowed?

例如:

ALLOW

还需要:

Policy:
    customer-read-v3

Reason:
    same tenant

Matched:
    subject.tenant == resource.tenant

这叫:

Policy Decision Explanation

对于:

Compliance
Audit
Security Investigation
Production Debugging

非常重要。


31. 为什么 Agent 更需要 Explainability

例如 Agent:

Agent:
    customer-support-agent

突然调用:

delete_customer

Security Team 必须回答:

Who allowed this?
Which policy?
Which user?
Which agent version?
Which resource?
Which context?

所以一个完整的 Agent Decision Trace:

User Request
     |
     v
Agent Reasoning
     |
     v
Tool Selection
     |
     v
Policy Request
     |
     v
Policy Decision
     |
     v
Tool Execution

必须全部可以关联。


32. Policy 与 Agent Tool Security

对于 Tool Security,可以定义:

Tool Policy

例如:

tool: send_email

allow:
  - agent: support-agent
    recipient_domain:
      - company.com

deny:
  - data.classification: SECRET

review:
  - recipient.external: true

于是:

LLM
 |
 | send_email
 v
Policy Engine
 |
 +-- recipient
 +-- data
 +-- agent
 +-- user
 +-- risk
 |
 v
Decision

33. Risk-Based Policy

传统 Policy:

ALLOW / DENY

Agent 更适合:

Risk

例如:

Risk = f(
    tool,
    data,
    user,
    resource,
    destination,
    amount,
    context
)

然后:

Risk < 30
    ALLOW

30-70
    ALLOW + MONITOR

70-90
    REVIEW

> 90
    DENY

34. Policy 与 Risk Engine 的区别

两者不能混为一谈。

Policy Engine:

"Is this allowed?"

Risk Engine:

"How dangerous is this?"

因此:

Risk Engine
     |
     v
Risk = 82
     |
     v
Policy Engine
     |
     v
REVIEW

架构:

             Tool Request
                  |
        +---------+---------+
        |                   |
        v                   v
 Authorization         Risk Engine
        |                   |
        +---------+---------+
                  |
                  v
            Policy Engine
                  |
                  v
       ALLOW / DENY / REVIEW

35. Policy Obligation

Policy 不仅可以返回:

ALLOW

还可以返回:

Obligation

例如:

{
  "decision": "ALLOW",
  "obligations": [
    "mask_pii",
    "audit",
    "limit_to_10_records"
  ]
}

于是:

Tool Gateway

执行:

Mask PII
+
Limit Results
+
Audit

这使 Policy Engine 从:

Authorization

扩展到:

Control Plane

36. Policy 与数据安全

例如:

Resource:
    customer-profile

Classification:
    PII

Tool:

send_email

Destination:

external

Policy:

IF
    data.classification == PII
AND
    destination == external

THEN
    DENY

或者:

THEN
    REDACT

这种设计可以实现:

Data-centric Security

而不是只做:

API-centric Security


37. Policy Engine 与 Zero Trust

Zero Trust 的核心:

Never Trust
Always Verify

Policy Engine 正是 Zero Trust 的决策核心。

每一次:

Tool Call
API Call
Data Access
Production Operation

都应该:

Authenticate
Authorize
Evaluate
Enforce
Audit

因此:

Agent Security
+
Policy Engine
+
Zero Trust

天然适配。


38. Multi-Tenant Policy

SaaS / Enterprise Agent 必须支持:

Tenant

例如:

Tenant A
Tenant B
Tenant C

Policy:

ALLOW
if
subject.tenant == resource.tenant

这是最基础的 Tenant Isolation。

更复杂:

tenant.policy

每个租户可以拥有:

Allowed Tools
Data Classification
External Domains
Approval Rules
Retention
Region

例如:

tenant: bank-a

tools:
  allow:
    - customer.read
    - ticket.create

external_domains:
  allow: []

approval:
  payment: required

39. Policy Hierarchy

企业 Policy 经常存在多层:

Global Policy
      |
      v
Organization Policy
      |
      v
Tenant Policy
      |
      v
Agent Policy
      |
      v
User Policy

最终:

Effective Policy

可以定义:

EffectivePolicy =
Global
Organization
Tenant
Agent
User

注意:

权限通常应该取交集,而不是并集。

这样可以防止下层策略绕过上层安全约束。


40. Policy Conflict

假设:

Global:
    DENY external email

Tenant:
    ALLOW external email

最终应该:

DENY

因为:

Global Security Boundary

不能被 Tenant Policy 放宽。

可以定义 Policy Priority:

Deny
    >
Allow

或者:

Security Level
    >
Tenant Level
    >
Agent Level

41. Policy Evaluation Algorithm

一种典型流程:

1. Load Subject
2. Load Agent
3. Load Resource
4. Load Action
5. Load Context
6. Load Data Classification
7. Evaluate Global Policy
8. Evaluate Tenant Policy
9. Evaluate Agent Policy
10. Evaluate User Policy
11. Evaluate Risk
12. Resolve Conflict
13. Generate Decision
14. Generate Obligations
15. Audit

最终:

Decision

42. Policy Engine 的 Java 架构

对于 Spring Boot,可以设计:

com.example.policy
|
+-- controller
|    +-- PolicyController
|
+-- model
|    +-- AuthorizationRequest
|    +-- Decision
|    +-- PolicyContext
|
+-- engine
|    +-- PolicyEngine
|    +-- RuleEvaluator
|    +-- ConflictResolver
|
+-- repository
|    +-- PolicyRepository
|
+-- cache
|    +-- DecisionCache
|
+-- audit
|    +-- PolicyAuditService

核心接口:

public interface PolicyEngine {

    Decision evaluate(
        AuthorizationRequest request
    );
}

43. AuthorizationRequest

public record AuthorizationRequest(
    Subject subject,
    AgentContext agent,
    String action,
    Resource resource,
    Map<String, Object> context
) {}

Decision:

public record Decision(
    DecisionType type,
    String policyId,
    String reason,
    List<Obligation> obligations
) {}

其中:

public enum DecisionType {
    ALLOW,
    DENY,
    REVIEW
}

44. Policy Evaluation Pipeline

可以采用责任链:

public Decision evaluate(
        AuthorizationRequest request) {

    Decision global =
        globalPolicy.evaluate(request);

    if (global.isDenied()) {
        return global;
    }

    Decision tenant =
        tenantPolicy.evaluate(request);

    if (tenant.isDenied()) {
        return tenant;
    }

    Decision agent =
        agentPolicy.evaluate(request);

    if (agent.isDenied()) {
        return agent;
    }

    return userPolicy.evaluate(request);
}

但生产系统中不建议无限堆叠 if

应该抽象成:

Policy Evaluation Pipeline

45. Policy Rule Engine

可以设计:

public interface PolicyRule {

    boolean matches(PolicyContext context);

    Decision evaluate(PolicyContext context);
}

例如:

public class SameTenantRule
        implements PolicyRule {

    @Override
    public boolean matches(
            PolicyContext context) {

        return context.subject().tenant()
            .equals(context.resource().tenant());
    }

    @Override
    public Decision evaluate(
            PolicyContext context) {

        return Decision.allow(
            "same-tenant"
        );
    }
}

这样规则可以:

组合
测试
替换
排序
版本化

46. Policy DSL

企业规模继续扩大后,可以设计 DSL:

permit customer.read
when
    subject.tenant == resource.tenant
    and subject.role in ["support", "manager"]
    and context.environment != "sandbox"

或者:

deny email.send
when
    data.classification == SECRET

DSL 的价值:

Security Policy

可以由:

Security Team
Platform Team
Compliance Team

共同维护,而不需要所有人修改 Java。


47. Policy Testing

Policy-as-Code 最大的优势之一是:

Policy 可以像代码一样测试。

例如:

Given:
    user.department = finance

And:
    resource.department = finance

When:
    action = read

Then:
    ALLOW

测试:

Given:
    user.department = finance

And:
    resource.department = hr

Then:
    DENY

48. Property-Based Policy Testing

更高级的方式:

不只测试具体案例,而是测试安全属性。

例如:

Property:

If subject.tenant != resource.tenant,
decision must never be ALLOW.

可以形式化:

∀ request:
    request.subject.tenant
    !=
    request.resource.tenant

=> DENY

这对于:

Multi-Tenant
Data Isolation
Financial Systems

非常重要。


49. Policy Mutation Testing

还可以故意修改 Policy:

Original:

deny secret -> external

Mutation:

allow secret -> external

然后:

Security Test

必须失败。

如果测试仍然通过:

Policy Test Suite 不够强。

这是非常值得企业安全平台采用的方法。


50. Policy Engine 的高可用设计

Policy Engine 如果挂掉:

所有业务请求

可能受到影响。

因此需要:

Policy Engine Cluster

例如:

              Load Balancer
                    |
          +---------+---------+
          |         |         |
          v         v         v
       PDP-1     PDP-2     PDP-3
          |         |         |
          +---------+---------+
                    |
                Policy Store

Policy 本身尽可能:

Read-only
Immutable
Locally Cached

这样即使:

Policy Store

短暂不可用:

PDP

仍然可以继续决策。


51. Fail Open vs Fail Closed

这是 Policy Engine 最关键的架构选择之一。

如果 Policy Engine 不可用:

ALLOW

叫:

Fail Open

如果:

DENY

叫:

Fail Closed

对于:

Payment
Delete
Secret
Production

应该:

Fail Closed

对于:

Public Read
Search
Non-sensitive operation

可以根据业务考虑:

Fail Open

因此更合理的是:

Risk-based Failure Mode


52. Policy Engine 的性能目标

对于在线 Tool Authorization:

建议关注:

P50
P95
P99
QPS
CPU
Memory
Cache Hit Rate
Policy Load Time

例如目标:

P99 < 5ms

如果采用:

Local PDP
Compiled Policy
In-memory Data

可以达到非常低的延迟。

但如果:

Application
 -> Network
 -> PDP
 -> Database

延迟会明显增加。


53. Policy Engine 与 Redis

Redis 很适合:

Decision Cache
Policy Metadata
Short-lived Authorization Context
Rate Limit
Revocation State

例如:

policy:decision:
    user-123:
    customer.read:
    customer-456

但是:

Redis 不能成为 Policy 的唯一 Source of Truth。

更推荐:

Git / Policy Store
        |
        v
Policy Distribution
        |
        v
PDP Memory
        |
        v
Redis / Local Cache

54. Policy Engine 与 Kafka

Kafka 可以用于:

Policy Update Event

例如:

Policy Repository
      |
      v
Policy Updated
      |
      v
Kafka
      |
 +----+----+----+
 |    |    |    |
 v    v    v    v
PDP1 PDP2 PDP3 PDPN

每个 PDP 收到:

policy-version = 2026.08.23.18

然后加载新 Policy。

这样可以构建:

Event-driven Policy Distribution


55. Policy Engine 与 OpenTelemetry

Policy Engine 也应该被纳入 Trace。

例如:

Trace
 |
 +-- agent.request
      |
      +-- tool.call
           |
           +-- policy.evaluate
           |
           +-- tool.execute

Policy Span:

policy.id
policy.version
decision
reason
subject
action
resource
evaluation.time

注意:

不要把密码、Token、Secret、完整 PII 放入 Trace Attributes。

Observability 本身也必须遵守 Data Security Policy。


56. Policy Engine 的安全边界

Policy Engine 本身是高价值目标。

攻击者如果能够:

Modify Policy

那么:

整个安全系统

都可能被绕过。

因此必须保护:

Policy Source
Policy Distribution
Policy Engine
Policy Cache
Policy Update API

特别是:

Policy Update

必须具备:

Authentication
Authorization
Approval
Versioning
Audit
Rollback

57. Policy Signing

进一步可以对 Policy Bundle 进行签名:

Policy Source
    |
    v
Compile
    |
    v
Bundle
    |
    v
Sign
    |
    v
Deploy

PDP:

Bundle
   |
   v
Verify Signature
   |
   v
Load

这样可以防止:

Policy Supply Chain Attack

58. Policy Supply Chain Security

企业 Agent 平台可能依赖:

Policy Package
Tool Package
MCP Server
Model
Prompt
Plugin

这些都形成:

AI Supply Chain

Policy Engine 必须关注:

Who created policy?
Who approved it?
Which version?
Who deployed it?
Was it modified?

这与传统:

Software Supply Chain Security

非常类似。


59. Policy Engine 与 MCP

如果 Agent 使用 MCP Tool:

Agent
 |
 v
MCP Client
 |
 v
MCP Server
 |
 v
Tool

推荐增加:

Policy Gateway

变成:

Agent
 |
 v
MCP Client
 |
 v
Policy Gateway
 |
 v
MCP Server
 |
 v
Tool

Policy Gateway 可以控制:

Which MCP Server
Which Tool
Which Resource
Which User
Which Tenant
Which Data

因此:

MCP 解决 Tool Communication,Policy Engine 解决 Tool Authorization。


60. 一个完整的 Agent Policy Decision

例如用户:

帮我把客户 123 的资料发送到外部邮箱。

Agent:

Tool:
    send_email

Policy Request:

{
  "subject": "user-123",
  "agent": "support-agent",
  "action": "email.send",
  "resource": "customer-123",
  "destination": "external",
  "dataClassification": "PII"
}

Policy Engine:

1. User has customer.read
2. Agent has email.send
3. Customer belongs to user tenant
4. Data = PII
5. Destination = external
6. External PII prohibited

最终:

DENY

注意:

Agent 即使已经:

成功读取客户资料

也不意味着:

可以把资料发送到任何地方。

这就是:

Fine-grained Policy Enforcement


61. Policy Engine 的最终架构

一个完整企业级架构可以设计成:

                         User
                           |
                           v
                    +-------------+
                    |   Identity  |
                    +------+------+
                           |
                           v
                    +-------------+
                    | AI Agent    |
                    +------+------+
                           |
                           v
                     Tool Request
                           |
                           v
                +----------------------+
                |    Policy Gateway   |
                +----------------------+
                           |
          +----------------+----------------+
          |                |                |
          v                v                v
      Identity         Policy PDP       Risk Engine
          |                |                |
          |          +-----+-----+          |
          |          |           |          |
          |          v           v          |
          |        RBAC        ABAC         |
          |          |           |          |
          +----------+-----------+----------+
                           |
                           v
                   Decision Resolver
                           |
              +------------+------------+
              |            |            |
              v            v            v
           ALLOW        REVIEW        DENY
              |
              v
          DLP / Obligation
              |
              v
          Tool Executor
              |
       +------+------+
       |             |
       v             v
   Enterprise     External
    Systems        Systems
              |
              v
            Audit
              |
              v
        OpenTelemetry

62. Policy Engine 最核心的设计思想

如果只记住几个概念,可以记住:

Policy
=
Who
+
Can Do What
+
To What
+
Under Which Conditions

对于 Agent:

Policy
=
User
+
Agent
+
Tool
+
Action
+
Resource
+
Data
+
Context
+
Risk

最终:

Decision
=
ALLOW
|
DENY
|
REVIEW
|
OBLIGATION

63. Policy Engine 与传统 RBAC 的演进

整个权限技术可以看成:

ACL
 |
 v
RBAC
 |
 v
ABAC
 |
 v
ReBAC
 |
 v
PBAC
 |
 v
Capability Security
 |
 v
Risk-based Authorization
 |
 v
Agent Policy Engine

未来 Agent Security 很可能不是某一种模型取代另一种模型,而是:

RBAC
+
ABAC
+
ReBAC
+
Capability
+
Risk
+
Data Policy

统一进入:

Policy Decision Platform


64. 从 Authorization Engine 到 Agent Policy Engine

传统 Authorization:

Can user access resource?

Agent Policy:

Can this user,
through this agent,
using this capability,
perform this action,
against this resource,
with this data,
under this context,
with this risk,
at this moment?

这就是两者最本质的区别。


65. 最终总结

Policy Engine 并不是简单的:

if user.isAdmin()

它是企业 AI Agent 的:

Decision Control Plane

它把:

Identity
Authorization
RBAC
ABAC
ReBAC
Capability
Risk
Data Classification
Tenant Isolation
Human Approval
Audit

统一起来。

最重要的架构原则可以总结成:

LLM decides intent.
        |
        v
Policy Engine decides permission.
        |
        v
Tool Gateway enforces decision.
        |
        v
Sandbox limits execution.
        |
        v
DLP controls information flow.
        |
        v
Audit records everything.

因此,真正成熟的 Agent 平台,不应该是:

LLM
 +
Tools

而应该是:

                    +----------------+
                    |      User      |
                    +-------+--------+
                            |
                            v
                    +---------------+
                    |      Agent    |
                    +-------+-------+
                            |
                            v
                  +-------------------+
                  |   Policy Engine   |
                  +-------------------+
                            |
                +-----------+-----------+
                |           |           |
                v           v           v
             Identity     Risk        DLP
                |           |           |
                +-----------+-----------+
                            |
                            v
                     Tool Gateway
                            |
                            v
                         Tools
                            |
                            v
                     Real World

最终可以用一句话概括:

Policy Engine 的价值,不是告诉 AI 应该做什么,而是在 AI 决定做什么之后,确定它究竟有没有资格做。

而在 Agent 时代,这个“资格”已经不再只是传统的 User → Permission,而是 User → Agent → Capability → Tool → Action → Resource → Data → Context → Risk 的多维授权模型。

如果你接下来要继续深入 Agent Security,最值得展开的是 ① OPA/Rego 实战实现、② Agent Authorization + Capability Security、③ Policy Engine + Tool Gateway 企业级架构,你更想先看哪一个?

Vincent zhai
Vincent zhai
Full-Stack Engineer