机密与密钥管理(KMS与Vault)实施指南与运维最佳实践概述通过集中式KMS与Vault实现密钥最小暴露、自动轮转与按需发放,降低泄露与长期凭证风险。信封加密import { randomBytes, createCipheriv, createDecipheriv } from 'crypto'
type CipherText = { iv: string; tag: string; data: string }
function encryptWithDataKey(plain: Buffer, dataKey: Buffer): CipherText {
const iv = randomBytes(12)
const cipher = createCipheriv('aes-256-gcm', dataKey, iv)
const enc = Buffer.concat([cipher.update(plain), cipher.final()])
const tag = cipher.getAuthTag()
return { iv: iv.toString('base64url'), tag: tag.toString('base64url'), data: enc.toString('base64url') }
}
function decryptWithDataKey(ct: CipherText, dataKey: Buffer): Buffer {
const iv = Buffer.from(ct.iv, 'base64url')
const tag = Buffer.from(ct.tag, 'base64url')
const data = Buffer.from(ct.data, 'base64url')
const decipher = createDecipheriv('aes-256-gcm', dataKey, iv)
decipher.setAuthTag(tag)
return Buffer.concat([decipher.update(data), decipher.final()])
}
动态凭证与TTLclass SecretLease {
value: string
expiresAt: number
constructor(value: string, ttlMs: number) { this.value = value; this.expiresAt = Date.now() + ttlMs }
valid(): boolean { return Date.now() < this.expiresAt }
}
class SecretCache {
store = new Map<string, SecretLease>()
async get(key: string, fetcher: () => Promise<{ value: string; ttlMs: number }>): Promise<string> {
const cur = this.store.get(key)
if (cur && cur.valid()) return cur.value
const next = await fetcher()
const lease = new SecretLease(next.value, next.ttlMs)
this.store.set(key, lease)
return lease.value
}
}
轮转与审计将主密钥托管在KMS/HSM,应用侧仅使用短期数据密钥通过Vault动态发放数据库与云凭证,设置最短TTL与自动撤销记录获取、解密与轮转操作的审计事件并最小化可见范围以上方案在常见Web与微服务环境中可实现低暴露与可审计的机密管理体系。

发表评论 取消回复