安全架构
除了注册和发现智能体之外,Kagenti Operator 还可以为你的智能体接入一套 zero-trust 安全栈:工作负载身份、传输加密和请求授权。本页将说明这些组件如何协同工作,以便你决定要启用哪些能力。
这套安全栈就是 operator 的 secure profile。它在 Introduction 中描述的核心 profile 里是 默认禁用 的——智能体以单个容器运行,MTLSReady 报告为 False 且原因为 SPIREUnavailable,并且不会强制执行任何授权。下面介绍的所有内容都属于可选启用,且依赖额外的集群组件。
目录
概览工作负载身份(SPIFFE / SPIRE)传输安全(Istio ambient mesh)授权(OPA + AuthBridge + Keycloak)示例:全局 Rego policyAuthBridge sidecarAgentRuntime 安全字段启用安全 profile使用场景相关内容概览
三个关注点对应三种技术,并由 operator 注入到每个智能体 Pod 中的 AuthBridge sidecar 串联起来:
经过安全保护的智能体,其请求路径如下:
此 operator 不使用 Authorino 进行授权。授权通过 OPA Rego policies 表达,并由 AuthBridge sidecar 强制执行。可选的 Kuadrant 集成仅确保为 Istio ambient gateway 存在一个最基本的 Kuadrant 自定义资源——operator 不会将 policy 转换为 Kuadrant AuthPolicy 或 Authorino AuthConfig 对象。
工作负载身份(SPIFFE / SPIRE)
SPIFFE 为每个工作负载提供一个加密身份;SPIRE 则是在运行时签发该身份的组件。
-
当集群中存在 Zero-Trust Workload Identity Manager 时,operator 会协调 SPIRE 组件;你也可以自行部署 SPIRE。
-
AuthBridge webhook 会注入一个
spiffe-helpersidecar 和 SPIFFE CSI socket。spiffe-helper会从 SPIRE Workload API 获取一个 X.509-SVID,并自动轮换。 -
该身份的形式如下:
由于该身份是从 ServiceAccount 派生而来,请为每个智能体分配各自独立的 ServiceAccount,以便获得不同的身份。
这个 SVID 是其他所有能力的信任根:它用于保护传输(mTLS)、命名工作负载的 Keycloak client,并对智能体的 AgentCard 进行签名,以支持可验证的发现。
传输安全(Istio ambient mesh)
operator 通过为智能体的 namespace 打标签,将其纳入 Istio ambient mode:
- 这会在
AgentRuntime上作为IstioMeshEnrolled状态条件上报。(即使在核心 profile 中也会应用该 label,这就是你在那里看到IstioMeshEnrolled=True的原因。) - Pod 之间的 L4 mTLS 由 Istio 的 ztunnel 透明处理——operator 不会编写
PeerAuthentication或DestinationRule。 - operator 会保持各 namespace 之间的证书颁发机构链一致(通过 cert-manager 的 mesh root 协调 Istio
cacerts),以确保 SPIRE 和 Istio 签发的证书都链到同一个根。 - 可以通过注解
kagenti.io/istio-mesh=disabled将某个 namespace 排除在外。
在 mesh 级 mTLS 之上,AuthBridge sidecar 还可以使用工作负载自身的 SVID 在智能体之间执行 应用级 mTLS——参见 mtlsMode。
授权(OPA + AuthBridge + Keycloak)
授权是一种在 AuthBridge sidecar 处进行评估的 policy-as-code:
- 身份 / token —— operator 会在 Keycloak 中将智能体注册为一个 OAuth2 client。其凭据会写入 Secret 并挂载到 Pod 中;sidecar 会根据 Keycloak 的 issuer 和 audience 获取并验证 JWTs。token exchange 支持 tool-to-agent delegation。
- Policy —— 一个
AuthorizationPolicy自定义资源保存一个或多个 Rego policies。bundle-service会将它们编译为 OPA bundle,并按身份提供服务;AuthBridge sidecar 会拉取与其 SPIFFE ID 匹配的 bundle。 - Decision —— AuthBridge 会在四个点进行 policy 评估:inbound/outbound × request/response,并且采用 fail-closed(
default allow := false)。
policy 的作用域采用三层层级:
示例:全局 Rego policy
spec.scope—global、namespace或client。默认 policy 以集群作用域提供,并委托给 namespace 和 client 作用域的规则。policies[].path— 该 Rego 覆盖的决策点({inbound,outbound}/{request,response}.rego)。policies[].content— Rego 源码。默认规则是 fail-closed;团队可以在其上叠加namespace或client作用域的 policy,以放行特定调用方。
AuthBridge sidecar
AuthBridge 是负责强制执行身份、mTLS 和授权的数据平面组件。operator 的 mutating webhook 会将其注入到任何带有 kagenti.io/type=agent 标签的 Pod 中(以及在启用 injectTools feature gate 时注入 tool),前提是全局 feature gate 已开启。
sidecar 模式通过 spec.authBridgeMode 按智能体进行选择:
Envoy/proxy 和 spiffe-helper 镜像随配套的 AuthBridge sidecar 镜像集合一起提供;在启用安全 profile 时,这些镜像必须可供集群使用。
AgentRuntime 安全字段
安全 profile 通过 AgentRuntime 按智能体进行配置。所有字段默认均为关闭/安全;一个完全加固的智能体看起来如下:
authBridgeMode— 要注入的 sidecar 数据平面类型(见上表)。mtlsMode— 智能体之间的应用级 mTLS。permissive同时接受 TLS 和明文(适合在发布期间使用);strict表示 TLS-or-fail(生产环境)。只有在 SPIRE 可用时,MTLSReady条件才会变为True,并且它只是信息性状态——不会阻塞Ready。tlsBridgeMode— 通过 cert-manager 为每个智能体签发 CA,使 sidecar 能够检查出站 HTTPS。仅支持proxy-sidecar/lite。
启用安全 profile
安全 profile 依赖于不属于核心安装的集群组件。请先按大致如下顺序部署它们:
- cert-manager — 为 operator 的 webhook 证书以及 TLS-bridge / Istio CA 链颁发证书。
- SPIRE(或 Zero-Trust Workload Identity Manager)——签发工作负载 SVID。
- Keycloak — 签发并验证 OAuth2/OIDC token;operator 会将智能体注册为 client。
- Istio(ambient) — 提供 mesh 和 ztunnel mTLS;ambient gateway 需要一个
Kuadrant自定义资源。
然后启用 operator feature gate(featureGates.globalEnabled: true、authbridgeConfig.enabled: true),使 AuthBridge webhook 开始注入,准备好 AuthBridge sidecar 镜像,并设置上面显示的 AgentRuntime 安全字段。
与核心智能体启用相比,启用安全 profile 是一项重大的平台工程。请先在非生产集群中验证,并在切换到 strict 之前,先将 mtlsMode 逐步以 permissive 方式发布。
使用场景
- 智能体到智能体的授权 —— 通过
client作用域的 Rego policy 结合 Keycloak audience / token exchange,允许智能体 A 调用智能体 B,而不允许反向调用。 - 多租户隔离 ——
namespace作用域的 policy 可防止一个团队的智能体访问另一个团队的智能体。 - 工具访问控制 —— 通过
injectToolsfeature gate 和按 client 的 policy,控制哪些工作负载可以作为工具使用。 - 可验证的智能体身份 ——
AgentCards 使用智能体的 SVID 进行 JWS 签名,因此消费者在信任或调用该智能体之前,可以先验证证书链是否可追溯到 trust bundle。 - 透明传输加密 —— 将 namespace 加入 Istio ambient 后,可获得无需修改应用的 ztunnel mTLS,并可在其上叠加可选的应用级 mTLS。
相关内容
- Introduction — 核心 profile 和 CRD 概览。
- Installation — 安装 operator 并创建
Kagentioperand。 - Deploy an Agent with AgentRuntime — 核心智能体 + MCP 工作流。