AWS KMS로 데이터베이스 시크릿 암호화하기
AWS KMS로 데이터베이스 시크릿 암호화하기 (Encrypt database secrets using AWS KMS)
AWS Key Management Service의 암호화 키를 사용해 Grafana 데이터베이스의 시크릿을 암호화할 수 있어요. KMS 키를 만들고, Grafana 구성 파일에 [security.encryption.awskms.<KEY-NAME>] 섹션을 추가한 뒤 envelope encryption을 켜고 Grafana를 재시작하면 됩니다.
출처: 문서
본문
전제 조건:
- KMS 키를 보고·만들 권한과 그 키에 접근할 프로그래매틱 자격 증명이 있는 AWS 계정
- Grafana 구성 파일 접근 권한
- AWS Management Console 또는 AWS KMS API로 대칭 API 키를 만드세요. 자세한 내용은 Creating keys를 참고하세요.
- Key ID를 가져오세요. AWS 용어로는 키 ID, 키 ARN, 별칭 이름 또는 별칭 ARN일 수 있어요. 검색 방법은 Finding the key ID and key ARN을 참고하세요.
- 만든 키를 볼 권한이 있는 프로그래매틱 자격 증명(access key ID와 secret access key)을 만드세요. AWS에서는 key policies, IAM policies, grants로 KMS 키 접근을 제어할 수 있어요. access key ID·secret access key와 함께 session token을 제공해야 하는 임시 자격 증명도 만들 수 있습니다.
- Grafana에서 envelope encryption을 켜세요.
- Grafana 구성 파일(대개
grafana.ini)에 AWS KMS 상세 정보를 추가하세요.- a.
[security.encryption.awskms.<KEY-NAME>]형식의 새 섹션을 추가하세요.<KEY-NAME>은 다른 provider 키와 구분하는 고유 이름이에요. - b. 다음 값을 채우세요:
key_id: KMS에 저장된 키 참조. 키 ID, 키 ARN, 별칭 이름, 별칭 ARN 가능. 별칭이면alias/접두사 사용. 다른 AWS 계정의 키는 ARN이나 별칭으로 지정.access_key_id: 생성한 AWS Access Key IDsecret_access_key: 생성한 AWS Secret Access Keyregion: KMS 키를 만든 AWS 리전 (키 ARN에 포함됨)
- a.
key_id 옵션 예시:
| 값 | 예시 |
| --- | --- |
| Key ID | 1234abcd-12ab-34cd-56ef-1234567890ab |
| Key ARN | arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab |
| Alias name | alias/ExampleAlias |
| Alias ARN | arn:aws:kms:us-east-2:111122223333:alias/ExampleAlias |
grafana.ini의 예시:
# AWS key management service provider setup
;[security.encryption.awskms.example-encryption-key]
# Reference to a KMS key - either key ID, key ARN, alias name, or ARN
;key_id = 1234abcd-12ab-34cd-56ef-1234567890ab
# AWS access key ID
;access_key_id = «redacted:AKIA…»
# AWS secret access key
;secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# AWS region, for example eu-north-1
;region = eu-north-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 = awskms.example-encryption-key
# list of configured key providers, space separated
available_encryption_providers = awskms.example-encryption-key
- Grafana 재시작하세요.
- (선택) Grafana 루트 디렉터리에서 커맨드라인으로 새 키로 데이터베이스의 모든 시크릿을 다시 암호화하세요.
grafana cli admin secrets-migration re-encrypt
기존 시크릿을 다시 암호화하지 않으면 이전 암호화 키로 남아 있어도 사용자는 여전히 접근할 수 있어요. 이 과정은 데이터베이스의 시크릿(데이터 소스 등) 수에 따라 몇 분 걸릴 수 있으며, 진행 중 오류가 발생하거나 알림 전송이 안 될 수 있어요. 데이터 소스·대시보드를 만들기 전 Grafana 초기 설정 중에 이 키를 업데이트한다면 마이그레이션할 시크릿이 없으므로 이 단계는 필요 없어요.