데이터 유출이 점점 더 흔해지는 세상에서 데이터베이스와 웹 애플리케이션을 강화해야 할 필요성은 그 어느 때보다 중요해졌습니다. 저도 다른 많은 개발자와 마찬가지로 데이터베이스와 그 안의 테이블에 액세스 제어 권한을 설정할 수 있는 MySQL 및 Oracle과 같은 관계형 데이터베이스로 작업했습니다. 이제 카우치베이스 5.0에서는 클러스터, 버킷 등에 동일한 미세 입자 제어를 적용할 수 있습니다.
Couchbase Server의 역할 기반 액세스 제어(RBAC)를 사용하여 데이터베이스를 잠그고 악의적인 사용자로부터 데이터베이스를 더 잘 보호하는 방법에 대한 몇 가지 예를 살펴보겠습니다.
데이터베이스에 접근 제어 기능이 있는 계정을 갖는다고 해서 데이터 보호에 만병통치약이 될 수는 없다는 점을 미리 말씀드립니다. 웹 애플리케이션을 설계할 때는 여전히 모범 사례를 따라야 하지만 데이터베이스 수준에서 접근 제어 기능을 사용하면 상당한 도움이 될 것입니다.
카우치베이스 서버의 RBAC를 사용하면 데이터베이스에 액세스하는 데 사용할 수 있는 계정을 얼마든지 만들 수 있습니다.
이러한 계정에는 읽기, 쓰기, 실행, 관리, 플러시 등의 권한이 부여됩니다.
계정을 생성하고 특정 작업을 수행할 수 있는 올바른 권한이 있을 때와 없을 때 어떤 일이 발생하는지 알아봅시다.
카우치베이스 서버의 새 사용자 만들기
이미 Couchbase Server 5.0 이상 버전을 구했다고 가정하고 관리자 사용자 이름과 비밀번호를 사용하여 클러스터 또는 인스턴스에 로그인합니다.
이제 역할 기반 액세스 제어를 사용할 수 있으므로 관리 사용자 이름과 비밀번호는 사라지지 않습니다. 데이터베이스 클러스터의 루트 사용자라고 생각하면 됩니다.
로그인한 후 보안 탭을 클릭하고 사용자 추가.
사용자를 추가할 때는 강력한 사용자 아이디와 비밀번호 조합을 선택해야 합니다.
새 사용자를 만들 때 선택할 수 있는 역할은 상당히 많습니다. 지금은 데이터 리더 역할에서 데이터 역할 섹션으로 이동합니다. 이렇게 하는 이유는 권한이 너무 적은 사용자 계정을 사용하려고 할 때 어떤 일이 발생하는지 확인하기 위해서입니다. 보안을 극대화하려면 필요한 버킷만 사용자에게 할당하고 모두 [*] 옵션을 선택합니다.
이제 이 새 계정을 Couchbase에서 사용하는 방법을 살펴보겠습니다.
카우치베이스 셸로 작업 수행하기
Couchbase를 설치하면 데이터베이스에 대해 여러 가지 작업을 수행할 수 있는 CLI 도구인 Couchbase Shell이 제공됩니다.
Mac을 사용하는 경우 다음 명령을 실행합니다:
1 |
/애플리케이션/카우치베이스 서버.앱/콘텐츠/리소스/카우치베이스-핵심/bin/cbq -u 사용자 이름 -p 비밀번호 |
위 명령은 지정한 사용자 아이디와 비밀번호를 사용하여 Couchase 셸(CBQ)을 시작합니다. 이전에 생성한 RBAC 사용자의 사용자 이름과 비밀번호를 사용해야 합니다.
Microsoft Windows를 사용하는 경우 CBQ는 다음 위치에 있어야 합니다:
1 |
C:\프로그램 파일\카우치베이스\서버\bin\cbq.exe -u 사용자 이름 -p 비밀번호 |
마찬가지로 Linux를 사용하는 경우 여기에서 CBQ를 확인하세요:
1 |
/opt/카우치베이스/bin/cbq -u 사용자 이름 -p 비밀번호 |
카우치베이스 셸에 대해 자세히 알아보려면 다음 문서에서 확인하세요. 공식 문서.
CBQ를 사용하여 Couchbase Server에 성공적으로 연결했으면 이제 쿼리를 실행해 보겠습니다:
1 |
선택 * FROM `기본값`; |
물론 여기서는 다음과 같은 버킷이 있다고 가정합니다. 기본값 로 설정하면 사용자가 액세스할 수 있습니다. 기억하세요. 데이터 리더 역할 중 하나가 아니라 쿼리 역할. 즉, 다음과 같은 오류가 표시될 가능성이 높습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "요청ID": "aca002c6-58d5-4754-9e33-325eef47f46b", "서명": { "*": "*" }, "결과": [ ], "오류": [ { "code": 13014, "msg": "사용자에게 기본 버킷에서 SELECT 쿼리를 실행할 수 있는 자격 증명이 없습니다. 쿼리를 실행할 수 있도록 기본값에 query_select 역할을 추가하세요." } ], "status": "중지", "metrics": { "elapsedTime": "1.703462ms", "실행 시간": "1.690334ms", "resultCount": 0, "결과 크기": 0, "errorCount": 1 } } |
사용자가 쿼리를 실행할 수 없도록 하는 것이 좋습니다. 그리고 데이터 역할 권한은 N1QL이 아닌 키-값 연산 전용입니다.
카우치베이스 관리 대시보드로 돌아가서 사용자의 역할을 변경합니다. 이번에는 사용자에게 쿼리 선택 의 역할 쿼리 역할. CBQ에서 쿼리를 다시 실행하면 성공합니다.
애플리케이션에 역할 기반 액세스 제어 포함하기
언젠가는 여러 Couchbase SDK 중 하나를 사용하여 Couchbase와 통신하는 웹 애플리케이션을 구축해야 할 것입니다. Couchbase 5.0부터는 RBAC 사용자를 사용할 수 있어야 하며, 그렇지 않으면 버킷을 열려고 할 때 오류가 발생합니다.
Node.js 개발자라면 다음과 같은 작업을 수행할 수 있습니다:
1 2 3 |
var 클러스터 = new 카우치베이스.클러스터("couchbase://host"); 클러스터.인증("username", "비밀번호"); var 버킷 = 클러스터.오픈버킷("default"); |
참고 오픈버킷
함수는 더 이상 버킷 비밀번호를 사용하지 않습니다. 대신 인증
메서드 및 액세스 제어.
각 SDK는 인증에 대해 매우 유사한 접근 방식을 따릅니다. 자세한 내용은 SDK 설명서를 참조하세요. 카우치베이스 개발자 포털.
결론
클러스터, Buckets, 심지어 서비스까지 기반으로 권한을 정의할 수 있다는 것은 NoSQL 데이터베이스를 보호하는 데 있어 큰 장점입니다. 사용자에게 기능에 필요한 최소한의 권한을 부여함으로써 데이터 유출이나 기타 악의적인 활동의 가능성을 제거할 수 있습니다.