Hashicorp Vault로 데이터베이스 시크릿 암호화

Hashicorp Vault로 데이터베이스 시크릿 암호화 (Encrypt database secrets using Hashicorp Vault)

Hashicorp Vault의 암호화 키를 사용해 Grafana 데이터베이스의 시크릿을 암호화할 수 있어요. envelope encryption을 켜고, grafana.ini에 Hashicorp Vault 프로바이더 섹션을 추가해 기본 암호화 프로바이더로 설정하는 전체 과정을 안내합니다.

출처: 문서

본문

Hashicorp Vault의 암호화 키를 사용해 Grafana 데이터베이스의 시크릿을 암호화할 수 있어요.

사전 요구사항 (Prerequisites)

  • Hashicorp Vault를 관리해 secrets engine을 활성화하고 토큰을 발급할 권한
  • Grafana 설정 파일 접근 권한
  • Hashicorp Vault에서 transit secrets engine 활성화
  • 이름 있는 암호화 키(named encryption key) 만들기
  • 주기적 서비스 토큰(periodic service token) 만들기

설정 절차

  1. Grafana에서 envelope encryption을 켭니다.
  2. Hashicorp Vault 세부 정보를 Grafana 설정 파일(OS에 따라 보통 grafana.ini)에 추가합니다:
    • a. 설정 파일에 [security.encryption.hashicorpvault.<KEY-NAME>] 형식의 이름으로 새 섹션을 추가합니다. 여기서 <KEY-NAME>은 다른 프로바이더 키 사이에서 이 키를 고유하게 식별하는 임의의 이름이에요.
    • b. 섹션을 다음 값으로 채웁니다:
      • token: Hashicorp Vault 내 인증에 사용되는 주기적 서비스 토큰
      • url: Hashicorp Vault 서버의 URL
      • transit_engine_path: transit engine의 마운트 지점
      • key_ring: 암호화 키의 이름
      • token_renewal_interval: 토큰을 갱신할 빈도. 주기적 서비스 토큰의 period 값보다 작아야 함

grafana.ini 파일의 Hashicorp Vault 프로바이더 섹션 예시:

# Example of Hashicorp Vault provider setup
;[security.encryption.hashicorpvault.example-encryption-key]
# Token used to authenticate within Vault. We suggest to use periodic tokens: more on token types https://www.vaultproject.io/docs/concepts/tokens#service-tokens
;token =
# Location of the Hashicorp Vault server
;url = http://localhost:8200
# Mount point of the transit secret engine
;transit_engine_path = transit
# Key ring name
;key_ring = grafana-encryption-key
# Specifies how often to check if a token needs to be renewed, should be less than a token's period value
token_renewal_interval = 5m
  1. grafana.ini 설정 파일의 [security] 섹션을 새로 만든 Encryption Provider 키로 업데이트합니다:
[security]
# previous encryption key, used for legacy alerts, decrypting existing secrets or used as default provider when external providers are not configured
secret_key = AaaaAaaa
# encryption provider key in the format <PROVIDER>.<KEY-NAME>
encryption_provider = hashicorpvault.example-encryption-key
# list of configured key providers, space separated
available_encryption_providers = hashicorpvault.example-encryption-key
  1. Grafana를 재시작합니다.
  2. (선택) Grafana Enterprise의 루트 디렉토리에서 명령줄로 데이터베이스 내 모든 시크릿을 새 키로 다시 암호화하려면:
grafana cli admin secrets-migration re-encrypt

기존 시크릿을 다시 암호화하지 않으면 기존 암호화 키로 암호화된 상태로 유지되며, 사용자는 여전히 접근할 수 있어요.

참고: 이 과정은 데이터베이스의 시크릿(예: 데이터 소스) 수에 따라 몇 분 걸릴 수 있어요. 실행 중 사용자가 오류를 겪을 수 있고, 알림이 전송되지 않을 수도 있습니다.

참고: 데이터 소스나 대시보드를 만들기 전 Grafana 초기 설정 중에 이 암호화 키를 업데이트하는 경우, 마이그레이션할 시크릿이 없으므로 이 단계는 필요하지 않아요.

더 알아보기 (Learn more)