매뉴얼웍스 6.0.17 버전부터 사용자 이름과 이메일을 데이터베이스에 암호화해서 저장하는 기능을 지원합니다.
매뉴얼웍스는 사용자(R_USER) 테이블의 이름과 이메일을 AES-256/GCM 알고리즘으로 암호화해 저장하는 기능을 제공합니다. 이 기능을 활성화하면 사용자를 저장할 때 이름과 이메일을 암호화하고, 조회할 때 자동으로 복호화합니다.
사용자 정보 암호화 활성화
사용자 정보 암호화 기능은 시작 시크립트 옵션으로 켜고 끕니다. 시작 스크립트 옵션에 다음 옵션을 추가합니다.
3rabbitz.enable_user_encryption=true
속성 값을 설정하지 않거나 true가 아닌 값을 설정하면 암호화 기능이 비활성화됩니다.
키 파일
암호화에 사용하는 키는 데이터 디렉터리의 .key.json 파일에 저장됩니다.
키 파일이 없으면 시작할 때 32 바이트 AES 키를 자동으로 생성하고
.key.json을 만듭니다.키 파일을 데이터 디렉터리에 저장하므로 클러스터 노드들이 동일한 키를 공유합니다.
키 파일을 분실하거나 임의로 수정하면 사용자 이름과 이메일을 복호화할 수 없습니다. 안전한 곳에 보관 합니다.
서버 이중화 환경에서는 모든 노드가 같은 키 파일을 사용해야 합니다. 키 파일을 데이터 디렉터리에 두지 않으면 노드별로 다른 키가 생성되어 서로 암호화한 데이터를 복호화할 수 없습니다.
키 파일은 다음과 같은 JSON 형식입니다.
{
"active": "k1",
"keys": {
"k1": "Base64로 인코딩된 32바이트 키"
}
}active: 현재 사용하는 키의 ID입니다. 새로 저장하는 데이터는 이 키로 암호화합니다.
keys: 사용 가능한 키 목록입니다. 키 ID와 Base64로 인코딩한 32 바이트 키 값을 짝지어 입력합니다.
키 파일을 수정했을 때는 매뉴얼웍스를 대시 시작합니다.
키 ID 규칙
키 ID에는 다음 규칙을 적용합니다.
plain은 예약어이므로 키 ID로 사용할 수 없습니다.키 ID에
}문자를 포함할 수 없습니다.키 값은 Base64로 인코딩한 32 바이트(AES-256) 데이터여야 합니다.
암호화한 값의 형식
암호화한 값은 다음 형식의 접두사를 가집니다.
{v:키ID}Base64로 인코딩된 IV+암호문예를 들어 k1 키로 암호화한 값은 다음과 같이 시작합니다.
{v:k1}fI3YfyWSJ+...접두사 덕분에 어떤 키로 암호화했는지 식별할 수 있어 키 회전이 가능합니다.
콘솔에서 generate-key 명령어로키를 만들 수 있습니다.
generate-key
평문 모드(plain mode)
암호화를 적용하지 않은 평문으로 사용자 정보를 저장하려면 키 파일의 active 값을 plain으로 설정합니다.
{
"active": "plain",
"keys": {
"k1": "Base64로 인코딩된 32바이트 키"
}
}평문 모드에서는 다음과 같이 동작합니다.
새로 저장하는 데이터는 암호화하지 않고 평문으로 저장합니다.
기존에 암호화된 데이터(
{v:키ID}접두사가 있는 값)는keys에 등록된 키로 복호화하여 보여줍니다.마이그레이션을 실행하면 암호화된 데이터를 모두 평문으로 다시 저장합니다.
키 회전
키를 교체하려면 새 키를 추가하고 active 값을 새 키 ID로 변경합니다.
{
"active": "k2",
"keys": {
"k1": "이전 키",
"k2": "새 키"
}
}새로 저장하는 데이터는
k2키로 암호화합니다.기존
k1키로 암호화한 데이터는 접두사({v:k1})를 통해 식별하고k1키로 복호화합니다.마이그레이션을 실행하면 기존
k1키로 암호화된 데이터를 모두k2키로 다시 암호화합니다.
마이그레이션을 마친 후에도 keys에서 k1을 바로 제거하지 않습니다. 백업이나 다른 노드에 남아 있는 데이터가 k1 키를 필요로 할 수 있기 때문입니다.
사용자 정보 마이그레이션
사용자 정보 암호화 기능을 처음 켜거나 키를 회전한 후에는 마이그레이션을 실행해 모든 사용자 정보를 현재 활성 키로 다시 저장해야 합니다.
마이그레이션은 다음 순서로 실행합니다.
관리자 권한으로 로그인합니다.
1사용자 암호화 마이그레이션 페이지(
/#/r/user_encryption)로 이동합니다.페이지 위쪽에 표시한 활성 키 ID(
key: k1등)를 확인합니다.
2 버튼을 클릭합니다.
진행 상태를 확인하면서 모든 사용자가 처리될 때까지 기다립니다.
완료되면 완료되었습니다. 메시지가 표시됩니다.
마이그레이션은 모든 사용자 레코드를 다시 저장하는 작업입니다. 사용자 수가 많으면 시간이 걸릴 수 있으므로 사용자가 적은 시간대에 실행하는 것을 권장합니다.
운영 시 주의 사항
사용자 정보 암호화 기능을 운영할 때는 다음 사항에 주의합니다.
키 파일 백업:
.key.json파일이 손실되면 암호화한 사용자 정보를 복호화할 수 없습니다. 데이터베이스를 백업할 때 키 파일도 함께 안전한 위치에 백업합니다.키 파일 접근 권한: 키 파일은 매뉴얼웍스 프로세스만 읽을 수 있도록 운영 체제 수준에서 접근 권한을 제한합니다.
클러스터 동기화: 클러스터 모든 노드가 동일한 데이터 디렉터리를 공유하는지 확인합니다.
속성 설정 일관성: 클러스터 모든 노드의
3rabbitz.enable_user_encryption속성 값을 동일하게 설정합니다.<관리 | 사용자 관리 | 사용자 관리> 메뉴에서 이름으로 검색하는 것과 이름과 이메일로 정렬하는 것을 지원하지 않습니다.