Configure o MongoDB com autenticação Kerberos no Linux
Visão geral
O MongoDB Enterprise oferece suporte à autenticação usando um serviço Kerberos. O Kerberos é um protocolo de autenticação padrão do setor para grandes sistemas de cliente/ servidor . O MongoDB Enterprise oferece suporte apenas à implementação do MIT de Kerberos.
Pré-requisitos
Para verificar que você está utilizando o MongoDB Enterprise, passe a opção de linha de comando --version
para mongod
ou mongos
:
mongod --version
Na saída deste comando, procure a string modules:
subscription
ou modules: enterprise
para confirmar que você está usando os binários MongoDB Enterprise.
Para conjuntos de réplicas e clusters fragmentados, verifique se sua configuração usa nomes de domínio totalmente qualificados (FQDN) em vez de endereços IP ou nomes de host não qualificados. Você deve usar o FQDN para GSSAPI para resolver corretamente os domínios Kerberos e permitir que você se conecte.
A instalação e a configuração de uma implantação do Kerberos estão além do escopo deste documento. Consulte a documentação do MIT Kerberos ou a documentação do seu sistema operacional para obter informações sobre como configurar uma implantação do Kerberos.
Para usar o MongoDB com Kerberos, uma entidade de serviço do Kerberos para cada instância do mongod
e mongos
em sua implantação do MongoDB deve ser adicionado ao banco de dados do Kerberos. Você pode adicionar a entidade de serviço executando um comando semelhante ao seguinte em seu KDC:
kadmin.local addprinc mongodb/m1.example.com@EXAMPLE.COM
Em cada sistema que estiver executando mongod
ou mongos
, deverá ser criado um arquivo keytab para a respectiva entidade de serviço. Você pode criar o arquivo keytab executando um comando semelhante ao seguinte no sistema que está executando mongod
ou mongos
:
kadmin.local ktadd mongodb/m1.example.com@EXAMPLE.COM
Procedimento
O procedimento abaixo descreve as etapas para adicionar uma entidade de usuário do Kerberos no MongoDB, configurar uma instância do mongod
autônoma para compatibilidade com Kerberos e conectar utilizando o mongosh
e autenticar a entidade de usuário.
Comece mongod
sem Kerberos.
Para a adição inicial de usuários Kerberos, inicie o mongod
sem suporte Kerberos.
Se um usuário Kerberos já estiver no MongoDB e tiver os privilégios exigidos para criar um usuário, você poderá iniciar o mongod
com suporte Kerberos.
Inclua configurações adicionais conforme apropriado para seu sistema.
Observação
mongod
e mongos
se vinculam ao localhost por padrão. Se os membros do sistema forem executados em hosts diferentes, ou se você desejar que os clientes remotos se conectem ao sistema, especifique --bind_ip
ou net.bindIp
.
Conecte-se a mongod
.
Conecte mongosh
à instância mongod
. Se mongod
tiver --auth
ativado, verifique se você se conecta com os privilégios necessários para criar um usuário.
Adicione Kerberos Principal(s) ao MongoDB.
Adicione um principal Kerberos, <username>@<KERBEROS REALM>
ou <username>/<instance>@<KERBEROS REALM>
, ao MongoDB no banco de dados do $external
. Especifique o domínio Kerberos em todas as letras maiúsculas. O banco de dados do $external
permite ao mongod
executar queries de uma origem externa (por exemplo, Kerberos) para autenticar. Para especificar os privilégios do usuário, atribua funções ao usuário.
Para usar Client Sessions e Causal Consistency Guarantees com usuários de autenticação $external
(usuários Kerberos, LDAP ou x.509), os nomes de usuário não podem ter mais de 10k bytes.
O seguinte exemplo adiciona o principal application/reporting@EXAMPLE.NET
Kerberos com acesso somente leitura ao banco de dados records
:
use $external db.createUser( { user: "application/reporting@EXAMPLE.NET", roles: [ { role: "read", db: "records" } ] } )
Adicione entidades adicionais conforme necessário. Para cada usuário que você deseja autenticar usando Kerberos, você deve criar um usuário correspondente no MongoDB. Para obter mais informações sobre como criar e gerenciar usuários, consulte Comandos de gerenciamento de usuários.
Comece mongod
o com suporte ao Kerberos.
Para iniciar com suporte a Kerberos, defina a variável de mongod
ambiente KRB5_KTNAME
para o caminho do arquivo keytab e o mongod
parâmetro authenticationMechanisms
para GSSAPI
da seguinte forma:
env KRB5_KTNAME=<path to keytab file> \ mongod \ --setParameter authenticationMechanisms=GSSAPI \ <additional mongod options>
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 o --bind_ip
.
Por exemplo, o seguinte inicia uma instância do mongod
independente com suporte Kerberos:
env KRB5_KTNAME=/opt/mongodb/mongod.keytab \ /opt/mongodb/bin/mongod --auth \ --setParameter authenticationMechanisms=GSSAPI \ --dbpath /opt/mongodb/data --bind_ip localhost,<hostname(s)|ip address(es)>
O caminho para o mongod
bem como o arquivo keytab pode ser diferente. O arquivo keytab deve estar acessível apenas ao proprietário do processo mongod
.
Com os pacotes oficiais do .deb
ou .rpm
, você pode definir o KRB5_KTNAME
em um arquivo de configurações de ambiente. Consulte KRB5_KTNAME para obter detalhes.
Connect mongosh
to mongod
and authenticate.
Conecte o cliente mongosh
como o principal do Kerberos application/reporting@EXAMPLE.NET
. Antes de conectar, é necessário ter usado o programa kinit
do Kerberos para obter as credenciais de application/reporting@EXAMPLE.NET
.
Você pode conectar e autenticar a partir da linha de comando.
mongosh --host hostname.example.net --authenticationMechanism=GSSAPI --authenticationDatabase='$external' --username application/reporting@EXAMPLE.NET
Se você estiver conectando a um sistema cujo nome de host corresponda ao nome Kerberos, especifique o nome de domínio totalmente qualificado (FQDN) para a opção --host
, em vez de um endereço IP ou nome de host não qualificado.
Se estiver se conectando a um sistema cujo nome de host não corresponda ao nome do Kerberos, primeiro conecte mongosh
ao mongod
e, em seguida, no mongosh
, use o método db.auth()
para se autenticar no banco de dados $external
.
use $external db.auth( { mechanism: "GSSAPI", user: "application/reporting@EXAMPLE.NET" } )
Considerações adicionais
KRB5_KTNAME
Se você instalou o MongoDB Enterprise usando um dos pacotes oficiais de .deb
ou .rpm
e usa os scripts init/upstart incluídos para controlar a instânciamongod
, poderá definir a variável KRB5_KTNAME
no arquivo de configurações de ambiente padrão em vez de definir a variável todas as vezes.
Versões recentes de sistemas baseados em Red Hat e Debian usam systemd
. As versões mais antigas usam init
para inicialização do sistema. Siga as instruções apropriadas para configurar a variável KRB5_KTNAME
para seu sistema.
systemd
Arquivos de configuração
systemd
armazena a configuração em arquivos unitários. Atualize o arquivo unitário para definir a variável KRB5_KTNAME
.
Editar o arquivo unitário
Adicione a linha editada ao arquivo unitário. O arquivo da unidade editado se assemelhará a:
[Unit] Description=High-performance, schema-free document-oriented database After=network.target Documentation=https://docs.mongodb.org/manual [Service] User=mongodb Group=mongodb ExecStart=/usr/bin/mongod --config /etc/mongod.conf Environment="KRB5_KTNAME=/etc/mongod.keytab" PIDFile=/var/run/mongodb/mongod.pid file size LimitFSIZE=infinity cpu time LimitCPU=infinity virtual memory size LimitAS=infinity open files LimitNOFILE=64000 processes/threads LimitNPROC=64000 locked memory LimitMEMLOCK=infinity total threads (user+kernel) TasksMax=infinity TasksAccounting=false Recommended limits for for mongod as specified in http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings [Install] WantedBy=multi-user.target
Restart the mongod
service
sudo systemctl restart mongod
init
Arquivos de configuração
Para instalações do .rpm
, o arquivo de configurações de ambiente padrão é /etc/sysconfig/mongod
.
Para instalações do .deb
, o arquivo é /etc/default/mongodb
.
Defina o valor KRB5_KTNAME
adicionando uma linha como a seguinte:
KRB5_KTNAME="<path to keytab>"
Configurar mongos
para Kerberos
Para iniciar mongos
com suporte do Kerberos, defina a variável de ambiente KRB5_KTNAME
para o caminho do arquivo keytab e o parâmetro mongos
authenticationMechanisms
para GSSAPI
da seguinte forma:
env KRB5_KTNAME=<path to keytab file> \ mongos \ --setParameter authenticationMechanisms=GSSAPI \ <additional mongos options>
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 o --bind_ip
.
Por exemplo, o seguinte inicia uma instância do mongos
com suporte Kerberos:
env KRB5_KTNAME=/opt/mongodb/mongos.keytab \ mongos \ --setParameter authenticationMechanisms=GSSAPI \ --configdb shard0.example.net, shard1.example.net,shard2.example.net \ --keyFile /opt/mongodb/mongos.keyfile \ --bind_ip localhost,<hostname(s)|ip address(es)>
O caminho para o mongos
bem como o arquivo keytab pode ser diferente. O arquivo keytab deve estar acessível apenas ao proprietário do processo mongos
.
Modifique ou inclua quaisquer opções adicionais do mongos
conforme exigido para sua configuração. Por exemplo, em vez de usar --keyFile
para autenticação interna de membros fragmentados do cluster, você pode usar a autenticação de membros x.509.
Usar um arquivo de configuração
Para configurar o mongod
ou mongos
para suporte Kerberos utilizando um arquivo de configuração, especifique a configuração do authenticationMechanisms
no arquivo de configuração.
Se estiver a utilizar o formato de ficheiro de configuração YAML:
setParameter: authenticationMechanisms: GSSAPI
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
.
Por exemplo, se o /opt/mongodb/mongod.conf
tiver as seguintes definições de configuração para um mongod
independente:
security: authorization: enabled setParameter: authenticationMechanisms: GSSAPI storage: dbPath: /opt/mongodb/data net: bindIp: localhost,<hostname(s)|ip address(es)>
Para iniciar o mongod
com suporte Kerberos, utilize o seguinte formulário:
env KRB5_KTNAME=/opt/mongodb/mongod.keytab \ /opt/mongodb/bin/mongod --config /opt/mongodb/mongod.conf
O caminho para seu mongod
, arquivo keytab e arquivo de configuração pode ser diferente. O arquivo keytab deve ser acessível apenas ao proprietário do processo mongod
.
Solução de problemas de configuração do Kerberos para MongoDB
Se você encontrar problemas ao iniciar o mongod
ou mongos
com autenticação Kerberos, consulte Solução de problemas de autenticação Kerberos autogerenciada.
Incorporar mecanismos de autenticação adicionais
A autenticação Kerberos (GSSAPI (Kerberos)) pode funcionar ao lado de:
Mecanismo de autenticação SCRAM do MongoDB:
Mecanismo de autenticação do MongoDB para LDAP:
PLAIN (LDAP SASL)
Mecanismo de autenticação do MongoDB para x.509:
Especifique os mecanismos da seguinte maneira:
--setParameter authenticationMechanisms=GSSAPI,SCRAM-SHA-256
Adicione apenas os outros mecanismos se estiver em uso. Esta configuração de parâmetro não afeta a autenticação interna do MongoDB dos membros do cluster.
Teste e verificação
Após completar as etapas de configuração, você pode validar sua configuração com a ferramenta mongokerberos
.
mongokerberos
fornece um método prático para verificar a configuração Kerberos da sua plataforma para uso com o MongoDB e para testar se a autenticação Kerberos de um cliente MongoDB funciona conforme esperado. Consulte a documentação do mongokerberos
para saber mais informações.
mongokerberos
está disponível apenas no MongoDB Enterprise.