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 구성 파일 접근 권한
  1. AWS Management Console 또는 AWS KMS API로 대칭 API 키를 만드세요. 자세한 내용은 Creating keys를 참고하세요.
  2. Key ID를 가져오세요. AWS 용어로는 키 ID, 키 ARN, 별칭 이름 또는 별칭 ARN일 수 있어요. 검색 방법은 Finding the key ID and key ARN을 참고하세요.
  3. 만든 키를 볼 권한이 있는 프로그래매틱 자격 증명(access key ID와 secret access key)을 만드세요. AWS에서는 key policies, IAM policies, grants로 KMS 키 접근을 제어할 수 있어요. access key ID·secret access key와 함께 session token을 제공해야 하는 임시 자격 증명도 만들 수 있습니다.
  4. Grafana에서 envelope encryption을 켜세요.
  5. 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 ID
      • secret_access_key: 생성한 AWS Secret Access Key
      • region: KMS 키를 만든 AWS 리전 (키 ARN에 포함됨)

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
  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
  1. Grafana 재시작하세요.
  2. (선택) Grafana 루트 디렉터리에서 커맨드라인으로 새 키로 데이터베이스의 모든 시크릿을 다시 암호화하세요.
grafana cli admin secrets-migration re-encrypt

기존 시크릿을 다시 암호화하지 않으면 이전 암호화 키로 남아 있어도 사용자는 여전히 접근할 수 있어요. 이 과정은 데이터베이스의 시크릿(데이터 소스 등) 수에 따라 몇 분 걸릴 수 있으며, 진행 중 오류가 발생하거나 알림 전송이 안 될 수 있어요. 데이터 소스·대시보드를 만들기 전 Grafana 초기 설정 중에 이 키를 업데이트한다면 마이그레이션할 시크릿이 없으므로 이 단계는 필요 없어요.

더 알아보기 (Learn more)