Mecanismos de autenticação
Nesta página
Visão geral
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
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 dadosadmin
.authMechanism
: Defina comoSCRAM-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
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 doadmin
.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)
MONGODB-X509
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 comoTrue
.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)
MONGODB-AWS
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:
Argumentos nomeados passados para o construtor
MongoClient
ou parâmetros no URI de conexãoVariáveis de ambiente
Arquivo de credenciais compartilhado
Arquivo de configuração do Amazon Web Services
AssumeRole
solicitar ao Amazon Web Services Security Token Service (STS)AssumeRoleWithWebIdentity
solicitação ao Amazon Web Services STSServiç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.
MongoClient
Credenciais
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)
Variáveis de ambiente
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 .
Arquivo de Credenciais Compartilhados
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.
Arquivo de configuração do Amazon Web Services
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)
Solicitação AssumeRole
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çãoAssumeRole
. 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çãoAssumeRole
. Codifique por cento este valor antes de incluí-lo em um URI de conexão.authMechanismProperties
: Defina comoAWS_SESSION_TOKEN:
e o token de sessão do Amazon Web Services retornado pela solicitaçãoAssumeRole
.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:
AssumeRoleWithWebIdentity
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:
Contêiner do ECS ou Instância do EC2
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)
Documentação da API
Para saber mais sobre como autenticar seu aplicativo no PyMongo, consulte a seguinte documentação da API: