Mecanismos de autenticação empresarial
Nesta página
Visão geral
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.
Kerberos
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 usamongodb
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 usamongodb
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)
PLAIN SASL
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)
MONGODB-OIDC
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
.
IMDS do Azure
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árioproperties
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 comoMONGODB-OIDC
.authMechanismProperties
: Defina comoENVIRONMENT:azure,TOKEN_RESOURCE:<audience>
. Substitua o espaço reservado<audience>
pelo valor do parâmetroaudience
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
.
GCP IMDS
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árioproperties
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 comoMONGODB-OIDC
.authMechanismProperties
: Defina comoENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>
. Substitua o espaço reservado<audience>
pelo valor do parâmetroaudience
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)
Outros ambientes Azure
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árioproperties
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 )
GCP GKE
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árioproperties
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 )
Documentação da API
Para saber mais sobre como usar mecanismos de autenticação empresarial com o PyMongo, consulte a seguinte documentação da API: