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 por cento para um nome de usuário e 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 string and+%2F+or.

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 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:

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[+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. 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>.

    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 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 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 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 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()}

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

  • authMechanism: Defina como "MONGODB-OIDC".

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

Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:

client = MongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)
client = AsyncMongoClient(
"mongodb[+srv]://<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()}

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

  • authMechanism: Defina como "MONGODB-OIDC".

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

Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:

client = MongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)
client = AsyncMongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

Se seu aplicação é executado em um cluster do Kubernetes, você pode autenticar no MongoDB usando o suporte integrado do PyMongo ao Kubernetes.

Você pode configurar o OIDC para o Kubernetes de duas maneiras: passando argumentos para o construtor MongoClient ou por meio de parâmetros em sua string de conexão. Selecione nas seguintes guias para ver como ativar a autenticação do Kubernetes para seu aplicação:

properties = {"ENVIRONMENT": "k8s"}
client = MongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)
uri = ("mongodb[+srv]://<hostname>:<port>/?"
"authMechanism=MONGODB-OIDC"
"&authMechanismProperties=ENVIRONMENT:k8s")
client = MongoClient(uri)
properties = {"ENVIRONMENT": "k8s"}
client = AsyncMongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)
uri = ("mongodb[+srv]://<hostname>:<port>/?"
"authMechanism=MONGODB-OIDC"
"&authMechanismProperties=ENVIRONMENT:k8s")
client = AsyncMongoClient(uri)

Voltar

AWS IAM

Nesta página

  • Visão geral
  • Espaços reservados de código
  • Usando a autenticação OIDC em seu aplicativo
  • IMDS do Azure
  • GCP IMDS
  • Outros ambientes Azure
  • GCP GKE
  • Kubernetes