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 mongod
a.
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 and 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.
Conecte mongosh
mongod
o ao e faça a autenticação.
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
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 membro 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.