키 회전

키 회전 (Key rotation)

Vault는 목적이 다른 여러 암호화 키를 저장합니다. Vault는 구성된 한계에 따라 주기적으로, 또는 잠재적 누출이나 손상된 서비스에 대응해 키를 변경하는 키 회전(key rotation)을 사용합니다.

출처: 문서

본문

관련 키 정의 (Relevant key definitions)

키 회전에 관여하는 키는 네 가지입니다:

  • 내부 암호화 키 (internal encryption key) — 스토리지 백엔드에 기록되는 데이터를 암호화하고 보호합니다.
  • 루트 키 (root key) — Vault를 봉인하고 내부 암호화 키를 보호하는 "마스터" 키입니다.
  • 봉인 해제 키 (unseal key) — 루트 키를 재구성하는 데 사용되는 루트 키의 일부(공유)입니다. 기본적으로 Vault는 Shamir의 비밀 공유 알고리즘을 사용해 루트 키를 5개 공유로 나눕니다.
  • 업그레이드 키 (upgrade key) — 고가용성 배포에서 키 회전 중에 생성되는 내부 암호화 키의 수명이 짧은 사본입니다. Vault는 이전 내부 암호화 키로 업그레이드 키를 암호화합니다.

키 회전이 작동하는 방식 (How key rotation works)

Vault는 고가용성 배포에서도 루트 키, 봉인 해제 키, 백엔드 암호화 키를 갱신하는 온라인 rekey 및 rotate 작업을 지원합니다. 복제된 배포에서 active 노드가 이 작업을 수행하고, standby 노드는 수동 봉인 해제 작업 없이 업그레이드 키로 자신의 키를 갱신합니다.

  1. Rekey는 구성된 봉인 해제 키 분할과 임계값으로 시작합니다:
    1. Vault가 구성된 임계값의 봉인 해제 키를 받습니다.
    2. Vault가 새 루트 키를 생성하고 나눕니다.
    3. Vault가 내부 암호화 키를 새 루트 키로 다시 암호화합니다.
    4. Vault가 새 봉인 해제 키를 반환합니다.
  2. Rotation이 시작됩니다:
    1. Vault가 새 내부 암호화 키를 생성합니다.
    2. Vault가 새 암호화 키를 내부 키링(keyring)에 추가합니다.
    3. Vault가 (필요하면) 임시 업그레이드 키 를 생성합니다.

키 회전

회전이 완료되면 Vault는 새 키로 스토리지 백엔드에 대한 새 쓰기를 암호화할 수 있지만, 이전 키로 기록된 항목은 여전히 복호화할 수 있습니다.

관련 API 엔드포인트: ConfigureKeyRotation - POST:/sys/rotate/config

NIST 회전 지침 (NIST rotation guidance)

미국 국립표준기술연구소(NIST)는 누출이나 손상 이벤트가 없더라도 암호화 키를 주기적으로 회전할 것을 권장합니다.

AES-256-GCM 암호화의 특성 때문에 NIST 출판물 800-38D는 ~2^32회 암호화를 수행하기 전에 키를 회전할 것을 권장합니다. 기본적으로 Vault는 vault.barrier.estimated_encryptions 메트릭을 모니터링하고 2^32회 암호화 작업에 도달하기 전에 백엔드 암호화 키를 자동으로 회전합니다.

다음 합으로 vault.barrier.estimated_encryptions 메트릭을 근사할 수 있습니다:

ESTIMATED_OPS = PUT_EVENTS + CREATE_EVENTS + MERKLE_FLUSH_EVENTS + WAL_INDEX

여기서:

  • PUT_EVENTSvault.barrier.put 텔레메트리 메트릭입니다.
  • CREATION_EVENTStoken_typebatchvault.token.creation 메트릭입니다.
  • MERKLE_FLUSH_EVENTSmerkle.flushDirty.num_pages 텔레메트리 메트릭입니다.
  • WAL_INDEX 는 현재 write-ahead-log 인덱스입니다.

팁: Vault는 회전을 지원하기 위해 암호화 횟수를 주기적으로 영속화합니다. 저장 작업에는 1초 타임아웃이 있어 Vault가 과부하 상태일 때 성능 영향이 제한됩니다. seal wrap을 사용하면 암호화 횟수 영속화에 seal 백엔드가 관여하므로, HSM 같은 일부 seal은 응답에 1초보다 오래 걸릴 수 있습니다. Vault 서버에서 VAULT_ENCRYPTION_COUNT_PERSIST_TIMEOUT 환경 변수를 "5s" 같은 더 큰 값으로 설정해 저장 타임아웃을 재정의할 수 있습니다.

더 알아보기 (Learn more)