Menu Docs
Página inicial do Docs
/ / /
PyMongo
/

Mecanismos de autenticação empresarial

Nesta página

  • Visão geral
  • Kerberos
  • PLAIN SASL
  • MONGODB-OIDC
  • IMDS do Azure
  • GCP IMDS
  • Outros ambientes Azure
  • GCP GKE
  • Documentação da API

O MongoDB Enterprise Edition inclui mecanismos de autenticação que não estão disponíveis no MongoDB Community Edition. Neste guia, você pode aprender como autenticar no MongoDB usando esses mecanismos de autenticação. Para saber mais sobre os outros mecanismos de autenticação disponíveis no MongoDB, consulte Mecanismos de autenticação.

A API de serviços de segurança genérica (GSSAPI) fornece uma interface para a autenticação Kerberos. Selecione a guia que corresponde ao seu sistema operacional para saber como usar o Kerberos para autenticar.

Primeiro, use pip ou fácil_install para instalar o Python móduloKerberos Python Kerberos ou pykerberos.

Após instalar um desses módulos, execute o comando kinit para obter e armazenar em cache um ticket inicial de concessão de ticket. O exemplo a seguir usa o comando knit para obter um ticket de concessão de ticket para o mongodbuser@EXAMPLE.COM principal . Em seguida, ele usa o comando klist para exibir o principal e o ticket no cache de credenciais.

$ kinit mongodbuser@EXAMPLE.COM
mongodbuser@EXAMPLE.COM's Password:
$ klist
Credentials cache: FILE:/tmp/krb5cc_1000
Principal: mongodbuser@EXAMPLE.COM
Issued Expires Principal
Feb 9 13:48:51 2013 Feb 9 23:48:51 2013 krbtgt/mongodbuser@EXAMPLE.COM

Após obter um ticket de concessão de ticket, defina as seguintes opções de conexão:

  • username: O principal do Kerbos a ser autenticado. Porcentagem Codifique esse valor antes de incluí-lo em um URI de conexão.

  • authMechanism: Defina como "GSSAPI".

  • authMechanismProperties: Opcional. Por padrão, o MongoDB usa mongodb como o nome do serviço de autenticação. Para especificar um nome de serviço diferente, defina esta opção como "SERVICE_NAME:<authentication service name>".

Você pode definir estas opções de duas maneiras: passando argumentos para o construtor MongoClient ou por meio de parâmetros em sua connection string.

Observação

Se seus valores authMechanismProperties incluírem uma vírgula, você deverá usar o construtor MongoClient para definir suas opções de autenticação.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
username="mongodbuser@EXAMPLE.COM",
authMechanism="GSSAPI",
authMechanismProperties="SERVICE_NAME:<authentication service name>")
uri = ("mongodb://mongodbuser%40EXAMPLE.COM@<hostname>:<port>/?"
"&authMechanism=GSSAPI"
"&authMechanismProperties=SERVICE_NAME:<authentication service name>")
client = pymongo.MongoClient(uri)

Primeiro, instale o winkerberos módulo. Em seguida, defina as seguintes opções de conexão:

  • username: O principal do Kerbos a ser autenticado. Porcentagem Codifique esse valor antes de incluí-lo em um URI de conexão.

  • authMechanism: Defina como "GSSAPI".

  • password: Opcional. Se o usuário a ser autenticado for diferente do usuário que possui o processo do aplicação , defina essa opção como a senha do usuário que será autenticado.

  • authMechanismProperties: Opcional. Esta opção inclui múltiplas propriedades de autenticação. Para especificar mais de uma das seguintes propriedades, utilize uma lista delimitada por vírgula.

    • SERVICE_NAME: Por padrão, o MongoDB usa mongodb como o nome do serviço de autenticação. Use esta opção para especificar um nome de serviço diferente.

    • CANONICALIZE_HOST_NAME: Se o nome de domínio totalmente qualificado (FQDN) do host do MongoDB deve ser usado para a entidade do servidor .

    • SERVICE_REALM: O realm do serviço. Utilize esta opção quando o Realm do usuário for diferente do Realm do serviço.

Você pode definir estas opções de duas maneiras: passando argumentos para o construtor MongoClient ou por meio de parâmetros em sua connection string.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
username="mongodbuser@EXAMPLE.COM",
authMechanism="GSSAPI",
password="<user password>",
authMechanismProperties="SERVICE_NAME:<authentication service name>,
CANONICALIZE_HOST_NAME:true,
SERVICE_REALM:<service realm>")
uri = ("mongodb://mongodbuser%40EXAMPLE.COM:<percent-encoded user password>"
"@<hostname>:<port>/?"
"&authMechanism=GSSAPI"
"&authMechanismProperties="
"SERVICE_NAME:<authentication service name>,"
"CANONICALIZE_HOST_NAME:true,"
"SERVICE_REALM:<service realm>")
client = pymongo.MongoClient(uri)

O PLAIN Camada de Autenticação e Segurança Simples (SASL), conforme definido por RFC 4616, é um mecanismo de autenticação de nome de usuário e senha frequentemente usado com TLS ou outra camada de criptografia.

Importante

PLAIN SASL é um mecanismo de autenticação de texto não criptografado. É altamente recomendável usar TLS/SSL com validação de certificado ao usar PLAIN SASL para autenticar no MongoDB.

Para saber mais sobre como habilitar o TLS para sua conexão, consulte Configurar o TLS (Transport Layer Security).

Para autenticar com SASL, configure a opção de conexão do authMechanism para PLAIN. Você pode definir essa opção de duas maneiras: passando um argumento para o construtor MongoClient ou por meio de um parâmetro em sua connection string.

Observação

Se seus valores authMechanismProperties incluírem uma vírgula, você deverá usar o construtor MongoClient para definir suas opções de autenticação.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
username="<db_username>",
password="<db_password>",
authMechanism="PLAIN",
tls=True)
uri = ("mongodb://<db_username>:<db_password>@<hostname>:<port>/?"
"&authMechanism=PLAIN"
"&tls=true")
client = pymongo.MongoClient(uri)

Importante

O mecanismo de autenticação MONGODB-OIDC requer MongoDB Server v7.0 ou posterior em execução em uma plataforma Linux.

O PyMongo oferece suporte à autenticação OIDC para identidades de volume de trabalho. Uma identidade de carga de trabalho é uma identidade que você atribui a uma carga de trabalho de software, como um aplicativo, serviço, script ou contêiner, para autenticar e acessar outros serviços e recursos.

As seções a seguir descrevem como usar o mecanismo de autenticação MONGODB-OIDC para autenticar em várias plataformas.

Para obter mais informações sobre o mecanismo de autenticação MONGODB-OIDC, consulte Autenticação do OpenID Connect e MongoDB Server do MongoDB Server no manual do Servidor MongoDB.

Observação

Como a Biblioteca Padrão do Python não suporta solicitações HTTP assíncronas, todas as solicitações OIDC do PyMongo são síncronas e bloqueiam o loop asyncio .

Se seu aplicação for executado em uma VM do Azure ou usar o Serviço de Metadados de Instância do Azure (IMDS), você pode autenticar no MongoDB usando o suporte integrado do Azure do PyMongo.

Você pode configurar o OIDC para o Azure IMDS de duas maneiras: passando argumentos para o construtor MongoClient ou por meio de parâmetros em sua connection string.

Observação

Se seus valores authMechanismProperties incluírem uma vírgula, você deverá usar o construtor MongoClient para definir suas opções de autenticação.

Primeiro, crie um dicionário Python para suas propriedades do mecanismo de autenticação, conforme mostrado no exemplo a seguir. Substitua o espaço reservado <audience> pelo valor do parâmetro audience configurado em sua deployment do MongoDB.

O exemplo de código a seguir mostra como definir essas opções em sua string de conexão:

properties = {"ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>"}

Em seguida, defina as seguintes opções de conexão:

  • username: Se você estiver usando uma identidade gerenciada pelo Azure, defina para a ID do cliente da identidade gerenciada. Se você estiver usando um principal de serviço para representar um aplicativo empresarial, defina para o ID do aplicativo do principal de serviço.

  • authMechanism: Defina como "MONGODB-OIDC".

  • authMechanismProperties: defina para o dicionário properties que você criou na etapa anterior.

O seguinte exemplo de código mostra como definir estas opções ao criar um MongoClient:

from pymongo import MongoClient
# define properties and MongoClient
properties = {"ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>"}
client = MongoClient(
"mongodb://<hostname>:<port>",
username="<Azure client ID or application ID>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

Inclua as seguintes opções de conexão em sua connection string:

  • username: Se você estiver usando uma identidade gerenciada pelo Azure, defina para a ID do cliente da identidade gerenciada. Se você estiver usando um principal de serviço para representar um aplicativo empresarial, defina para o ID do aplicativo do principal de serviço.

  • authMechanism: Defina como MONGODB-OIDC.

  • authMechanismProperties: Defina como ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>. Substitua o espaço reservado <audience> pelo valor do parâmetro audience configurado em sua deployment do MongoDB .

    O exemplo de código a seguir mostra como definir essas opções em sua string de conexão:

from pymongo import MongoClient
# define URI and MongoClient
uri = ("mongodb://<hostname>:<port>/?"
"username=<Azure client ID or application ID>"
"&authMechanism=MONGODB-OIDC"
"&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>")
client = MongoClient(uri)

Dica

Se seu aplicativo estiver em execução em uma VM do Azure e somente uma identidade gerenciada estiver associada à VM, você poderá omitir a opção de conexão username .

Se seu aplicação é executado em uma VM do Google Compute Engine ou usa o Serviço de Metadados de Instância GCP, você pode autenticar no MongoDB usando o suporte GCP integrado do PyMongo.

Você pode configurar o OIDC para o GCP IMDS de duas maneiras: passando argumentos para o construtor MongoClient ou por meio de parâmetros em sua connection string.

Observação

Se seus valores authMechanismProperties incluírem uma vírgula, você deverá usar o construtor MongoClient para definir suas opções de autenticação.

Primeiro, crie um dicionário Python para suas propriedades do mecanismo de autenticação, conforme mostrado no exemplo a seguir. Substitua o espaço reservado <audience> pelo valor do parâmetro audience configurado em sua deployment do MongoDB.

properties = {"ENVIRONMENT": "gcp", "TOKEN_RESOURCE": "<audience>"}

Em seguida, defina as seguintes opções de conexão:

  • authMechanism: Defina como "MONGODB-OIDC".

  • authMechanismProperties: defina para o dicionário properties que você criou na etapa anterior.

O seguinte exemplo de código mostra como definir estas opções ao criar um MongoClient:

from pymongo import MongoClient
# define properties and MongoClient
properties = {"ENVIRONMENT": "gcp", "TOKEN_RESOURCE": "<audience>"}
client = MongoClient(
"mongodb://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

Inclua as seguintes opções de conexão em sua connection string:

  • authMechanism: Defina como MONGODB-OIDC.

  • authMechanismProperties: Defina como ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>. Substitua o espaço reservado <audience> pelo valor do parâmetro audience configurado em sua deployment do MongoDB .

O exemplo de código a seguir mostra como definir essas opções em sua string de conexão:

from pymongo import MongoClient
# define URI and MongoClient
uri = ("mongodb://<hostname>:<port>/?"
"&authMechanism=MONGODB-OIDC"
"&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>")
client = MongoClient(uri)

Se o seu aplicação for executado no Azure Functions, App Service Environment (ASE) ou Azure Kubernetes Service (AKS), você pode usar a identidade azure pacote para buscar credenciais de autenticação.

Primeiro, use o pip para instalar a biblioteca azure-identity , como mostrado no exemplo a seguir:

python3 -m pip install azure-identity

Em seguida, defina uma classe que herda da classe OIDCCallback . Esta classe deve implementar um método fetch() , que retorna o token OIDC na forma de um objeto OIDCCallbackResult .

O exemplo seguinte mostra como definir uma classe de retorno de chamada MyCallback. Essa classe inclui um método fetch() que recupera um token OIDC de um arquivo no local padrão do arquivo de token de conta de serviço.

audience = "<audience>"
client_id = "<Azure client ID>"
class MyCallback(OIDCCallback):
def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult:
credential = DefaultAzureCredential(managed_identity_client_id=client_id)
token = credential.get_token(f"{audience}/.default").token
return OIDCCallbackResult(access_token=token)

Após definir sua classe de retorno de chamada, crie um dicionário Python que contenha uma chave, "OIDC_CALLBACK", cujo valor seja uma instância de sua classe de retorno de chamada personalizada:

properties = {"OIDC_CALLBACK": MyCallback()}

Por fim, defina as seguintes opções de conexão passando argumentos para o construtor MongoClient :

  • authMechanism: Defina como "MONGODB-OIDC".

  • authMechanismProperties: defina para o dicionário properties que você criou na etapa anterior.

from pymongo import MongoClient
from azure.identity import DefaultAzureCredential
from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult
# define callback, properties, and MongoClient
audience = "<audience>"
client_id = "<Azure client ID>"
class MyCallback(OIDCCallback):
def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult:
credential = DefaultAzureCredential(managed_identity_client_id=client_id)
token = credential.get_token(f"{audience}/.default").token
return OIDCCallbackResult(access_token=token)
properties = {"OIDC_CALLBACK": MyCallback()}
client = MongoClient(
"mongodb://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

Se o seu aplicação for executado em um cluster GCP do Google Kubernetes Engine (GKE) com uma conta de serviço configurada, você pode ler o token OIDC a partir do local padrão do arquivo de token da conta de serviço.

Primeiro, defina uma classe que herda da classe OIDCCallback . Esta classe deve implementar um método fetch() , que retorna o token OIDC na forma de um objeto OIDCCallbackResult .

O exemplo seguinte mostra como definir uma classe de retorno de chamada MyCallback. Essa classe inclui um método fetch() que recupera um token OIDC de um arquivo no local padrão do arquivo de token de conta de serviço.

class MyCallback(OIDCCallback):
def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult:
with open("/var/run/secrets/kubernetes.io/serviceaccount/token") as fid:
token = fid.read()
return OIDCCallbackResult(access_token=token)

Após definir sua classe de retorno de chamada, crie um dicionário Python que contenha uma chave, "OIDC_CALLBACK", cujo valor seja uma instância de sua classe de retorno de chamada personalizada:

properties = {"OIDC_CALLBACK": MyCallback()}

Por fim, defina as seguintes opções de conexão passando argumentos para o construtor MongoClient :

  • authMechanism: Defina como "MONGODB-OIDC".

  • authMechanismProperties: defina para o dicionário properties que você criou na etapa anterior.

from pymongo import MongoClient
from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult
# define callback, properties, and MongoClient
class MyCallback(OIDCCallback):
def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult:
with open("/var/run/secrets/kubernetes.io/serviceaccount/token") as fid:
token = fid.read()
return OIDCCallbackResult(access_token=token)
properties = {"OIDC_CALLBACK": MyCallback()}
client = MongoClient(
"mongodb://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

Para saber mais sobre como usar mecanismos de autenticação empresarial com o PyMongo, consulte a seguinte documentação da API:

Voltar

Mecanismos de autenticação