Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Atualizar conjunto de réplicas autogerenciadas para autenticação de arquivo chave (sem tempo de inatividade)

Nesta página

  • Visão geral
  • Impor controle de acesso de arquivo chave no conjunto de réplicas existente
  • x.509 Autenticação interna

Para se proteger contra o acesso não autorizado, imponha aautenticação para seus sistemas. A autenticação para conjuntos de réplicas consiste em autenticação interna entre os membros do conjunto de réplicas e controle de acesso do usuário para clientes que se conectam ao conjunto de réplicas.

Se a sua implantação não forçar a autenticação, você poderá usar a opção --transitionToAuth para impor a autenticação sem tempo de inatividade.

Este tutorial usa o mecanismo de autenticação interna do arquivo -chave para segurança interna e controles de acesso baseados em role baseadosem SCRAM para conexões de clientes.

Se você estiver usando o Cloud Manager ou o MongoDB Ops Manager para gerenciar seu sistema, consulte o respectivomanualCloud Manager ou o manual do MongoDB Ops Manager para impor a autenticação.

Este tutorial pressupõe que seu conjunto de réplicas possa eleger um novo primário após descer o membro do conjunto de réplicas primário existente. Isso requer:

Um mongod em execução com --transitionToAuth aceita conexões autenticadas e não autenticadas. Os clientes conectados ao mongod durante esse estado de transição podem realizar operações de leitura, gravação e administrativas em qualquer reconhecimento de data center.

No final do procedimento a seguir, o conjunto de réplicas rejeita qualquer cliente que tente fazer uma conexão não autenticada. O procedimento cria usuários para que os aplicativos clientes usem ao se conectar ao conjunto de réplicas.

Consulte ➤ Configurar controle de acesso baseado em roles para ver as melhores práticas de criação e gerenciamento de usuários.

Binários do MongoDB, mongod e mongos, ligam-se ao localhost por padrão.

Importante

As senhas devem ser aleatórias, longas e complexas para garantir a segurança do sistema e evitar ou atrasar o acesso malicioso.

Importante

Para evitar atualizações de configuração devido a alterações de endereço IP, use nomes de host DNS em vez de endereços IP. É particularmente importante usar um nome de host DNS em vez de um endereço IP ao configurar membros de conjunto de réplicas ou membros de cluster fragmentado.

Use nomes de host em vez de endereços IP para configurar cluster em um horizonte de rede dividido. Começando no MongoDB 5.0, nós configurados apenas com um endereço IP falham na validação de inicialização e não são iniciados.

1

Conecte-se ao primary para criar um usuário com a role userAdminAnyDatabase . O role userAdminAnyDatabase concede acesso à criação de usuários em qualquer reconhecimento de data center no sistema.

O exemplo a seguir cria o usuário fred com o role userAdminAnyDatabase no banco de dados do admin.

Importante

As senhas devem ser aleatórias, longas e complexas para garantir a segurança do sistema e evitar ou atrasar o acesso malicioso.

Dica

Você pode usar o método passwordPrompt() em conjunto com vários métodos/comandos de autenticação/gerenciamento de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método/comando. No entanto, você ainda pode especificar a senha diretamente como faria com versões anteriores do shell mongo .

admin = db.getSiblingDB("admin")
admin.createUser(
{
user: "fred",
pwd: " passwordPrompt(), // or cleartext password
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)

Na conclusão deste procedimento, qualquer cliente que administre usuários no conjunto de réplicas deve autenticar como este usuário ou um usuário com permissões semelhantes.

Consulte Roles do utilizador de banco de dados para obter uma lista completa das roles integradas e relacionadas às operações de administração do banco de dados.

2

Conecte-se ao primary para criar um usuário com a role clusterAdmin . O role clusterAdmin concede acesso às operações de replicação, como configurar o conjunto de réplicas.

O exemplo a seguir cria o usuário ravi com o role clusterAdmin no banco de dados do admin.

Importante

As senhas devem ser aleatórias, longas e complexas para garantir a segurança do sistema e evitar ou atrasar o acesso malicioso.

Dica

Você pode usar o método passwordPrompt() em conjunto com vários métodos/comandos de autenticação/gerenciamento de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método/comando. No entanto, você ainda pode especificar a senha diretamente como faria com versões anteriores do shell mongo .

db.getSiblingDB("admin").createUser(
{
"user" : "ravi",
"pwd" : passwordPrompt(), // or cleartext password
roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
}
)

Na conclusão deste procedimento, qualquer cliente que administre ou mantenha o conjunto de réplicas deve autenticar como este usuário ou um usuário com permissões semelhantes.

Consulte Cluster Administration Roles para obter uma lista completa de funções internas relacionadas a operações de conjunto de réplicas.

3

Crie usuários para permitir que o aplicativo do cliente se conecte e interaja com o conjunto de réplicas. Na conclusão deste tutorial, os clientes devem autenticar como um usuário configurado para se conectar ao conjunto de réplica.

Consulte Roles de utilizador de banco de dados para roles internas básicas a serem usadas na criação de usuários somente leitura e de leitura e gravação.

O seguinte cria um usuário com permissões de leitura e gravação no reconhecimento de data center do foo .

Importante

As senhas devem ser aleatórias, longas e complexas para garantir a segurança do sistema e evitar ou atrasar o acesso malicioso.

Crie um usuário com o role readWrite no reconhecimento de data center do foo .

Dica

Você pode usar o método passwordPrompt() em conjunto com vários métodos/comandos de autenticação/gerenciamento de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método/comando. No entanto, você ainda pode especificar a senha diretamente como faria com versões anteriores do shell mongo .

db.getSiblingDB("foo").createUser(
{
"user" : "joe",
"pwd" : passwordPrompt(), // or cleartext password
roles: [ { "role" : "readWrite", "db" : "foo" } ]
}
)

Os clientes que se autenticam como este usuário podem executar operações de leitura e gravação no banco de dados foo . Consulte Autenticar um usuário com sistemas autogerenciados para saber mais sobre como criar uma conexão autenticada com o conjunto de réplicas.

Consulte o tutorial Adicionar usuários para obter mais informações sobre como adicionar usuários. Considere as melhores práticas de segurança ao adicionar novos usuários.

4

Neste ponto do procedimento, o conjunto de réplicas não impõe autenticação. No entanto, os aplicativos do cliente ainda podem especificar credenciais de autenticação e se conectar ao conjunto de réplicas.

Atualize os aplicativos do cliente para autenticar no conjunto de réplicas usando um usuário configurado. As conexões autenticadas exigem um nome de usuário, senha e o banco de dados de autenticação. Consulte Autenticar um usuário com sistemas autogerenciados.

Por exemplo, o seguinte conecta a um nome do conjunto mongoRepl e autentica como o usuário joe.

mongosh -u joe -password -authenticationDatabase foo --host mongoRepl/mongo1.example.net:27017, mongo2.example.net:27017, mongo3.example.net:27017

Se você não especificar a senha para a opção de linha de comando -p, o mongosh solicitará a senha.

Se o seu aplicativo usa um driver do MongoDB, consulte a documentação do driver associado para obter instruções sobre como criar uma conexão autenticada.

Na conclusão deste tutorial, o conjunto de réplicas rejeita conexões de clientes não autenticados. Executar esta etapa agora garante que os clientes possam se conectar ao conjunto de réplicas antes e depois da transição.

5

Com a autenticação do arquivo-chave, cada instância do mongod no conjunto de réplicas utiliza o conteúdo do arquivo-chave como a senha compartilhada para autenticar outros membros no sistema. Somente instâncias mongod com o arquivo-chave correto podem entrar no conjunto de réplicas.

Observação

Os arquivos de chaves para autenticação de associação interna usam o formato YAML para permitir várias chaves em um só arquivo. O formato YAML aceita:

  • Uma única string de chave (igual às versões anteriores)

  • Uma sequência de strings de chave

O formato YAML é compatível com os arquivos-chave de chave única existentes que usam o formato de arquivo de texto.

O comprimento de uma chave deve ter entre 6 e 1024 caracteres e só pode conter caracteres no conjunto base64. Todos os membros do conjunto de réplicas devem compartilhar pelo menos uma chave comum.

Observação

Em sistemas UNIX, o arquivo-chave não deve ter permissões de grupo ou mundiais. Em sistemas Windows, as permissões do arquivo-chave não são verificadas.

Você pode gerar um arquivo-chave usando qualquer método de sua escolha. Por exemplo, a operação a seguir usa openssl para gerar uma cadeia complexa pseudo-aleatória de 1024 caracteres para ser usada como senha compartilhada. Em seguida, ele usa chmod para alterar as permissões do arquivo e fornecer permissões de leitura somente para o proprietário do arquivo:

openssl rand -base64 756 > <path-to-keyfile>
chmod 400 <path-to-keyfile>

Consulte Keyfiles para obter detalhes adicionais e requisitos para usar keyfiles.

6

Copie o arquivo-chave para cada servidor que hospeda os membros do conjunto de réplicas. Certifique-se de que o usuário que executa as instâncias mongod seja o proprietário do arquivo e possa acessar o arquivo-chave.

Evite armazenar o arquivo-chave em meios de armazenamento que podem ser facilmente desconectados do hardware hospedando as instâncias do , como uma unidade USB ou um dispositivo de armazenamento conectado à mongod rede.

7

Reinicie cada membro secundário ou árbitro no conjunto de réplicas, incluindo na configuração:

Você deve reiniciar cada membro um de cada vez para garantir que a maioria dos membros no conjunto de réplicas permaneça online.

A partir de uma sessão mongosh conectada ao secundário ou árbitro, emita o db.shutdownServer() no banco de dados admin .

admin = db.getSiblingDB("admin")
admin.shutdownServer()

Especifique as seguintes configurações no arquivo de configuração.

mongod e mongos são vinculados ao localhost por padrão. Se os membros do seu sistema forem executados em hosts diferentes, ou se você desejar que clientes remotos se conectem ao seu sistema, especifique a configuração net.bindIp .

security:
keyFile: <path-to-keyfile>
transitionToAuth: true
replication:
replSetName: <replicaSetName>

Especifique a opção --config com o caminho para o arquivo de configuração ao iniciar o mongod .

mongod --config <path-to-config-file>

Para obter mais informações sobre o arquivo de configuração, consulte opções de configuração.

Como alternativa, você pode usar as opções equivalentes de linha de comando mongod (por exemplo, --transitionToAuth e --keyFile) ao iniciar seu mongod. Consulte a página de referência do mongod para uma lista completa de opções.

Inclua configurações adicionais conforme apropriado para seu sistema.

No final desta etapa, todos os secundários e árbitros devem estar instalados e funcionando com security.transitionToAuth definido como true.

8

Reduza o membro primário no conjunto de réplicas e reinicie o membro, inclusive em sua configuração:

Conecte-se ao primário usando mongosh e reduza o primário usando o método rs.stepDown() .

rs.stepDown()

Depois que o primário for desativado e o conjunto de réplicas escolher um novo primário, encerre o primário antigo mongod.

Em uma sessão mongosh conectada ao primário antigo, emita o db.shutdownServer() no banco de dados admin .

admin = db.getSiblingDB("admin")
admin.shutdownServer()

Especifique as seguintes configurações no arquivo de configuração.

Inclua opções adicionais, conforme necessário, para sua configuração. Por exemplo, se você deseja que clientes remotos se conectem à sua implantação ou se os membros da implantação forem executados em hosts diferentes, especifique a configuração net.bindIp.

security:
keyFile: <path-to-keyfile>
transitionToAuth: true
replication:
replSetName: <replicaSetName>

Inicie o mongod utilizando o arquivo de configuração.

mongod --config <path-to-config-file>

Para obter mais informações sobre o arquivo de configuração, consulte opções de configuração.

Como alternativa, você pode usar as opções equivalentes de linha de comando mongod (por exemplo, --transitionToAuth e --keyFile) ao iniciar seu mongod. Consulte a página de referência do mongod para uma lista completa de opções.

Inclua configurações adicionais conforme apropriado para seu sistema.

No final desta etapa, todos os membros do conjunto de réplicas devem estar em funcionamento com security.transitionToAuth definido como true e security.keyFile definido como o caminho do arquivo-chave.

9

Reinicie cada membro secundário ou árbitro no conjunto de réplicas, removendo a opção security.transitionToAuth na reinicialização. Você deve fazer isso um de cada vez para garantir que a maioria dos membros no conjunto de réplicas permaneça online.

Se a maioria dos membros do conjunto de réplicas estiver offline ao mesmo tempo, o conjunto de réplicas poderá Go no modo somente leitura.

Conecte mongosh ao secundário ou árbitro e emita o db.shutdownServer() no banco de dados admin .

admin = db.getSiblingDB("admin")
admin.shutdownServer()

Reinicie o mongod, desta vez sem a opção security.transitionToAuth , mas com o mecanismo de autenticação interno como security.keyFile.

Especifique as seguintes configurações no arquivo de configuração.

Inclua opções adicionais, conforme necessário, para sua configuração. Por exemplo, se você deseja que clientes remotos se conectem à sua implantação ou se os membros da implantação forem executados em hosts diferentes, especifique a configuração net.bindIp.

security:
keyFile: <path-to-keyfile>
replication:
replSetName: <replicaSetName>

Inicie o mongod utilizando o arquivo de configuração:

mongod --config <path-to-config-file>

Para obter mais informações sobre o arquivo de configuração, consulte opções de configuração.

Você também pode usar as opções mongod equivalentes ao iniciar seu mongod. Consulte a página de referência do mongod para uma lista completa de opções.

Inclua configurações adicionais conforme apropriado para seu sistema.

No final desta etapa, todos os secundários e árbitros devem estar em funcionamento com a autenticação interna configurada, mas sem security.transitionToAuth. Os clientes só podem se conectar a essas instâncias mongod usando o mecanismo de autenticação do cliente configurado.

10

Reduza o membro principal no conjunto de réplicas e reinicie-o sem a opção security.transitionToAuth .

Importante

No final desta etapa, os clientes que não se conectam com a autenticação não podem se conectar ao conjunto de réplicas. Atualize os clientes para se conectarem com a autenticação antes de concluir esta etapa para evitar a perda de conectividade.

Conecte-se ao primário usando mongosh e reduza o primário usando o método rs.stepDown() .

rs.stepDown()

Depois que o primário for desativado e o conjunto de réplicas escolher um novo primário, encerre o primário antigo mongod.

Em uma sessão mongosh conectada ao primário antigo, emita o db.shutdownServer() no banco de dados admin .

admin = db.getSiblingDB("admin")
admin.shutdownServer()

Reinicie o mongod, desta vez sem a opção security.transitionToAuth , mas com o mecanismo de autenticação interna, como security.keyFile.

Especifique as seguintes configurações no arquivo de configuração.

security:
keyFile: <path-to-keyfile>
replication:
replSetName: <replicaSetName>

Inicie o mongod utilizando o arquivo de configuração:

mongod --config <path-to-config-file>

Para obter mais informações sobre o arquivo de configuração, consulte opções de configuração.

Você também pode usar as opções mongod equivalentes ao iniciar seu mongod. Consulte a página de referência do mongod para uma lista completa de opções.

Inclua configurações adicionais conforme apropriado para seu sistema.

No final desta etapa, todos os membros do conjunto de réplicas devem estar em funcionamento com a autenticação imposta. Os clientes só podem se conectar a essas instâncias mongod usando o mecanismo de autenticação do cliente configurado.

Para obter detalhes sobre como usar x.509 para autenticação interna, consulte Usar x. Certificado 509 para autenticação de associação com MongoDB autogerenciado.

Para atualizar da autenticação interna do keyfile para x.509 autenticação interna, consulte Atualizar o MongoDB autogerenciado da autenticação de keyfile para x. Autenticação do 509 .

Voltar

Atualizar conjunto de réplicas

Próximo

Distribuir cluster fragmentado