事件驱动架构安全审计与零信任消息传递最佳实践概述在事件驱动架构中,消息需要具备来源可验证与访问可控的属性。通过签名与ACL、按租户隔离与审计追踪,可实现零信任传递。消息信封与签名type Envelope = { topic: string; tenant: string; traceId: string; timestamp: number; payload: string; signature: string }
function signEnvelope(env: Omit<Envelope, 'signature'>, secret: string): Envelope {
const msg = `${env.topic}.${env.tenant}.${env.traceId}.${env.timestamp}.${env.payload}`
const h = crypto.subtle.digestSync('SHA-256', new TextEncoder().encode(msg + secret))
const sig = Array.from(new Uint8Array(h)).map(b => b.toString(16).padStart(2, '0')).join('')
return { ...env, signature: sig }
}
function verifyEnvelope(env: Envelope, secret: string): boolean {
const expected = signEnvelope({ topic: env.topic, tenant: env.tenant, traceId: env.traceId, timestamp: env.timestamp, payload: env.payload }, secret).signature
return timingSafeEqualHex(expected, env.signature)
}
ACL与隔离type AclRule = { tenant: string; allowTopics: string[] }
function aclAllow(env: Envelope, rules: AclRule[]): boolean {
const r = rules.find(x => x.tenant === env.tenant)
return !!r && r.allowTopics.includes(env.topic)
}
审计追踪type AuditEvent = { topic: string; tenant: string; traceId: string; accepted: boolean; timestamp: string }
function buildAudit(env: Envelope, accepted: boolean): AuditEvent {
return { topic: env.topic, tenant: env.tenant, traceId: env.traceId, accepted, timestamp: new Date().toISOString() }
}
运维要点统一消息信封与签名,拒绝未签名与签名不一致的消息ACL按租户维度授权Topic,避免跨租户访问审计事件入库并按TraceID串联完整链路通过签名、ACL与审计,可在事件驱动架构中实现零信任消息传递与可追溯性。

发表评论 取消回复