feat(ssf): 实现安全事件一键连接与凭据托管

新增数据库驱动的 SecurityEventConnectionManager,复用 RFC 7662 机器 Client,自动完成 Discovery、Push Bearer 生成、Stream 创建、Verification、首次启用、零停机轮换和安全退役。

增加文件与 Kubernetes SecretStore、最小权限 RBAC、动态 Receiver/撤销水位/内省降级,以及系统设置管理页面。已通过全量 Go 测试、go vet、关键包竞态测试、27 个 Web 测试、类型检查、生产构建、Compose 和 Kubernetes dry-run。
This commit is contained in:
2026-07-15 17:25:00 +08:00
parent f30aaeb2d4
commit 9efeb16fd1
31 changed files with 2738 additions and 227 deletions
+10 -13
View File
@@ -35,19 +35,16 @@ OIDC_ACCEPT_LEGACY_HS256=true
OIDC_INTROSPECTION_ENABLED=false
OIDC_INTROSPECTION_CLIENT_ID=
OIDC_INTROSPECTION_CLIENT_SECRET=
# Optional SSF/CAEP real-time revocation receiver. Enabling it also requires
# the RFC 7662 credentials above so bootstrap and fail-closed fallback work.
OIDC_SECURITY_EVENTS_ENABLED=false
OIDC_SECURITY_EVENTS_TRANSMITTER_ISSUER=https://auth.51easyai.com/ssf
OIDC_SECURITY_EVENTS_RECEIVER_AUDIENCE=
OIDC_SECURITY_EVENTS_BEARER_SECRET=
# During zero-downtime rotation, set next before removing current.
OIDC_SECURITY_EVENTS_BEARER_SECRET_NEXT=
OIDC_SECURITY_EVENTS_PUBLIC_ENDPOINT=https://api.51easyai.com/api/v1/security-events/ssf
OIDC_SECURITY_EVENTS_STREAM_ID=
OIDC_SECURITY_EVENTS_MANAGEMENT_TOKEN_URL=
OIDC_SECURITY_EVENTS_MANAGEMENT_CLIENT_ID=
OIDC_SECURITY_EVENTS_MANAGEMENT_CLIENT_SECRET=
# SSF/CAEP is activated by the durable connection created in System Settings;
# there is no enable flag and no Push Bearer in environment variables.
AI_GATEWAY_PUBLIC_BASE_URL=http://localhost:8088
OIDC_SECURITY_EVENTS_SECRET_STORE=file
OIDC_SECURITY_EVENTS_SECRET_DIR=.local-secrets/ssf
# Kubernetes uses one pre-provisioned empty Secret and narrowly scoped RBAC.
# OIDC_SECURITY_EVENTS_SECRET_STORE=kubernetes
# OIDC_SECURITY_EVENTS_KUBERNETES_NAMESPACE=easyai
# OIDC_SECURITY_EVENTS_KUBERNETES_SECRET_NAME=easyai-gateway-security-events
# OIDC_SECURITY_EVENTS_KUBERNETES_API_SERVER=https://kubernetes.default.svc
OIDC_SECURITY_EVENTS_HEARTBEAT_INTERVAL_SECONDS=60
OIDC_SECURITY_EVENTS_STALE_AFTER_SECONDS=180
OIDC_SECURITY_EVENTS_CLOCK_SKEW_SECONDS=60