Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Driver Pymongo
/ /

OIDC (Federação de Identidade do Volume de Trabalho)

O mecanismo de autenticação OpenID Connect (OIDC) permite que você autentique no MongoDB usando um provedor de identidade de terceiros, como o Azure ou o Google Cloud Platform (GCP).

Você pode usar esse mecanismo somente ao autenticar para MongoDB Atlas ou Enterprise Advanced e somente ao autenticar para MongoDB v7.0 ou posterior.

Dica

Autenticação OIDC

Para saber mais sobre como configurar o MongoDB Atlas para autenticação OIDC, consulte Configurar Federação de Identidade da Força de Trabalho com OIDC na documentação do Atlas .

Para obter mais informações sobre o uso da autenticação OIDC com o MongoDB, consulte Autenticação do OpenID Connect e Parâmetros do MongoDB Server no manual do MongoDB Server .

Os exemplos de código nesta página usam os seguintes espaços reservados:

  • +srv: inclua essa opção no prefixo da string de conexão somente se estiver se conectando a um cluster MongoDB Atlas . Para saber mais sobre a +srv opção, consulte Formatos de connection string no manual do MongoDB Server .

  • <Azure ID>: o ID do cliente ou do ID do aplicativo de identidade gerenciada pelo Azure ou do aplicação empresarial , se estiver autenticando no Azure IMDS.

  • <hostname>: O endereço de rede da sua implantação MongoDB .

  • <port>: o número da porta da sua implantação do MongoDB . Se você omitir este parâmetro, o driver utilizará o número de porta padrão (27017). Você não precisa especificar uma porta ao se conectar a um cluster MongoDB Atlas .

  • <audience>: O valor do parâmetro do audience configurado em sua deployment do MongoDB .

Para usar os exemplos de código nesta página, substitua esses espaços reservados por seus próprios valores.

Importante

Codificação percentual

Você deve codificar um nome de usuário e uma senha antes de incluí-los em um URI MongoDB . O quote_plus() método, disponível no módulo urllib.parse, é uma maneira de executar esta tarefa. Por exemplo, chamar quote_plus("and / or") retorna a and+%2F+or string.

Não codifique percentualmente o nome de usuário ou a senha ao passá-los como argumentos para MongoClient.

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

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 o seu aplicação for executado em um Azure VM ou de outra forma usar o Azure Instance Metadata Service (IMDS), você poderá 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.

Primeiro, crie um dicionário Python para suas propriedades do mecanismo de autenticação , conforme mostrado no exemplo a seguir:

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.

  • 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[+srv]://<hostname>:<port>",
username="<Azure 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.

  • authMechanism: Defina como MONGODB-OIDC.

  • authMechanismProperties: Defina como ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>.

    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[+srv]://<hostname>:<port>/?"
"username=<username>"
"&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 GCP Instance Metadata Service, você pode autenticar no MongoDB usando o suporte integrado ao GCP 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.

Primeiro, crie um dicionário Python para as propriedades do mecanismo de autenticação , conforme mostrado no exemplo a seguir.

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[+srv]://<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>.

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[+srv]://<hostname>:<port>/?"
"&authMechanism=MONGODB-OIDC"
"&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>")
client = MongoClient(uri)

Se a sua aplicação for executada no Azure Functions, App Service Environment (ASE) ou Azure Kubernetes Service (AKS), você poderá usar o pacote azure-identity 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 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 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[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

Se seu aplicação for executado em um cluster GCP do Google Kubernetes Engine (GKE) com uma conta de serviço configurada, você poderá ler o token OIDC a partir do local padrão do arquivo de token de 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[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

Voltar

AWS IAM

Nesta página