인증 및 권한 부여가 Couchbase Server 5.0에서 크게 개선되었습니다. 개발자 프리뷰에서 새로운 RBAC 기능에 대해 이미 블로그에 소개한 바 있습니다.
- RBAC를 사용한 인증 및 권한 부여 - 소개 / 1부
- RBAC를 사용한 인증 및 권한 부여(2부) - 사용자 관리
- 개선된 SDK 인증 방법 - Couchbase 5.0 - 파이썬, 자바, PHP, .NET을 소개합니다.
이제 Couchbase Server 5.0 베타가 출시되었으므로 이러한 새로운 기능과 함께 Couchbase .NET SDK를 사용하는 방법에 대한 보다 심층적인 블로그 게시물을 작성하고 있습니다.
이 블로그 게시물에 사용된 전체 코드 샘플은 다음과 같습니다. 깃허브에서 사용 가능.
버킷 만들기
이전 글에서 언급했듯이 비밀번호가 있는 버킷의 시대는 지났습니다. 미래는 특정 버킷에 대한 특정 권한을 가진 사용자, 즉 사용자들의 몫입니다.
버킷을 만드는 것부터 시작하겠습니다. Couchbase UI에서 Couchbase를 설치할 때 생성한 관리자로 로그인합니다. "버킷"으로 이동하여 "버킷 추가"(오른쪽 상단)를 클릭합니다. "데이터 버킷 추가" 대화 상자가 표시됩니다. "고급 버킷 설정"에도 더 이상 "비밀번호" 필드가 없다는 것을 알 수 있습니다.
버킷에 이름과 약간의 메모리를 지정하고 '버킷 추가'를 클릭합니다. 이제 버킷이 생겼습니다. 하지만 UI의 관리자 외에는 아직 아무도 이 버킷에 액세스할 수 없습니다.
사용자 만들기
이 버킷에 액세스하려면 사용자를 만들어야 합니다. Couchbase 5.0에서 '사용자'는 완전히 새로운 기능으로, Couchbase Server에 더 풍부한 인증 및 권한 부여 기능을 제공합니다.
관리자로 로그인한 상태에서 '보안'으로 이동하여 사용자 목록을 확인합니다. '사용자 추가'(오른쪽 상단)를 클릭합니다.
원하는 이름과 비밀번호로 사용자를 만듭니다. 사용자에게 어떤 역할을 부여할지, 어떤 버킷에 대해 어떤 역할을 부여할지(해당되는 경우) 선택할 수 있습니다. 이 사용자에게 방금 만든 버킷(예: "mybucket")에 대해 데이터 작성자 및 데이터 리더 역할을 부여하되, 쿼리 역할은 부여하지 않겠습니다.
사용자가 추가되면 역할 위로 마우스를 가져가면 해당 역할의 의미에 대한 설명을 볼 수 있습니다.
Couchbase .NET SDK를 사용한 인증 및 권한 부여
이제 버킷과 사용자가 생겼으니 .NET SDK에서 이를 사용하는 방법을 살펴보겠습니다.
먼저 클러스터
객체입니다.
1 2 3 4 |
var 클러스터 = new 클러스터(new 클라이언트 구성 { 서버 = new 목록<Uri> { new Uri("http://localhost:8091") } }); |
클러스터가 있지만 프로그램이 아직 인증되지 않았습니다. 클러스터에 비밀번호 인증기
개체를 사용하여 자격 증명을 지정합니다. 그런 다음 해당 개체를 클러스터의 인증
메서드를 사용해야 합니다. 아래 예제에서는 잘못된 자격 증명을 사용하고 있습니다.
1 2 |
var 인증자 = new 비밀번호 인증기("myuser", "wrongpassword"); 클러스터.인증(인증자); |
이제 다음과 같은 작업을 수행하려고 하면 OpenBucket
가 클러스터에 있으면 예외가 발생합니다.
1 2 3 4 5 6 7 8 9 |
시도 { var 버킷 = 클러스터.OpenBucket("mybucket"); } catch (예외 ex) { 콘솔.WriteLine("버킷 가져오기 오류."); 콘솔.WriteLine(ex.메시지); } |
이제 올바른 자격 증명을 사용하여 다시 시도해 보겠습니다. 인증이 작동합니다. 하지만 다음에는 인증에 대해 이야기해 보겠습니다.
이 사용자에게 데이터 작성자 및 데이터 리더 역할(mybucket용)만 부여했음을 기억하세요. 따라서 지금 인증하고 문서를 삽입하면 작동합니다.
1 2 3 4 5 6 7 8 9 10 11 |
var 클러스터 = new 클러스터(new 클라이언트 구성 { 서버 = new 목록<Uri> { new Uri("http://localhost:8091") } }); var 인증자 = new 비밀번호 인증기("myuser", "비밀번호"); 클러스터.인증(인증자); var 버킷 = 클러스터.OpenBucket("mybucket"); // 문서 삽입, 허용되어야 합니다. var 결과 = 버킷.삽입(Guid.NewGuid().ToString(), new {foo = "bar"}); 콘솔.WriteLine("삽입에 성공했습니다: " + 결과.성공); |
하지만 예를 들어, 내가 실행하려고 하면 N1QL(JSON용 SQL) 쿼리를 입력하면 실패합니다. 이는 해당 사용자에게 쿼리를 실행할 권한이 없기 때문입니다.
1 2 3 |
var 쿼리 결과 = 버킷.쿼리<int>("select count(1 from `" + 버킷.이름 + "`"); 콘솔.WriteLine("쿼리가 성공했습니다: " + 쿼리 결과.성공); 쿼리 결과.오류.ForEach(e => 콘솔.WriteLine("오류: " + e.메시지)); |
저는 그냥 간단한 COUNT(1)
집계 쿼리를 실행합니다. 해당 사용자는 권한이 없으므로 다음과 같은 내용이 표시됩니다:
한 가지 더
Couchbase Server 4.x에서 Couchbase Server 5.0으로 업그레이드할 때 이것이 미칠 영향이 걱정되신다면 여기에 팁이 있습니다. 버킷과 이름이 같은 사용자(예: "foo"라는 버킷과 "foo"라는 사용자)를 만드는 경우, 버킷 비밀번호를 여전히 요구하는 이전 Couchbase .NET API는 이전과 동일하게 작동합니다. 지금은 해당 사용자에게 "클러스터 관리자" 역할을 부여하기만 하면 됩니다. 이는 연대를 통한 역할 접근 방식을 사용하도록 시스템을 재설계할 때까지 임시로 해결할 수 있는 좋은 방법입니다.
요약
Couchbase Server 5.0이 베타 버전으로 출시되었습니다! 이러한 역할 기반 인증(RBAC) 기능 덕분에 Couchbase는 문서 데이터베이스 보안의 선두주자가 되었고, 개인적으로도 Couchbase가 이러한 방향으로 나아가고 있다는 사실이 매우 기쁘게 생각합니다. 보안은 중요하지만 개발자들이 간과하는 경우가 너무 많습니다.
궁금한 점이 있으시면 카우치베이스 포럼에서 질문하세요.를 클릭하고 아래에 댓글을 남기거나 트위터 @mgroves에서 핑하기.