Menu Docs

Página inicial do DocsDesenvolver aplicaçõesDrivers PythonPyMongo

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.

A 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.

Importante

O mecanismo de autenticação MONGODB-OIDC requer o MongoDB v7.0 ou posteriores 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 no manual do MongoDB Server .

Se seu aplicativo 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.

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 aplicativo é executado em uma VM GCP 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.

Se o seu aplicativo 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 configured on the MongoDB deployment>"
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 configured on the MongoDB deployment>"
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 aplicativo 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:

← Mecanismos de autenticação