Visão geral
O mecanismo de autenticação do MONGODB-AWS
utiliza Gerenciamento de Identidade e Acesso do Amazon Web Services (Amazon Web Services IAM) ou credenciais do Amazon Web Services Lambda para autenticar um usuário no MongoDB. Você pode usar esse mecanismo somente ao autenticar no MongoDB Atlas.
Dica
Configurar Atlas para Autenticação IAM do Amazon Web Services
Para saber mais sobre como configurar o MongoDB Atlas para autenticação do Amazon Web Services IAM, consulte Configurar a autenticação com o Amazon Web Services IAM na documentação do Atlas .
Espaços reservados de código
Os exemplos de código nesta página usam os seguintes espaços reservados:
<hostname>
: O endereço de rede da sua implantação do MongoDB Atlas<AWS IAM access key ID>
: IDda chave de acesso do Amazon Web Services<AWS IAM secret access key>
: Sua chave de acesso secreto Amazon Web Services<AWS session token>
: Seu token de sessão do Amazon Web Services
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
.
Uso da autenticação IAM do Amazon Web Services em seu aplicativo
Para usar a autenticação do Amazon Web Services IAM, 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 na string 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, o PyMongo verifica se você passou as credenciais do Amazon Web Services para o construtor MongoClient
, como um argumento nomeado ou como parte da string 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 uma string de conexão.password
: A chave de acesso secreto IAM do Amazon Web Services. Porcentagem Codifique esse valor antes de incluí-lo em uma string 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+srv://<hostname>", username="<AWS IAM access key ID>", password="<AWS IAM secret access key>", authMechanism="MONGODB-AWS")
uri = ("mongodb+srv://<percent-encoded AWS IAM access key ID>:" "<percent-encoded AWS IAM secret access key>" "@<hostname>/?" "&authMechanism=MONGODB-AWS") client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://<hostname>", username="<AWS IAM access key ID>", password="<AWS IAM secret access key>", authMechanism="MONGODB-AWS")
uri = ("mongodb+srv://<percent-encoded AWS IAM access key ID>:" "<percent-encoded AWS IAM secret access key>" "@<hostname>/?" "&authMechanism=MONGODB-AWS") client = pymongo.AsyncMongoClient(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+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.AsyncMongoClient(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+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.AsyncMongoClient(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+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.AsyncMongoClient(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 uma string de conexão.password
: a chave de acesso secreto IAM do Amazon Web Services retornada pela solicitaçãoAssumeRole
. Porcentagem Codifique esse valor antes de incluí-lo em uma string 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+srv://@<hostname>", username="<AWS IAM access key ID>", password="<AWS IAM secret access key>", authMechanismProperties="AWS_SESSION_TOKEN:<AWS session token>", authMechanism="MONGODB-AWS")
uri = ("mongodb+srv://<percent-encoded AWS IAM access key ID>:" "<percent-encoded AWS IAM secret access key>" "@<hostname>/?" "authMechanismProperties=AWS_SESSION_TOKEN:<AWS session token>" "&authMechanism=MONGODB-AWS") client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://@<hostname>", username="<AWS IAM access key ID>", password="<AWS IAM secret access key>", authMechanismProperties="AWS_SESSION_TOKEN:<AWS session token>", authMechanism="MONGODB-AWS")
uri = ("mongodb+srv://<percent-encoded AWS IAM access key ID>:" "<percent-encoded AWS IAM secret access key>" "@<hostname>/?" "authMechanismProperties=AWS_SESSION_TOKEN:<AWS session token>" "&authMechanism=MONGODB-AWS") client = pymongo.AsyncMongoClient(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+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.AsyncMongoClient(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+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.AsyncMongoClient(uri)
Documentação da API
Para saber mais sobre como autenticar seu aplicativo no PyMongo, consulte a seguinte documentação da API: