|
| 1 | +# 第三步:increment 是「从现在开始算」——可以主动缩短租约 |
| 2 | + |
| 3 | +这一步演示文档 §4.1 那条最反直觉的论断: |
| 4 | + |
| 5 | +> The requested increment is **not** an increment at the end of the current |
| 6 | +> TTL; it is an increment from the current time. |
| 7 | +
|
| 8 | +也就是说,**应用可以通过续约让自己手里的凭据提前过期**。 |
| 9 | + |
| 10 | +签一份新凭据(前一份大概率已经被天花板撞死了): |
| 11 | + |
| 12 | +```bash |
| 13 | +vault read database/creds/readonly |
| 14 | +LEASE_ID=$(vault list -format=json sys/leases/lookup/database/creds/readonly | jq -r ".[-1]") |
| 15 | +FULL_LEASE_ID="database/creds/readonly/$LEASE_ID" |
| 16 | +``` |
| 17 | + |
| 18 | +看一眼当前 TTL(默认 60 秒): |
| 19 | + |
| 20 | +```bash |
| 21 | +vault lease lookup "$FULL_LEASE_ID" | grep -E "ttl|expire" |
| 22 | +``` |
| 23 | + |
| 24 | +现在做一件"看起来在续约、实际在缩短"的事——申请 increment=10: |
| 25 | + |
| 26 | +```bash |
| 27 | +vault lease renew -increment=10 "$FULL_LEASE_ID" |
| 28 | +``` |
| 29 | + |
| 30 | +返回的 `lease_duration` 是 **10**,不是 60。再确认一下: |
| 31 | + |
| 32 | +```bash |
| 33 | +vault lease lookup "$FULL_LEASE_ID" | grep -E "ttl|expire" |
| 34 | +``` |
| 35 | + |
| 36 | +`expire_time` 已经被往**前**挪到了"现在 + 10s"。再过 10 秒: |
| 37 | + |
| 38 | +```bash |
| 39 | +sleep 12 && vault lease lookup "$FULL_LEASE_ID" 2>&1 || echo "(已过期)" |
| 40 | +``` |
| 41 | + |
| 42 | +应该看到 `invalid lease`——这条凭据已经被 Vault 自动 revoke 了,对应的 |
| 43 | +Postgres 用户也消失了: |
| 44 | + |
| 45 | +```bash |
| 46 | +docker exec -i learn-postgres \ |
| 47 | + psql -U root -c "SELECT usename, valuntil FROM pg_user WHERE usename LIKE 'v-%';" |
| 48 | +``` |
| 49 | + |
| 50 | +## 这个设计为什么有用? |
| 51 | + |
| 52 | +回想一下应用的真实场景: |
| 53 | + |
| 54 | +> 我的请求 handler 拿一份数据库凭据,**只会用 5 秒**—— |
| 55 | +> 不需要默认的 1 分钟 TTL,更不需要 5 分钟的 max_ttl。 |
| 56 | +
|
| 57 | +按这个模型,应用应该: |
| 58 | + |
| 59 | +1. `vault read database/creds/readonly` 拿凭据; |
| 60 | +2. **立刻** `vault lease renew -increment=10`,把租约缩到 10 秒; |
| 61 | +3. 用完就完,不需要主动 revoke——10 秒后 Vault 自己回收。 |
| 62 | + |
| 63 | +这样 Postgres 里同时存活的临时用户数量就被压到了**实际并发数 × 10 秒**, |
| 64 | +而不是 **实际并发数 × default_ttl**。一个大流量服务靠这种"自缩短" |
| 65 | +模式,能让目标系统侧的资源占用降一个数量级。 |
| 66 | + |
| 67 | +> 文档 §4.1 把这种用法描述为: |
| 68 | +> |
| 69 | +> > makes it easy for users to reduce the length of leases if they don't |
| 70 | +> > actually need credentials for the full possible lease period, allowing |
| 71 | +> > those credentials to expire sooner and resources to be cleaned up earlier. |
| 72 | +
|
| 73 | +`vault-basics` 第 4 步的 `vault lease renew "$FULL_LEASE_ID"` 命令没有 |
| 74 | +带 `-increment`,那种用法是"按服务端默认顶满"。带上 `-increment=N` 才 |
| 75 | +是真正用足这个 API 的能力。 |
0 commit comments