Eu me deparei com esse problema super chato hoje.
Basicamente, configurei um banco de dados MongoDB usando a oferta do GCP Marketplace. Ele configura um nó primário, secundário e um árbitro. O que é muito legal. O que isso não faz é segurança. Tipo, de jeito nenhum. Então é natural que eu mesmo tenha que configurá-lo. Bem, agora, 20 horas depois e alguns bons socos na minha cara, ainda estou lutando para fazê-lo funcionar.
Basicamente, esta é minha configuração parcial:
security:
authorization: enabled
keyFile: '/etc/mongodKey'
Se eu comentar, a keyFile
instância será executada. Mas ele não pode se conectar a nenhum outro nó, devido à segurança estar habilitada. E não, não posso desativá-lo, você está bravo?
A questão do keyFile, porém... Pelo que entendi, mongod
não consigo abri-lo, então ele não inicia. Suponho que /etc
não seja um bom lugar para colocá-lo? Tentei outras pastas, mas sem sucesso. Nada funciona.
E preciso ter essa medida de segurança, já que o banco de dados precisa ser conectado pelos meus colegas usando o Robo 3T. Portanto, descartar o endereço IP externo está fora de questão.
O que eu fiz de errado? Por favor, ajude enquanto estou arrancando meus próprios cabelos.
Esta é a saída de sudo service mongod status
:
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2019-08-21 15:28:08 UTC; 4min 29s ago
Docs: https://docs.mongodb.org/manual
Process: 1024 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=1/FAILURE)
Main PID: 1024 (code=exited, status=1/FAILURE)
Aug 21 15:28:08 m-vm-0 systemd[1]: Started MongoDB Database Server.
Aug 21 15:28:08 m-vm-0 systemd[1]: mongod.service: Main process exited, code=exited, status=1/F
Aug 21 15:28:08 m-vm-0 systemd[1]: mongod.service: Unit entered failed state.
Aug 21 15:28:08 m-0 systemd[1]: mongod.service: Failed with result 'exit-code'.
Editar:
Eu verifiquei o mongod.log
. Sim, é um problema de permissão. E não consigo resolver isso.
Eu tentei fazer sudo chmod 400 /etc/mongodKey
, mas não faz nada. Por favor, alguém, onde coloco o arquivo de chave para que possa ser lido pelo mongodb? Isto é muito importante!
Responder1
Se você usar a implantação do mercado MongoDB do GCP chamada "MongoDB", que permite configurar a replicação, saiba o seguinte:
Eles não configuram a segurança na configuração inicial, portanto existem 2 opções:
- Desligue o IP externo
- Habilite a autorização no
mongod.conf
Se você optar pela primeira solução, não conseguirá conectar-se facilmente ao banco de dados a partir de outras fontes externas.
Se você optar pela segunda solução, precisará fazer o seguinte:
Gere uma chave, todo o processo pode ser encontrado aqui:https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existente-replica-set/
Copie o conteúdo do arquivo
- SSH em todas as instâncias do Compute Engine
- Escolha um diretório
sudo touch <path to key>
sudo nano <path to key>
- Cole a chave que você gerou no seu computador e salve
sudo chmod 600 <path to key>
sudo chown mongodb: <path to key>
- Atualize o seu
mongod.conf
que se encontra em/etc/mongod.conf
- Remova o comentário
security
,authorization
,keyFile
- Forneça o caminho da chave
keyFile
para o seu arquivo-chave - Pare todas as instâncias e reinicie-as
Agora o MongoDB tem acesso ao arquivo-chave.
O que é um pesadelo. E chmod 400 <path to key>
não funcionou para mim conforme especificado na documentação. Eu tive que configurá-lo para chmod 600 <path to key>
.