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

Mecanismos de autenticação

Nesta página

  • Visão geral
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-X509
  • MONGODB-AWS
  • MongoClient Credenciais
  • Variáveis de ambiente
  • Arquivo de Credenciais Compartilhados
  • Arquivo de configuração do Amazon Web Services
  • Solicitação AssumeRole
  • AssumeRoleWithWebIdentity
  • Contêiner do ECS ou Instância do EC2
  • Documentação da API

Este guia descreve os mecanismos que você pode usar no PyMongo para autenticar usuários.

Importante

Codificação percentual

Você deve por cento codificar para um nome de usuário e uma senha antes de incluí-los em um URI do MongoDB . O quote_plus() método, disponível no módulo urllib.parse, é uma maneira de executar essa 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.

SCRAM-SHA-256, conforme definido por RFC 7677, é o mecanismo de autenticação padrão em sistemas do MongoDB que executam o MongoDB v4.0 ou mais tarde.

Para autenticar com esse mecanismo, defina as seguintes opções de conexão:

  • db_username: o nome de usuário para autenticar. Porcentagem Codifique esse valor antes de incluí-lo em um URI de conexão.

  • db_password: A senha para autenticar. Porcentagem Codifique esse valor antes de incluí-lo em um URI de conexão.

  • authSource: O banco de MongoDB database para autenticar. Por padrão, o PyMongo autentica no banco de dados no URI de conexão, se você incluir um. Caso contrário, ele autenticará no banco de dados admin .

  • authMechanism: Defina como SCRAM-SHA-256.

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="<db_username>",
password="<db_password>",
authSource="<authentication database>",
authMechanism="SCRAM-SHA-256")
uri = ("mongodb://<percent-encoded db_username>:<percent-encoded db_password>"
"@<hostname>:<port>/?"
"authSource=<authentication database>"
"&authMechanism=SCRAM-SHA-256")
client = pymongo.MongoClient(uri)

SCRAM-SHA-1, conforme definido por RFC 5802, é o mecanismo de autenticação padrão em sistemas do MongoDB que executam o MongoDB v3.6.

Para autenticar com esse mecanismo, defina as seguintes opções de conexão:

  • db_username: o nome de usuário para autenticar. Porcentagem Codifique esse valor antes de incluí-lo em um URI de conexão.

  • db_password: A senha para autenticar. Porcentagem Codifique esse valor antes de incluí-lo em um URI de conexão.

  • authSource: O banco de MongoDB database para autenticar. Por padrão, o PyMongo autentica no banco de dados do admin .

  • authMechanism: Defina como "SCRAM-SHA-1".

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="<db_username>",
password="<db_password>",
authSource="<authentication database>",
authMechanism="SCRAM-SHA-1")
uri = ("mongodb://<percent-encoded db_username>:<percent-encoded db_password>"
"@<hostname>:<port>/?"
"authSource=<authentication database>"
"&authMechanism=SCRAM-SHA-1")
client = pymongo.MongoClient(uri)

Se você habilitar o TLS, durante a negociação do TLS, o PyMongo poderá apresentar um certificado de cliente X.509 ao MongoDB para provar sua identidade. O mecanismo de autenticação MONGODB-X509 utiliza este certificado para autenticar o cliente.

Para autenticar com esse mecanismo, defina as seguintes opções de conexão:

  • tls: Defina como True.

  • tlsCertificateKeyFile: o caminho do arquivo .pem que contém seu certificado de cliente e chave privada.

  • authMechanism: Defina como "MONGODB-X509".

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>",
tls=True,
tlsCertificateKeyFile="/path/to/client.pem",
authMechanism="MONGODB-X509")
uri = ("mongodb://<hostname>:<port>/?"
"tls=true"
"&tlsCertificateKeyFile=path/to/client.pem"
"&authMechanism=MONGODB-X509")
client = pymongo.MongoClient(uri)

Importante

O mecanismo de autenticação MONGODB-AWS requer MongoDB v4.4 ou posterior.

O mecanismo de autenticação do MONGODB-Amazon Web Services utiliza credenciais do Amazon Web Services IAM (Amazon Web Services Identity and Access Management) ou do Amazon Web Services Lambda para autenticar seu aplicativo. Para usar o MONGODB-AWS para autenticação, você deve instalar o PyMongo com a opção aws , como mostrado no seguinte exemplo:

python -m pip install pymongo[aws]

PyMongo usa o Boto3, o Amazon Web Services SDK para Python, para lidar com credenciais. O Boto3 tenta recuperar as credenciais do Amazon Web Services das seguintes fontes, na ordem listada:

  1. Argumentos nomeados passados para o construtor MongoClient ou parâmetros no URI de conexão

  2. Variáveis de ambiente

  3. Arquivo de credenciais compartilhado

  4. Arquivo de configuração do Amazon Web Services

  5. AssumeRole solicitar ao Amazon Web Services Security Token Service (STS)

  6. AssumeRoleWithWebIdentity solicitação ao Amazon Web Services STS

  7. Serviço de metadados de instância em uma instância do Amazon EC2 com uma função do IAM configurada

As seções a seguir descrevem como usar o PyMongo para recuperar credenciais dessas fontes e como usá-las para autenticar seu aplicativo.

Primeiro, PyMongo verifica se você passou as credenciais do Amazon Web Services para o construtor MongoClient, como um argumento nomeado ou como parte do URI de conexão. Para passar suas credenciais para MongoClient, defina as seguintes opções de conexão:

  • username: O ID da chave de acesso do Amazon Web Services IAM para autenticar. Porcentagem Codifique esse valor antes de incluí-lo em um URI de conexão.

  • password: A chave de acesso secreto IAM do Amazon Web Services. Porcentagem Codifique esse valor antes de incluí-lo em um URI de conexão.

  • authMechanism: Defina como "MONGODB-AWS".

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="<AWS IAM access key ID>",
password="<AWS IAM secret access key>",
authMechanism="MONGODB-AWS")
uri = ("mongodb://<percent-encoded AWS IAM access key ID>:"
"<percent-encoded AWS IAM secret access key>"
"@<hostname>:<port>/?"
"&authMechanism=MONGODB-AWS")
client = pymongo.MongoClient(uri)

Se você não fornecer um nome de usuário e senha ao construir seu objeto do MongoClient, PyMongo tentará recuperar as credenciais do Amazon Web Services a partir das seguintes variáveis de ambiente:

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_SESSION_TOKEN

Para usar essas variáveis de ambiente para autenticar seu aplicativo, primeiro defina-as para os valores do Amazon Web Services IAM necessários para a autenticação, conforme mostrado no exemplo de código a seguir:

export AWS_ACCESS_KEY_ID=<AWS IAM access key ID>
export AWS_SECRET_ACCESS_KEY=<AWS IAM secret access key>
export AWS_SESSION_TOKEN=<AWS session token>

Importante

Não codifique os valores nessas variáveis de ambiente.

Após configurar estas variáveis de ambiente, configure a opção de conexão do authMechanism para "MONGODB-AWS". 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.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS"
client = pymongo.MongoClient(uri)

Dica

AWS Lambda

Os tempos de execução Amazon Web Services Lambda podem definir automaticamente essas variáveis de ambiente durante a inicialização. Para obter mais informações sobre o uso de variáveis de ambiente em um Amazon Web Services Lambda ambiente do , consulte Uso de Lambda variáveis de ambiente do na documentação do Amazon Web Services .

Se o PyMongo não encontrar as credenciais do Amazon Web Services nas variáveis de ambiente anteriores, ele tentará lê-las a partir de um arquivo de credenciais compartilhado.

Para usar um arquivo de credenciais compartilhado para autenticar seu aplicativo, verifique se o arquivo existe em seu ambiente e está configurado corretamente. Para saber como criar um arquivo de credenciais compartilhado, consulte Credenciais na3 documentação e Configuração do Boto na documentação do Amazon Web Services.

Após criar o arquivo de credenciais compartilhado, configure a opção de conexão do authMechanism para "MONGODB-AWS". 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.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS"
client = pymongo.MongoClient(uri)

Dica

Para evitar que o PyMongo use um arquivo de credenciais compartilhado para autenticação, execute uma das seguintes ações:

  • Defina a variável de ambiente AWS_SHARED_CREDENTIALS_FILE para "" em seu terminal.

  • Adicione os.environ["AWS_SHARED_CREDENTIALS_FILE"] = "" ao seu script ou aplicativo.

  • Crie um perfil do Amazon Web Services especificamente para suas credenciais do MongoDB . Defina a variável de ambiente AWS_PROFILE para o nome do perfil que você criou.

Se o PyMongo não encontrar as credenciais no arquivo de credenciais compartilhado, ele tentará lê-las a partir de um arquivo de configuração do Amazon Web Services.

Para usar um arquivo de configuração do Amazon Web Services para autenticar seu aplicativo, verifique se o arquivo existe em seu ambiente e está configurado corretamente. Para saber como criar um arquivo de 3 configuração do Amazon Web Services, consulte Credenciais na documentação e Configuração do Boto na documentação do Amazon Web Services.

Depois de criar o arquivo de configuração, defina a opção de conexão authMechanism como "MONGODB-AWS". 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.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS"
client = pymongo.MongoClient(uri)

Em vez de armazenar credenciais do Amazon Web Services em seu arquivo de configuração do Amazon Web Services, você pode instruir o PyMongo a fazer uma solicitação do AssumeRole para um endpoint STS do Amazon Web Services. Essa solicitação retorna credenciais temporárias que seu aplicativo pode usar para autenticação.

Para autenticar com credenciais temporárias do Amazon Web Services IAM retornadas por uma solicitação de AssumeRole , verifique se o arquivo de configuração do Amazon Web Services existe em seu ambiente e está configurado corretamente. Para saber como criar e configurar um arquivo de configuração do Amazon Web Services, consulte Credenciais na3 documentação e configuração do Boto na documentação do Amazon Web Services.

Depois de criar o arquivo de configuração, defina as seguintes opções de conexão:

  • username: o ID da chave de acesso do Amazon Web Services IAM para autenticar retornado pela solicitação AssumeRole. Porcentagem Codifique esse valor antes de incluí-lo em um URI de conexão.

  • password: a chave de acesso secreto IAM do Amazon Web Services retornada pela solicitação AssumeRole . Codifique por cento este valor antes de incluí-lo em um URI de conexão.

  • authMechanismProperties: Defina como AWS_SESSION_TOKEN: e o token de sessão do Amazon Web Services retornado pela solicitação AssumeRole.

  • authMechanism: Defina como "MONGODB-AWS".

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="<AWS IAM access key ID>",
password="<AWS IAM secret access key>",
authMechanismProperties="AWS_SESSION_TOKEN:<AWS session token>",
authMechanism="MONGODB-AWS")
uri = ("mongodb://<percent-encoded AWS IAM access key ID>:"
"<percent-encoded AWS IAM secret access key>"
"@<hostname>:<port>/?"
"authMechanismProperties=AWS_SESSION_TOKEN:<AWS session token>"
"&authMechanism=MONGODB-AWS")
client = pymongo.MongoClient(uri)

Para obter mais informações sobre como usar a solicitação AssumeRole para autenticar seu aplicativo, consulte a seguinte documentação do Amazon Web Services:

Importante

Seu aplicativo deve usar pymongo_auth_aws v1.1.0 ou posterior para obter suporte ao EKS.

Se o seu aplicativo autenticar usuários para o seu cluster EKS a partir de um fornecedor de identidade OpenID Connect (OIDC), PyMongo poderá fazer uma solicitação do AssumeRoleWithWebIdentity para trocar o token OIDC por credenciais temporárias do Amazon Web Services para seu aplicativo.

Para autenticar com credenciais temporárias do Amazon Web Services IAM retornadas por uma solicitação de AssumeRoleWithWebIdentity , verifique se o arquivo de configuração do Amazon Web Services existe em seu ambiente e está configurado corretamente. Para saber como criar e configurar um arquivo de configuração do Amazon Web Services, consulte Credenciais na3 documentação e configuração do Boto na documentação do Amazon Web Services.

Após configurar seu ambiente para uma solicitação do AssumeRoleWithWebIdentity , configure a opção de conexão do authMechanism para "MONGODB-AWS". 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.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS"
client = pymongo.MongoClient(uri)

Para obter mais informações sobre como usar uma solicitação AssumeRoleWithWebIdentity para autenticar seu aplicativo, consulte a seguinte documentação do Amazon Web Services:

Se seu aplicativo for executado em uma instância do Amazon Elastic Cloud Compute (EC2) em um container do Elastic Container Service (ECS), PyMongo poderá recuperar automaticamente credenciais temporárias da Amazon Web Services de um endpoint do ECS.

Para usar credenciais temporárias de dentro de uma instância do EC2 , configure a opção de conexão do authMechanism para "MONGODB-AWS". 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.

client = pymongo.MongoClient("mongodb://<hostname>:<port>",
authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS"
client = pymongo.MongoClient(uri)

Para saber mais sobre como autenticar seu aplicativo no PyMongo, consulte a seguinte documentação da API:

Voltar

Segurança