Vault 리스, 갱신, 폐기
Vault 리스, 갱신, 폐기 (Lease, Renew, and Revoke)
Vault의 동적 시크릿과 service 타입 인증 토큰은 생성될 때마다 **리스(lease)**를 갖고 있어요. 리스는 유효기간(TTL), 갱신 가능 여부 같은 메타데이터예요. Vault는 그 기간 동안 데이터가 유효하다고 보장하고, 리스가 만료되면 데이터를 자동으로 폐기할 수 있어요.
출처: https://developer.hashicorp.com/vault/docs/concepts/lease
리스의 존재 이유는 소비자가 Vault에 주기적으로 확인하도록 만들기 위함이에요. 갱신(허용되는 경우)을 하거나 대체 시크릿을 요청해야 하니까요. 이렇게 하면 감사 로그가 더 가치 있어지고, 키 회전(key rolling)도 훨씬 수월해져요. 그래서 모든 동적 시크릿은 리스가 필수예요 — 데이터가 영원히 유효하게 하려는 경우에도 리스가 있어서 소비자가 주기적으로 확인하게 해요.
동적 시크릿을 vault read로 읽으면 항상 lease_id가 함께 돌아와요. 이 ID로 vault lease renew·vault lease revoke 명령으로 리스를 관리해요.
리스 갱신 시 요청할 수 있는 게 increment예요. 주의할 점은 이 값이 "현재 TTL 끝에 더하는 값"이 아니라 현재 시점부터의 증가라는 거예요.
$ vault lease renew -increment=3600 my-lease-id
이 명령은 리스 TTL을 지금부터 1시간(3600초)으로 조정하라는 뜻이에요. 증가를 현재 시점 기준으로 하면 TTL을 줄이는 것도 쉬워져요. 다만 서버가 요청을 그대로 받아주지 않을 수 있으니, 갱신 결과의 반환값을 꼭 확인해서 새 리스가 뭔지 봐야 해요.
리스는 **폐기(revoke)**될 수도 있어요. 폐기하면 그 시크릿이 즉시 무효화되고 추가 갱신이 막혀요. 예를 들어 AWS 시크릿 엔진에서는 리스가 폐기되는 순간 AWS에서 액세스 키가 삭제돼요. 폐기는 API, vault lease revoke CLI, UI의 Access 탭에서 하거나 Vault가 자동으로 할 수 있어요 — 리스가 만료되면 자동 폐기가 되고, 토큰이 폐기되면 그 토큰의 리스도 함께 폐기돼요.
리스 ID는 요청했던 시크릿의 경로가 프리픽스로 붙는 구조예요. 그래서 프리픽스 기반 폐기로 시크릿 트리 전체를 한 번에 폐기할 수 있어요.
$ vault lease revoke -prefix aws/
이러면 모든 AWS 액세스 키를 한 번에 폐기해요. 특정 시스템에 침입이 의심될 때 해당 백엔드의 시크릿을 빠르고 쉽게 무효화하는 데 매우 유용해요.
더 알아보기
- 토큰 갱신 로직 코드 예시: Authentication
- KV 백엔드의 lease 반환 차이: Secrets