데이터베이스 암호화 구성
데이터베이스 암호화 구성 (Configure database encryption)
Grafana의 데이터베이스에는 데이터 소스를 쿼리하고, 알림을 보내고, 그 외 Grafana 내 기능을 수행하는 데 사용되는 시크릿이 저장돼요. Grafana는 이러한 시크릿을 데이터베이스에 쓰기 전에 AES(Advanced Encryption Standard)라는 대칭 키 암호화 알고리즘으로 암호화합니다. Grafana v9.0부터는 envelope encryption(봉투 암호화)이 기본으로 적용돼요.
본문
참고: Grafana v9.0 이상은 기본적으로 envelope encryption을 사용하며, 이는 암호화 과정에 간접 계층을 추가해 이전 Grafana 버전에 대한 암묵적인 호환성 변경(breaking change)을 도입해요. envelope encryption으로 Grafana 인스턴스를 운영하는 방법은 Operational work 섹션을 참고하세요.
참고: Grafana Enterprise에서는 기본 AES-CFB 대신 AES-GCM(Galois/Counter Mode)으로 시크릿을 암호화할 수도 있어요.
Envelope encryption (봉투 암호화)
참고: Grafana v9.0부터 구성에
disableEnvelopeEncryptionfeature toggle을 추가하면 envelope encryption을 끌 수 있어요.
단일 키로 모든 시크릿을 암호화하는 대신, Grafana는 데이터 암호화 키(DEK, data encryption keys)라는 키 집합으로 시크릿을 암호화해요. 이 DEK들은 Grafana 구성의 secret_key 속성 또는 KMS(key management service)의 키로 데이터베이스를 암호화해 구성된 단일 키 암호화 키(KEK, key encryption key)로 다시 암호화돼요.
암묵적 호환성 변경 (Implicit breaking change):
Envelope encryption은 Grafana 데이터베이스에 저장된 시크릿이 암호화되는 방식을 바꾸기 때문에 v9.0 이전 버전에 대한 암묵적 호환성 변경을 도입해요. 관리자는 데이터베이스 암호화 관점에서 아무 작업 없이 Grafana v9.0으로 업그레이드할 수 있지만, v9.0으로 업그레이드한 뒤 생성·수정된 시크릿은 이전 버전이 복호화할 수 없기 때문에 v8.5 이하로 롤백해야 한다면 매우 주의해야 해요.
Grafana v8.5는 선택적 feature toggle 뒤에 envelope encryption을 구현했어요. v8.5로 다운그레이드해야 하는 관리자는 구성에 envelopeEncryption feature toggle을 추가해 envelope encryption을 활성화하는 해결책을 쓸 수 있어요.
운영 작업 (Operational work)
데이터베이스 암호화 관점에서 Grafana 관리자는 다음을 할 수 있어요.
- Re-encrypt secrets (시크릿 재암호화): fresh 데이터 키로 envelope encryption으로 시크릿을 재암호화해요.
- Roll back secrets (시크릿 롤백): envelope encryption으로 암호화된 시크릿을 복호화하고 레거시 암호화로 재암호화해요.
- Re-encrypt data keys (데이터 키 재암호화): fresh 키 암호화 키와 KMS 통합으로 데이터 키를 재암호화해요.
- Rotate data keys (데이터 키 회전): 활성 데이터 키를 비활성화하고 fresh 키를 사용해 암호화를 계속해요.
Re-encrypt secrets:
시크릿을 재암호화하는 목적:
- 기존 시크릿의 암호화를 레거시에서 envelope encryption으로 앞으로 이동.
- 데이터 키 회전 후 시크릿 재암호화.
grafana cli admin secrets-migration re-encrypt 명령 또는 Grafana Admin API의 /encryption/reencrypt-secrets 엔드포인트로 시크릿을 재암호화해요. 여러 번 실행해도 안전하며, 유지보수 모드에서 실행하는 것이 좋아요.
Roll back secrets:
envelope encryption으로 암호화된 시크릿을 레거시 암호화로 롤백할 수 있어요. 성공하지 못한 업그레이드 후 v9.0 이전 Grafana 버전으로 다운그레이드하려면 필요할 수 있어요. grafana cli admin secrets-migration rollback 명령 또는 /encryption/rollback-secrets 엔드포인트를 사용해요.
Re-encrypt data keys:
특정 KEK로 암호화된 데이터 키를 재암호화할 수 있어요. 이를 통해 기존 데이터 키를 새 KEK 버전으로 재암호화하거나 완전히 다른 KEK로 재암호화할 수 있어요. grafana cli admin secrets-migration re-encrypt-data-keys 명령 또는 /encryption/reencrypt-data-keys 엔드포인트를 사용해요.
Rotate data keys:
데이터 키를 회전해 활성 데이터 키를 비활성화하고 암호화 작업에 사용하지 않을 수 있어요. 고가용성 구성에서는 회전된 데이터 키가 더 이상 암호화에 사용되지 않는지 확인하기 위해 데이터 키 캐시의 TTL(time-to-live)이 만료될 때까지 기다려야 할 수 있어요. 새 데이터 키는 암호화 작업용으로 요청 시 생성돼요.
참고: 데이터 키 회전은 시크릿을 암묵적으로 재암호화하지 않아요. Grafana는 여전히 그로 암호화된 시크릿을 복호화하는 데 회전된 데이터 키를 계속 사용해요. 회전된 데이터 키를 암호화와 복호화 모두에 완전히 사용하지 않으려면 시크릿 재암호화를 참고하세요.
/encryption/rotate-data-keys 엔드포인트로 데이터 키를 회전해요. 여러 번 호출해도 안전하며, 유지보수 모드에서 실행하는 것이 좋아요.
KMS의 키로 데이터베이스 암호화하기
Grafana Enterprise를 사용한다면 KMS(key management service) 제공자와 통합하고 Grafana의 암호화 작업 모드를 AES-CFB에서 AES-GCM으로 변경할 수 있어요.
KMS 키를 사용해 Grafana 데이터베이스에 저장된 시크릿을 암호화하도록 선택할 수 있어요. KMS는 암호화 키를 만들고 관리하며 여러 서비스에 걸친 사용을 제어하도록 설계된 안전한 중앙 저장 위치예요. KMS와 통합하면 Grafana는 암호화 키를 직접 저장하지 않아요. 대신 Grafana는 KMS 자격 증명과 키의 식별자를 저장하며, 이를 사용해 데이터베이스를 암호화해요.
Grafana는 다음 키 관리 서비스와 통합돼요.
- AWS KMS
- Azure Key Vault
- Google Cloud KMS
- Hashicorp Key Vault
암호화 모드를 AES-GCM으로 변경하기
Grafana는 시크릿을 AES-CFB(Cipher FeedBack mode)로 암호화해요. 회사의 보안 요구사항을 충족하거나 다른 서비스와 일관성을 유지하기 위해 AES-GCM(Galois/Counter Mode)을 사용하고 싶을 수 있어요. 암호화 모드를 변경하려면 Grafana 구성 파일의 [security.encryption] 섹션에서 algorithm 값을 업데이트해요. 자세한 내용은 Enterprise 구성 문서를 참고하세요.