Overview
Esta guía describe los mecanismos que puede utilizar en el controlador C++ para autenticar usuarios.
SCRAM-SHA-256
SCRAM-SHA-256, según lo definido por 7677RFC, es el mecanismo de autenticación predeterminado en las implementaciones de MongoDB que ejecutan MongoDB4 v.0 o posterior.
Para autenticarse con este mecanismo, configure las siguientes opciones de conexión:
db_username: El nombre de usuario de la base de datos para autenticar.db_password:La contraseña de la base de datos para autenticarse.authSourceLa base de datos MongoDB para la autenticación. De forma predeterminada, el controlador de C++ se autentica con la base de datos en la URI de conexión, si la incluye. De lo contrario, se autentica con la base de datosadmin.authMechanism:Establecer en"SCRAM-SHA-256".
Puede configurar estas opciones en la cadena de conexión al crear un objeto mongocxx::client, como se muestra en el siguiente ejemplo:
auto uri = mongocxx::uri("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "authSource=admin&authMechanism=SCRAM-SHA-256"); auto client = mongocxx::client(uri);
SCRAM-SHA-1
SCRAM-SHA-1, como se define en RFC 5802 es el mecanismo de autenticación predeterminado en implementaciones de MongoDB que ejecutan MongoDB v3.6.
Para autenticarse con este mecanismo, configure las siguientes opciones de conexión:
db_username: El nombre de usuario de la base de datos para autenticar.db_password:La contraseña de la base de datos para autenticarse.authSourceLa base de datos MongoDB para la autenticación. De forma predeterminada, el controlador de C++ se autentica en la base de datosadmin.authMechanism:Establecer en"SCRAM-SHA-1".
Puede configurar estas opciones en la cadena de conexión al crear un objeto mongocxx::client, como se muestra en el siguiente ejemplo:
auto uri = mongocxx::uri("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "authSource=admin&authMechanism=SCRAM-SHA-1"); auto client = mongocxx::client(uri);
MONGODB X.509
Si habilita TLS, durante el protocolo de enlace TLS, el controlador de C++ puede presentar un certificado de cliente X.509 a MongoDB para comprobar su identidad. El mecanismo de autenticación MONGODB-X509 utiliza este certificado para autenticar al cliente.
Para autenticarse con este mecanismo, configure las siguientes opciones de conexión:
tls:Establecer enTrue.tlsCertificateKeyFile:La ruta del archivo.pemque contiene su certificado de cliente y su clave privada.authMechanism:Establecer en"MONGODB-X509".
Puede configurar estas opciones en la cadena de conexión al crear un objeto mongocxx::client, como se muestra en el siguiente ejemplo:
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?" "tls=true&tlsCertificateKeyFile=path/to/client.pem&authMechanism=MONGODB-X509"); auto client = mongocxx::client(uri);
Para obtener más información sobre cómo habilitar TLS, consulte Configurar la seguridad de la capa de transporte (TLS).
MONGODB-AWS
Importante
El mecanismo de autenticación MONGODB-AWS requiere MongoDB v4.4 o posterior.
El mecanismo de autenticación MONGODB-AWS utiliza credenciales de AWS IAM (Amazon Web Services Identity and Access Management) o AWS Lambda para autenticar su aplicación. Para autenticarse con este mecanismo, primero cree un usuario con un nombre de recurso de Amazon (ARN) asociado en la base de datos $external y, a continuación, especifique el mecanismo de autenticación MONGODB-AWS en el URI.
Cuando utiliza el mecanismo MONGODB-AWS, el controlador C++ intenta recuperar sus credenciales de AWS de las siguientes fuentes, en el orden indicado:
Parámetros con nombre pasados a la URI de conexión
Variables de entorno
Solicitud AssumeRoleWithWebIdentity de AWS EKS
Metadatos del contenedor ECS
Metadatos de la instancia EC2
Las siguientes secciones describen cómo utilizar el controlador C++ para recuperar credenciales de estas fuentes y usarlas para autenticar su aplicación.
URI de conexión
Primero, el controlador de C++ comprueba si se pasaron las credenciales de AWS al constructor MongoClient como parte de la URI de conexión. Para pasar las credenciales en la URI de conexión, configure las siguientes opciones de conexión:
username:El ID de clave de acceso de AWS IAM para autenticar.password:La clave de acceso secreta de AWS IAM.authMechanism:Establecer en"MONGODB-AWS".
Puede configurar estas opciones en la cadena de conexión al crear un objeto mongocxx::client, como se muestra en el siguiente ejemplo:
auto uri = mongocxx::uri("mongodb://<AWS IAM access key ID>:<AWS IAM secret access key>@<hostname>:<port>/?" "authMechanism=MONGODB-AWS"); auto client = mongocxx::client(uri);
También puedes incluir un token de sesión de AWS pasándolo al parámetro authMechanismProperties:
auto uri = mongocxx::uri("mongodb://<AWS IAM access key ID>:<AWS IAM secret access key>@<hostname>:<port>/?" "authMechanism=MONGODB-AWSS&authMechanismProperties=AWS_SESSION_TOKEN:<token>"); auto client = mongocxx::client(uri);
Variables de entorno
Si no proporciona un nombre de usuario y una contraseña cuando construye su objeto MongoClient, el controlador de C++ intenta recuperar las credenciales de AWS de las siguientes variables de entorno:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN(opcional)
Para usar estas variables de entorno para autenticar su aplicación, primero configúrelas con los valores de AWS IAM necesarios para la autenticación, como se muestra en el siguiente ejemplo de código:
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>
Después de configurar estas variables de entorno, configure el parámetro authMechanism en su URI de conexión en "MONGODB-AWS", como se muestra en el siguiente ejemplo:
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?" "authMechanism=MONGODB-AWS"); auto client = mongocxx::client(uri);
Solicitud de AssumeRoleWithWebIdentity
Si su aplicación autentica usuarios para su clúster EKS desde un proveedor de identidad OpenID Connect (OIDC), el controlador C++ puede realizar una solicitud AssumeRoleWithWebIdentity para intercambiar el token OIDC por credenciales temporales de AWS para su aplicación.
Para autenticarse con las credenciales temporales de AWS IAM devueltas por una AssumeRoleWithWebIdentity solicitud, asegúrese de que el archivo de configuración de AWS exista en su entorno y esté configurado con las AWS_WEB_IDENTITY_TOKEN_FILE AWS_ROLE_ARN variables de entorno y. Para aprender a crear y configurar un archivo de configuración de AWS,consulte Configuración en la documentación de AWS.
Después de configurar su entorno para una solicitud AssumeRoleWithWebIdentity, establezca el parámetro authMechanism en su URI de conexión en "MONGODB-AWS", como se muestra en el siguiente ejemplo:
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?" "authMechanism=MONGODB-AWS"); auto client = mongocxx::client(uri);
Para obtener más información sobre cómo usar una solicitud AssumeRoleWithWebIdentity para autenticar su aplicación, consulte la siguiente documentación de AWS:
ECS Metadata
Si su aplicación se ejecuta en un contenedor de Elastic Container Service (ECS), el controlador de C++ puede recuperar automáticamente las credenciales temporales de AWS desde un punto de conexión de ECS. Para ello, especifique el URI del punto de conexión de ECS en una variable de entorno llamada AWS_CONTAINER_CREDENTIALS_RELATIVE_URI, como se muestra en el siguiente ejemplo:
export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<URI of the ECS endpoint>
Después de configurar la variable de entorno, configure el parámetro authMechanism en su URI de conexión en "MONGODB-AWS", como se muestra en el siguiente ejemplo:
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?" "authMechanism=MONGODB-AWS"); auto client = mongocxx::client(uri);
Metadatos de instancia EC2
El controlador de C++ puede recuperar automáticamente las credenciales temporales de AWS desde una instancia de Amazon Elastic Cloud Compute (EC2). Para usar las credenciales temporales desde una instancia de EC2, configure el parámetro authMechanism en la URI de su conexión como "MONGODB-AWS", como se muestra en el siguiente ejemplo:
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?" "authMechanism=MONGODB-AWS"); auto client = mongocxx::client(uri);
Nota
Si configura alguna de las variables de entorno de los métodos de autenticación de AWS anteriores, el controlador de C++ intentará recuperar las credenciales mediante esos métodos antes de intentar recuperarlas de una instancia de EC2. Para intentar recuperar las credenciales solo de una instancia de EC2, asegúrese de que las variables de entorno no estén configuradas.
Documentación de la API
Para obtener más información sobre cómo crear un objeto mongocxx::client en el controlador C++, consulte la siguiente documentación de API: