🚀 완전 관리형 Milvus인 Zilliz Cloud를 무료로 체험해보세요—10배 더 빠른 성능을 경험하세요! 지금 체험하기>>

milvus-logo
LFAI
  • Home
  • Blog
  • 밀버스 벡터 데이터베이스는 어떻게 데이터 보안을 보장하나요?

밀버스 벡터 데이터베이스는 어떻게 데이터 보안을 보장하나요?

  • Engineering
September 05, 2022
Angela Ni

Cover image 표지 이미지

데이터 보안을 충분히 고려하여 사용자 인증 및 TLS(전송 계층 보안) 연결이 이제 Milvus 2.1에서 공식적으로 제공됩니다. 사용자 인증 없이도 누구나 SDK를 통해 벡터 데이터베이스의 모든 데이터에 액세스할 수 있습니다. 하지만 Milvus 2.1부터는 유효한 사용자 이름과 비밀번호를 가진 사용자만 Milvus 벡터 데이터베이스에 액세스할 수 있습니다. 또한 Milvus 2.1에서는 컴퓨터 네트워크에서 안전한 통신을 보장하는 TLS를 통해 데이터 보안이 더욱 강화되었습니다.

이 글에서는 벡터 데이터베이스 Milvus가 사용자 인증과 TLS 연결을 통해 데이터 보안을 보장하는 방법을 분석하고, 벡터 데이터베이스를 사용할 때 데이터 보안을 보장하려는 사용자로서 이 두 가지 기능을 어떻게 활용할 수 있는지 설명하고자 합니다.

건너뛰기:

데이터베이스 보안이란 무엇이며 왜 중요한가요?

데이터베이스 보안이란 데이터베이스의 모든 데이터를 안전하게 보호하고 기밀로 유지하기 위해 취하는 조치를 말합니다. 최근 트위터, 메리어트, 텍사스 보험국 등에서 발생한 데이터 침해 및 데이터 유출 사건으로 인해 데이터 보안 문제에 대한 경각심이 더욱 커지고 있습니다. 이러한 모든 사례는 데이터를 제대로 보호하지 않고 사용하는 데이터베이스가 안전하지 않으면 기업과 비즈니스가 심각한 손실을 입을 수 있다는 사실을 끊임없이 상기시켜 줍니다.

Milvus 벡터 데이터베이스는 어떻게 데이터 보안을 보장하나요?

현재 2.1 릴리스에서 Milvus 벡터 데이터베이스는 인증 및 암호화를 통해 데이터베이스 보안을 보장하려고 시도합니다. 보다 구체적으로, 액세스 수준에서 Milvus는 데이터베이스에 액세스할 수 있는 사용자를 제어하기 위해 기본 사용자 인증을 지원합니다. 한편, 데이터베이스 수준에서 Milvus는 데이터 통신을 보호하기 위해 TLS(전송 계층 보안) 암호화 프로토콜을 채택하고 있습니다.

사용자 인증

Milvus의 기본 사용자 인증 기능은 데이터 보안을 위해 사용자 이름과 비밀번호를 사용하여 벡터 데이터베이스에 액세스하는 것을 지원합니다. 즉, 클라이언트는 인증된 사용자 이름과 비밀번호를 제공해야만 Milvus 인스턴스에 액세스할 수 있습니다.

Milvus 벡터 데이터베이스의 인증 워크플로

모든 gRPC 요청은 Milvus 프록시에 의해 처리되므로 인증은 프록시에 의해 완료됩니다. Milvus 인스턴스에 연결하기 위해 자격 증명으로 로그인하는 워크플로우는 다음과 같습니다.

  1. 각 Milvus 인스턴스에 대한 자격 증명을 생성하고 암호화된 비밀번호를 etcd에 저장합니다. Milvus는 프로보스와 마지에르의 적응형 해싱 알고리즘을 구현하기 때문에 암호화에 bcrypt를 사용합니다.
  2. 클라이언트 측에서 SDK는 Milvus 서비스에 연결할 때 암호 텍스트를 전송합니다. base64 암호 텍스트(:)는 authorization 키로 메타데이터에 첨부됩니다.
  3. Milvus 프록시는 요청을 가로채서 자격 증명을 확인합니다.
  4. 자격 증명은 프록시에 로컬로 캐시됩니다.

authetication_workflow 인증_워크플로

자격 증명이 업데이트되면 Milvus의 시스템 워크플로는 다음과 같습니다.

  1. 삽입, 조회, 삭제 API가 호출될 때 루트 코드는 자격 증명을 담당합니다.
  2. 예를 들어 비밀번호를 잊어버려서 자격 증명을 업데이트하면 새 비밀번호가 etcd에 유지됩니다. 그러면 프록시의 로컬 캐시에 있는 모든 이전 자격 증명이 무효화됩니다.
  3. 인증 인터셉터는 로컬 캐시에서 레코드를 먼저 찾습니다. 캐시에 있는 자격 증명이 올바르지 않으면 루트 코드로부터 가장 최근에 업데이트된 레코드를 가져오기 위한 RPC 호출이 트리거됩니다. 그리고 로컬 캐시의 자격 증명이 그에 따라 업데이트됩니다.

credential_update_workflow 자격증명_업데이트_워크플로

Milvus 벡터 데이터베이스에서 사용자 인증을 관리하는 방법

인증을 활성화하려면 먼저 milvus.yaml 파일에서 Milvus를 구성할 때 common.security.authorizationEnabledtrue 으로 설정해야 합니다.

인증이 활성화되면 Milvus 인스턴스에 대한 루트 사용자가 생성됩니다. 이 루트 사용자는 Milvus 의 초기 비밀번호를 사용하여 Milvus 벡터 데이터베이스에 연결할 수 있습니다.

from pymilvus import connections
connections.connect(
    alias='default',
    host='localhost',
    port='19530',
    user='root_user',
    password='Milvus',
)

Milvus를 처음 시작할 때 루트 사용자의 비밀번호를 변경하는 것이 좋습니다.

그런 다음 루트 사용자는 다음 명령을 실행하여 새 사용자를 생성하여 인증된 액세스를 위해 더 많은 새 사용자를 추가로 만들 수 있습니다.

from pymilvus import utility
utility.create_credential('user', 'password', using='default') 

새 사용자를 만들 때 기억해야 할 두 가지 사항이 있습니다:

  1. 새 사용자 아이디의 길이는 32자를 초과할 수 없으며 반드시 문자로 시작해야 합니다. 사용자 아이디에는 밑줄, 문자 또는 숫자만 사용할 수 있습니다. 예를 들어 "2abc!"라는 사용자 아이디는 허용되지 않습니다.

  2. 비밀번호의 길이는 6~256자이어야 합니다.

새 자격 증명이 설정되면 새 사용자는 사용자 아이디와 비밀번호를 사용하여 Milvus 인스턴스에 연결할 수 있습니다.

from pymilvus import connections
connections.connect(
    alias='default',
    host='localhost',
    port='19530',
    user='user',
    password='password',
)

모든 인증 프로세스와 마찬가지로 비밀번호를 잊어버려도 걱정할 필요가 없습니다. 기존 사용자의 비밀번호는 다음 명령어로 재설정할 수 있습니다.

from pymilvus import utility
utility.reset_password('user', 'new_password', using='default')

사용자 인증에 대해 자세히 알아보려면 Milvus 문서를 참조하세요.

TLS 연결

TLS(전송 계층 보안)는 컴퓨터 네트워크에서 통신 보안을 제공하기 위한 인증 프로토콜의 일종입니다. TLS는 인증서를 사용하여 둘 이상의 통신 당사자 간에 인증 서비스를 제공합니다.

Milvus 벡터 데이터베이스에서 TLS를 사용 설정하는 방법

Milvus에서 TLS를 사용하려면 먼저 다음 명령을 실행하여 인증서를 생성하기 위한 두 개의 파일, 즉 openssl.cnf 이라는 이름의 기본 OpenSSL 구성 파일과 gen.sh 이라는 이름의 파일을 퍼레이트해야 합니다.

mkdir cert && cd cert
touch openssl.cnf gen.sh

그런 다음 여기에서 제공하는 구성을 복사하여 두 파일에 붙여넣기만 하면 됩니다. 또는 저희의 구성을 기반으로 귀하의 애플리케이션에 더 적합하도록 수정할 수도 있습니다.

두 파일이 준비되면 gen.sh 파일을 실행하여 9개의 인증서 파일을 만들 수 있습니다. 마찬가지로 9개의 인증서 파일의 구성을 필요에 맞게 수정할 수도 있습니다.

chmod +x gen.sh
./gen.sh

TLS를 사용하여 Milvus 서비스에 연결하기 전에 마지막 단계가 하나 있습니다. tlsEnabledtrue 으로 설정하고 config/milvus.yaml 에서 서버의 파일 경로를 server.pem, server.key, ca.pem 로 구성해야 합니다. 아래 코드는 예시입니다.

tls:
  serverPemPath: configs/cert/server.pem
  serverKeyPath: configs/cert/server.key
  caPemPath: configs/cert/ca.pem

common:
  security:
    tlsEnabled: true

그러면 모든 설정이 완료되며 Milvus 연결 SDK를 사용할 때 클라이언트에 client.pem, client.key, ca.pem 의 파일 경로를 지정하기만 하면 TLS로 Milvus 서비스에 연결할 수 있습니다. 아래 코드도 예시입니다.

from pymilvus import connections

_HOST = '127.0.0.1'
_PORT = '19530'

print(f"\nCreate connection...")
connections.connect(host=_HOST, port=_PORT, secure=True, client_pem_path="cert/client.pem",
                        client_key_path="cert/client.key",
                        ca_pem_path="cert/ca.pem", server_name="localhost")
print(f"\nList connections:")
print(connections.list_connections())

향후 계획

Milvus 2.1의 공식 출시와 함께 새로운 기능을 소개하는 블로그 시리즈를 준비했습니다. 이 블로그 시리즈에서 자세히 읽어보세요:

Like the article? Spread the word

계속 읽기