凭据轮换基础概念

说白了,凭据就是我们系统里的"通行证"——密码、、密钥这些。你想想看,每次你登录数据库、调API、连服务器,背后都是凭据在敲门。

凭据轮换呢,就是定期换掉这些通行证,让旧的失效、新的上岗。我在项目里见过太多人一用就是三年的密钥,真替他们捏把汗。

为什么非要轮换?

先问一个问题:你家大门钥匙多久换一次?如果十年不换,谁捡到都能进来。凭据也一样。

  • 泄漏止损:GitHub上误提交密钥的事,我每周都能听到。轮换能把风险窗口从「永远」压缩到「几小时」。
  • 合规要求:PCI DSS、SOC2、ISO 27001都在强制要求定期轮换。有一次审计,客户拿出密钥一年没换的记录……嗯,那个整改单写了好长。
  • 内部离职:我习惯每季度轮换一次,这样就算前员工还揣着旧,也早失效了。
注意:不要觉得轮换麻烦就不做。我曾经接手一个项目,主库密码用了四年没动过,后来被人扫到了弱口令——一夜之间数据全光。轮换不是开销,是保险。

我们到底在换什么?

凭据类型很多,但常见的有这么几类。我列个表,你看一眼就明白了。

凭据类型 典型形式 轮换周期(我推荐)
静态密码 数据库密码、SSH密码 90天
Access Key / Secret Key 180天(配合密钥ID回退)
JWT、OAuth2.0 短生命周期(分钟/小时级)+ 刷新
加密证书 TLS证书、签名证书 1年(Let's Encrypt自动90天)
临时凭证 STS、IAM Role 自动过期(通常15分钟-6小时)

你看,除了临时凭证,其他都需要我们主动轮换。临时凭证本身就是轮换思路的产物——让凭证自己到期,省心。

常见凭据类型详解

静态密码

老古董了,但还是最多。我建议你用工具生成20位以上的随机串,别手打。嗯,这里要注意:用户名密码最好也轮换,别光改密码不改名。

云厂商用的多,比如AWS的Access Key + Secret Key。轮换思路是:生成新密钥 → 更新应用 → 确认旧密钥无流量 → 删除旧密钥。我写过一段Python脚本自动化这个流程:

import boto3

def rotate_access_key(username):
    iam = boto3.client('iam')
    # 创建新密钥
    new_key = iam.create_access_key(UserName=username)
    # 应用更新(实际需要更新配置文件)
    print(f"新AccessKeyId: {new_key['AccessKey']['AccessKeyId']}")
    # 等24小时后删除旧密钥
    # iam.delete_access_key(UserName=username, AccessKeyId=old_key_id)
个人经验:轮换时一定要做灰度——先让新密钥上线,确认旧密钥没有报错再删。否则一旦有漏掉的服务,整个挂掉。

(JWT)

JWT天然支持过期时间,我习惯把access_设15分钟,refresh_设7天。refresh_也定期轮换——每次刷新时发一个新refresh_,旧的就失效。这样就算盗了refresh_,也只能用一会儿。

加密证书

证书轮换最怕的就是"证书过期,服务挂掉"。我建议用ACME协议自动续签,或者至少提前30天发告警。有一次我在凌晨两点被叫起来——客户系统的SSL证书过期了半小时,用户直接访问不了。从那以后我再也不敢手动管证书了。

凭据轮换的核心知识体系

下面这张图可以帮你把这一章讲的东西串起来。嗯,看一眼就清楚了。

凭据轮换核心知识体系 凭据轮换 为什么要轮换 常见凭据类型 轮换最佳实践 泄漏止损 合规要求 内部离职 静态密码 (JWT) 加密证书 临时凭证 灰度切换 自动化轮换 过期前告警 短生命周期
一句话总结:凭据轮换就是把"一次性泄漏、永远失效"变成"即使泄漏,窗口极短"。核心原则是——能自动就别手动,能短周期就别长周期,能灰度就别一刀切。

我习惯用一句话记:轮换是安全运营的呼吸节奏。不呼吸,系统就憋死了。