🚀 Experimente o Zilliz Cloud, o Milvus totalmente gerenciado, gratuitamente—experimente um desempenho 10x mais rápido! Experimente Agora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Como é que a base de dados Milvus Vetor garante a segurança dos dados?

Como é que a base de dados Milvus Vetor garante a segurança dos dados?

  • Engineering
September 05, 2022
Angela Ni

Cover image Imagem da capa

Tendo em conta a segurança dos seus dados, a autenticação do utilizador e a ligação TLS (Transport Layer Security) estão agora oficialmente disponíveis no Milvus 2.1. Sem a autenticação do utilizador, qualquer pessoa pode aceder a todos os dados da sua base de dados vetorial com o SDK. No entanto, a partir do Milvus 2.1, apenas as pessoas com um nome de utilizador e uma palavra-passe válidos podem aceder à base de dados vetorial do Milvus. Além disso, no Milvus 2.1, a segurança dos dados é ainda mais protegida pelo TLS, que garante comunicações seguras numa rede informática.

Este artigo pretende analisar a forma como a base de dados vetorial Milvus garante a segurança dos dados com a autenticação do utilizador e a ligação TLS e explicar como pode utilizar estas duas funcionalidades enquanto utilizador que pretende garantir a segurança dos dados ao utilizar a base de dados vetorial.

Saltar para:

O que é a segurança da base de dados e porque é que é importante?

A segurança da base de dados refere-se às medidas adoptadas para garantir que todos os dados da base de dados estão seguros e são mantidos confidenciais. Os recentes casos de violação e fuga de dados no Twitter, Marriott, Texas Department of Insurance, etc. tornam-nos ainda mais atentos à questão da segurança dos dados. Todos estes casos recordam-nos constantemente que as empresas e os negócios podem sofrer graves perdas se os dados não estiverem bem protegidos e se as bases de dados que utilizam não forem seguras.

Como é que a base de dados vetorial Milvus garante a segurança dos dados?

Na atual versão 2.1, a base de dados vetorial Milvus tenta garantir a segurança da base de dados através da autenticação e da encriptação. Mais especificamente, ao nível do acesso, o Milvus suporta a autenticação básica do utilizador para controlar quem pode aceder à base de dados. Entretanto, ao nível da base de dados, o Milvus adopta o protocolo de encriptação TLS (Transport Layer Security) para proteger a comunicação de dados.

Autenticação do utilizador

A funcionalidade de autenticação básica do utilizador no Milvus permite aceder à base de dados de vectores utilizando um nome de utilizador e uma palavra-passe para garantir a segurança dos dados. Isto significa que os clientes só podem aceder à instância do Milvus se fornecerem um nome de utilizador e uma palavra-passe autenticados.

O fluxo de trabalho de autenticação na base de dados vetorial Milvus

Todos os pedidos gRPC são tratados pelo proxy Milvus, pelo que a autenticação é efectuada pelo proxy. O fluxo de trabalho para iniciar a sessão com as credenciais de ligação à instância Milvus é o seguinte

  1. Criar credenciais para cada instância do Milvus e as palavras-passe encriptadas são armazenadas no etcd. O Milvus utiliza o bcrypt para a encriptação, uma vez que implementa o algoritmo de hashing adaptativo de Provos e Mazières.
  2. No lado do cliente, o SDK envia texto cifrado quando se liga ao serviço Milvus. O texto cifrado em base64 (:) é anexado aos metadados com a chave authorization.
  3. O proxy Milvus intercepta o pedido e verifica as credenciais.
  4. As credenciais são armazenadas em cache localmente no proxy.

authetication_workflow fluxo de trabalho de autenticação

Quando as credenciais são actualizadas, o fluxo de trabalho do sistema Milvus é o seguinte

  1. O coordenador de raiz é responsável pelas credenciais quando são chamadas as API de inserção, consulta e eliminação.
  2. Quando se actualizam as credenciais por esquecimento da palavra-passe, por exemplo, a nova palavra-passe é guardada no etcd. Em seguida, todas as credenciais antigas no cache local do proxy são invalidadas.
  3. O intercetor de autenticação procura primeiro os registos da cache local. Se as credenciais na cache não estiverem corretas, será acionada a chamada RPC para ir buscar o registo mais atualizado à coordenada raiz. E as credenciais na cache local são actualizadas em conformidade.

credential_update_workflow credential_update_workflow

Como gerir a autenticação do utilizador na base de dados vetorial Milvus

Para ativar a autenticação, é necessário definir primeiro common.security.authorizationEnabled para true ao configurar o Milvus no ficheiro milvus.yaml.

Uma vez activada, será criado um utilizador raiz para a instância do Milvus. Este utilizador raiz pode utilizar a palavra-passe inicial de Milvus para se ligar à base de dados de vectores do Milvus.

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

Recomendamos vivamente que altere a palavra-passe do utilizador raiz quando iniciar o Milvus pela primeira vez.

Em seguida, o utilizador root pode criar mais utilizadores novos para acesso autenticado, executando o seguinte comando para criar novos utilizadores.

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

Há duas coisas a ter em conta quando se criam novos utilizadores:

  1. Quanto ao novo nome de utilizador, não pode exceder 32 caracteres de comprimento e deve começar com uma letra. Só são permitidos sublinhados, letras ou números no nome de utilizador. Por exemplo, um nome de utilizador "2abc!" não é aceite.

  2. Quanto à palavra-passe, o seu comprimento deve ser de 6-256 caracteres.

Uma vez configurada a nova credencial, o novo utilizador pode ligar-se à instância Milvus com o nome de utilizador e a palavra-passe.

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

Como em todos os processos de autenticação, não tem de se preocupar se se esquecer da palavra-passe. A palavra-passe de um utilizador existente pode ser redefinida com o seguinte comando.

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

Leia a documentação do Milvus para saber mais sobre a autenticação do utilizador.

Ligação TLS

A segurança da camada de transporte (TLS) é um tipo de protocolo de autenticação para fornecer segurança de comunicações numa rede de computadores. O TLS usa certificados para fornecer serviços de autenticação entre duas ou mais partes em comunicação.

Como ativar o TLS na base de dados vetorial Milvus

Para ativar o TLS no Milvus, é necessário executar primeiro o seguinte comando para preparar dois ficheiros para gerar o certificado: um ficheiro de configuração OpenSSL predefinido com o nome openssl.cnf e um ficheiro com o nome gen.sh utilizado para gerar certificados relevantes.

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

Em seguida, pode simplesmente copiar e colar a configuração que fornecemos aqui para os dois ficheiros. Ou pode também fazer modificações com base na nossa configuração para melhor se adequar à sua aplicação.

Quando os dois ficheiros estiverem prontos, pode executar o ficheiro gen.sh para criar nove ficheiros de certificados. Da mesma forma, também pode modificar as configurações nos nove ficheiros de certificado para se adequarem às suas necessidades.

chmod +x gen.sh
./gen.sh

Há um passo final antes de se poder ligar ao serviço Milvus com TLS. Tem de definir tlsEnabled para true e configurar os caminhos de ficheiro de server.pem, server.key e ca.pem para o servidor em config/milvus.yaml. O código abaixo é um exemplo.

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

common:
  security:
    tlsEnabled: true

Em seguida, está tudo pronto e pode ligar-se ao serviço Milvus com TLS, desde que especifique os caminhos de ficheiro client.pem, client.key e ca.pem para o cliente quando utilizar o SDK de ligação Milvus. O código abaixo também é um exemplo.

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())

O que vem a seguir

Com o lançamento oficial do Milvus 2.1, preparámos uma série de blogues que apresentam as novas funcionalidades. Leia mais nesta série de blogues:

Like the article? Spread the word

Continue Lendo