Boundary 구성 값 암호화

Boundary 구성 값 암호화

Boundary는 구성 파일의 민감한 값을 config 키 관리 서비스(KMS) 블록으로 암호화해요. 그래서 클라우드 API 키, 데이터베이스 자격 증명, 기타 비밀을 노출하지 않고 파일을 버전 관리에 커밋할 수 있어요. 값을 {{encrypt()}}로 표시하고 boundary config encrypt를 실행하면, Boundary가 시작 시 자동으로 복호화해요.

출처: HashiCorp Boundary docs

본문

키가 어떻게 동작하는지 더 자세히 보려면 config KMS 키를 참고해요.

요구 사항 (Requirements)

구성 값을 암호화하려면 다음이 필요해요.

  • KMS 공급자의 클라우드 API 키나 데이터베이스 자격 증명 같은 민감한 값이 들어 있는 Boundary 구성 파일.
  • 사용자와 Boundary 서버가 모두 접근할 수 있는 KMS. Boundary는 시작 시 값을 복호화하기 위해 동일한 KMS에 닿을 수 있어야 해요.
  • boundary CLI에 대한 접근.

자체 관리형 Enterprise 배포에서는 config KMS 키를 구성할 수 있어요.

구성 파일 암호화 (Encrypt a configuration file)

다음 단계를 완료해서 민감한 값을 암호화하고 암호화된 파일로 Boundary를 시작해요.

  1. 구성 파일에 purpose = "config"인 kms 블록을 추가해요. Boundary는 이 블록을 사용해서 표시된 값을 암호화하고 복호화하며, Boundary의 런타임 데이터를 보호하는 KMS 블록과는 분리돼 있어요.
kms "aead" {
  purpose   = "config"
  aead_type = "aes-gcm"
  key       = "7xtkEoS5EXPbgynwd+dDLHopaCqK8cq0Rpep4eooaTs="
}

이 예시는 키를 같은 파일에 기록하므로 그 자체로는 아무 보호도 제공하지 않아요. 로컬 테스트에만 사용해요. 프로덕션에서는 클라우드 KMS 공급자를 사용하거나 config 블록을 별도 파일에 두어요. 지원되는 공급자는 KMS 구성 문서를 참고해요.

  1. 각 민감한 값을 {{encrypt()}} 마커로 감싸요.
kms "aead" {
  purpose   = "root"
  aead_type = "aes-gcm"
  key       = "{{encrypt(eb78KqCwowELYnkOOko/XYz01q1ax3g76J1vCAvt5dQ=)}}"
}

config KMS 블록을 같은 파일에 인라인으로 정의하면 따옴표로 묶인 문자열 값만 암호화할 수 있고, 마커는 문자열을 구분하는 따옴표 안에 있어야 해요. 따옴표로 묶이지 않은 문자열이 아닌 값을 암호화하려면 config KMS 블록을 별도 파일에 정의하고 -config-kms로 전달해요.

  1. boundary config encrypt를 실행하고 -config 플래그로 구성 파일을 전달해요. -overwrite가 없으면 명령은 먼저 검사할 수 있도록 결과를 stdout에 출력해요.
$ boundary config encrypt -config config.hcl

결과를 같은 파일에 다시 쓰려면 -overwrite를 추가해요.

$ boundary config encrypt -config config.hcl -overwrite

config KMS 블록에 별도 파일을 사용하려면 -config-kms를 추가해요.

$ boundary config encrypt -config config.hcl -config-kms kms-config.hcl -overwrite

모든 명령 옵션은 boundary config encrypt 문서를 참고해요.

  1. 명령이 각 표시된 값을 {{decrypt()}} 마커 안의 암호화된 형태로 교체했는지 확인해요.
kms "aead" {
  purpose   = "root"
  aead_type = "aes-gcm"
  key       = "{{decrypt(bXktZW5jcnlwdGVkLXZhbHVl)}}"
}

{{decrypt()}} 마커는 시작 시 복호화할 값을 Boundary에 알려줘요. 이걸 제거하지 마세요. -strip으로 명령을 실행하면 Boundary가 암호화된 값의 구분 기호와 함께 마커를 제거해요.

  1. 서버를 시작해요.
$ boundary server -config config.hcl

Boundary는 시작 시 config KMS 블록을 확인해요. 발견하면 구성을 적용하기 전에 암호화된 값을 복호화하는 데 그 블록을 사용해요.

구성 파일 복호화 (Decrypt a configuration file)

구성 파일을 평문으로 되돌리려면(문제 해결 또는 값 회전을 위해) {{decrypt()}}로 표시된 값에 대해 boundary config decrypt를 실행해요.

$ boundary config decrypt -config config.hcl -overwrite

이 명령은 각 값을 복원해서 {{encrypt()}} 마커로 되돌려, 값을 편집하고 파일을 다시 암호화할 수 있게 해줘요. 모든 명령 옵션은 boundary config decrypt 문서를 참고해요.

문제 해결 (Troubleshooting)

필수 파라미터 -config 누락 (Missing required parameter -config)

config encrypt와 config decrypt 명령은 -config 플래그가 필요해요. 파일 이름만 전달하는 것으로는 충분하지 않아요.

$ boundary config encrypt -overwrite config.hcl

Missing required parameter -config

-config로 파일을 전달해요.

$ boundary config encrypt -config config.hcl -overwrite

"config" 목적의 래퍼를 찾을 수 없음 (No wrapper with "config" purpose found)

Boundary가 purpose = "config"인 kms 블록을 찾지 못했어요. -config에 전달한 파일에 블록이 있는지 확인하거나, 그 파일을 포함하는 파일을 -config-kms로 전달해요.

암호화 후 Boundary가 시작되지 않음 (Boundary does not start after you encrypt the file)

Boundary는 시작 시 표시된 값을 복호화하므로, 암호화할 때 사용한 것과 동일한 KMS에 닿을 수 있어야 해요. KMS에 닿을 수 없으면 값을 복호화할 수 없고 시작하지 않아요. 서버가 KMS 공급자에 닿을 수 있고 그 자격 증명이 여전히 유효한지 확인해요.

다음 단계 (Next steps)

  • config KMS 키가 어떻게 Boundary의 다른 KMS 키와 관련되는지 설명해요.
  • KMS 공급자 마이그레이션이 다른 KMS로 이동하는 방법을 설명해요.

더 알아보기 (Learn more)