모든 소프트웨어 애플리케이션에는 비밀이 있습니다. 비밀번호, API 키, 보안 토큰은 모두 비밀의 범주에 속합니다. 프로덕션 비밀 키가 잘못된 사람의 손에 들어가면 끔찍한 결과를 초래할 수 있습니다. 비밀 키에 액세스할 수 있는 방법과 시기를 엄격하게 제어해야 합니다.
Couchbase는 인프라에 더 많은 서비스를 추가했으며 이러한 서비스에는 내부 및 외부 자격 증명이 있어 이러한 서비스의 자격 증명을 저장하는 것이 어려운 과제입니다. 또 다른 과제는 모든 내부 및 외부 서비스에 대한 비밀을 순환하는 것입니다.
카우치베이스 4.6에는 공유되는 모든 비밀이 저장될 때 암호화되어 노드와 서비스에 올바르게 전달되고 비밀을 쉽게 순환할 수 있는 비밀 관리 기능이 도입되었습니다. SDK 클라이언트나 UI 및 성능에는 영향을 미치지 않습니다.
카우치베이스는 2단계의 키 계층 구조를 유지하여 데이터 재인코딩 없이 마스터 비밀번호를 쉽게 교체할 수 있고, 여러 마스터 비밀번호를 지원하며, KMIP 서버와의 통합도 용이합니다. 노드 시작 시 마스터 비밀번호가 생성되거나 사용자가 제공하면 강력한 키 파생 기능을 사용하여 마스터 키가 생성됩니다. 카우치베이스는 생성 키로 PBKDF2를 사용합니다.
서버가 시작될 때 임의의 데이터_키도 생성되며, 이 데이터_키는 마스터 키로 암호화됩니다. 모든 비밀은 디스크의 data_key를 사용하여 암호화됩니다. 카우치베이스 사용 GCM 모드에서 AES 256비트 알고리즘을 사용하여 비밀을 암호화합니다.
시스템을 부트스트랩하기 위해 마스터 키는 암호화된 데이터 키를 여는 데 사용됩니다. 그런 다음 암호 해독된 데이터 키를 사용하여 암호화된 시크릿을 열고, 시크릿을 사용하여 Couchbase Server를 시작합니다. 강력한 마스터 비밀번호를 사용하는 것이 좋습니다.
4.6의 비밀 관리 기능을 사용하면 주기적으로 또는 위반이 발생한 경우 키 계층 구조의 여러 수준에서 비밀을 교체할 수 있습니다.
마스터 비밀번호 로테이션/첫 번째 수준의 로테이션 및 비밀번호 재설정은 REST API 또는 cli를 사용하여 수행할 수 있습니다. 카우치베이스는 노드당 하나의 마스터 비밀번호를 유연하게 설정할 수 있습니다. 마스터 비밀번호를 분실하여 서버가 중지되는 경우 노드가 손실됩니다. 노드의 데이터는 서버와 함께 다른 도구를 사용하여 복구할 수 있습니다.
두 번째 수준의 로테이션은 REST API 또는 cli를 사용하여 데이터 키를 변경하여 수행할 수 있습니다.
마스터 비밀번호의 모든 회전 및 설정은 애플리케이션별로 감사를 받습니다.
우분투 14에서 cli를 사용하여 마스터 비밀번호를 위한 서버를 설정하는 예제입니다.
- 카우치베이스 서버를 설치하고 구성합니다.
- cli를 사용하여 마스터 비밀번호를 설정하고 아래 명령을 실행한 후 프롬프트에 비밀번호를 입력합니다.
/opt/couchbase/bin/couchbase-cli 마스터-비밀번호 -c 192.168.0.1:8091 -u 관리자 -p 비밀번호 -새-비밀번호
- 서버 중지 - 서버 중지 /etc/init.d/couchbase-server stop
- 환경 변수 구성
내보내기 CB_MASTER_PASSWORD=
- 서버 시작 - 서버 시작 /etc/init.d/couchbase-server 시작
sudo를 사용하여 서버를 시작하는 경우 sudo에 -E 옵션을 사용하여 서버를 시작하세요.
- cli를 사용하여 데이터 키를 회전하고 아래 명령을 실행합니다:
/opt/couchbase/bin/couchbase-cli 마스터-비밀번호 -c 192.168.0.1:8091 -u 관리자 -p 비밀번호 -rotate-data-key
- 마스터 비밀번호를 변경하려면 아래 명령어를 실행하세요. 프롬프트에 비밀번호를 입력합니다.
/opt/couchbase/bin/couchbase-cli 마스터-비밀번호 -c 192.168.0.1:8091 -u 관리자 -p 비밀번호 -새-비밀번호
로깅 세부 정보:
베이비시터 로그온 비밀번호 변경 | [ns_server:info,2017-01-20T13:12:30.079Z,babysitter_of_ns_1@127.0.0.1:encryption_service:encryption_service:call_gosecrets_and_store_data_key:227]마스터 암호 변경에 성공했습니다. |
서버 시작 중 베이비시터가 잘못된 마스터 비밀번호로 로그온하거나 환경 변수가 잘못 설정되었습니다. | [ns_server:error,2017-01-20T13:13:07.066Z,babysitter_of_ns_1@127.0.0.1:encryption_service:encryption_service:init:174]마스터 비밀번호가 잘못되었습니다. 오류가 발생했습니다: {error,"암호: 메시지 인증에 실패했습니다"} |
CB 서버에 마스터 비밀번호가 올바르게 설정된 경우 베이비시터 로그 | =========================PROGRESS REPORT=========================
슈퍼바이저 {로컬,NS_BABYSITTER_SUP} 시작되었습니다: [{pid,}, {이름,암호화_서비스}, {mfargs,{encryption_service,start_link,[]}}, {restart_type,영구}, {shutdown,1000} {child_type,worker}] [ns_server:debug,2017-01-22T12:08:46.432Z,babysitter_of_ns_1@127.0.0.1::supervisor_cushion:init:39]지연 5000으로 ns_port_server 시작 중 |