Overview
La MONGODB-AWS El mecanismo de autenticación utiliza credenciales de Amazon Web Services Identity and Access Management (AWS IAM) para autenticar a un usuario en MongoDB. Solo puede usar este mecanismo al autenticarse en MongoDB Atlas.
Para obtener más información sobre cómo configurar MongoDB Atlas para la autenticación de AWS IAM, consulta Configure la autenticación con AWS IAM en la documentación de Atlas.
Nota
Pruebas del SDK de AWS
MONGODB-AWS se prueba con las versiones 2.30.31 y 1.12.782 del AWS SDK.
Marcadores de posición de código
Los ejemplos de código en esta página utilizan los siguientes marcadores de posición:
<awsKeyId>: Su clave de acceso de AWS ID<atlasUri>:La dirección de red de su implementación de MongoDB Atlas<awsSecretKey>Tu clave secreta de acceso de AWS<awsSessionToken>Token de sesión de AWS<hostname>: El nombre de host de tu implementación de MongoDB Atlas<port>: El puerto de tu implementación de MongoDB Atlas
Para utilizar los ejemplos de código en esta página, reemplace estos marcadores de posición con sus propios valores.
Especificar la autenticación MONGODB-AWS
Para indicar al controlador que use este mecanismo de autenticación, puedes especificar MONGODB-AWS como un parámetro en la cadena de conexión o mediante el uso del método de fábrica MongoCredential.createAwsCredential().
Esta sección describe cómo especificar este mecanismo de autenticación y las distintas formas de proporcionar sus credenciales de AWS IAM.
Utiliza AWS SDK para Java
Importante
Este método para proporcionar credenciales MONGODB-AWS solo está disponible en el controlador Java v4.8 y versiones posteriores.
Puede especificar sus credenciales utilizando v1 o v2 del AWS SDK para Java, que ofrece las siguientes funcionalidades:
Varias opciones para obtener credenciales
El almacenamiento en caché de credenciales ayuda a tu aplicación a evitar la limitación de tasa
Gestión de proveedores de credenciales para su uso con el servicio Elastic Kubernetes.
Para utilizar el SDK de AWS para Java para la autenticación MONGODB-AWS, debe realizar las siguientes acciones:
Especificar el mecanismo de autenticación
Agregue el SDK como una dependencia a su proyecto
Proporcione sus credenciales utilizando uno de los métodos en la cadena del proveedor de credenciales
Para especificar el mecanismo de autenticación utilizando un MongoCredential, utiliza el método de fábrica MongoCredential.createAwsCredential() y añade la instancia MongoCredential a tu MongoClient como se muestra en el siguiente ejemplo:
MongoCredential credential = MongoCredential.createAwsCredential(null, null); // Creates a MongoClient that receives configuration information from a MongoCredential and environment variables MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>")))) .credential(credential) .build());
Para especificar el mecanismo de autenticación en la cadena de conexión, agréguelo como parámetro como se muestra en el siguiente ejemplo:
MongoClient mongoClient = MongoClients.create("mongodb://<atlasUri>?authMechanism=MONGODB-AWS");
Para añadir el SDK de AWS como dependencia a tu proyecto, consulta la siguiente documentación de AWS para la versión que necesitas:
Para el AWS SDK para Java v2, consulta la guía Configuración.
Para el SDK de AWS para Java v,1 consulte la guía de introducción.
Nota
Para AWS SDK for Java v2, las pruebas del controlador de Java utilizan la dependencia software.amazon.awssdk:auth:2.30.31.
Para AWS SDK for Java v1, las pruebas del controlador de Java utilizan la dependencia com.amazonaws:aws-java-sdk-core:1.12.782.
Para suministrar sus credenciales, consulte la siguiente documentación de AWS para la versión que necesita:
Para **aprender** más sobre la clase AWS SDK for Java v2 que el driver utiliza para obtener las credenciales, consulta la documentación DefaultCredentialsProvider API.
Aprende a proporcionar tus credenciales a esta clase desde la sección Utilizar la cadena de proveedores de credenciales predeterminada.
Para aprender más sobre la clase AWS SDK para Java v1 que utiliza el controlador para obtener las credenciales, consulta la documentación de la API DefaultAWSCredentialsProviderChain.
Aprenda cómo suministrar sus credenciales a esta clase en la sección Usar la cadena de proveedores de credenciales por defecto.
Nota
Si incluyes tanto la versión v1 como la v2 del AWS SDK for Java en tu proyecto, debes utilizar los métodos de la v2 para suministrar tus credenciales.
Utiliza variables de entorno
Puede proporcionar sus credenciales de AWS IAM indicando al controlador que utilice el mecanismo de autenticación MONGODB-AWS y configurando las variables de entorno adecuadas.
Para utilizar las variables de entorno para proporcionar tus credenciales, debes realizar las siguientes acciones:
Especificar el mecanismo de autenticación
Agregue las variables de entorno apropiadas
Puedes especificar el mecanismo de autenticación utilizando un MongoCredential o en la cadena de conexión.
Para especificar el mecanismo de autenticación utilizando un MongoCredential, utiliza el método de fábrica MongoCredential.createAwsCredential() y añade la instancia MongoCredential a tu MongoClient como se muestra en el siguiente ejemplo:
MongoCredential credential = MongoCredential.createAwsCredential(null, null); // Creates a MongoClient that receives configuration information from a MongoCredential and environment variables MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>")))) .credential(credential) .build());
Para especificar el mecanismo de autenticación en la cadena de conexión, agréguelo como parámetro como se muestra en el siguiente ejemplo:
MongoClient mongoClient = MongoClients.create("mongodb://<atlasUri>?authMechanism=MONGODB-AWS");
También puede configurar variables de entorno para habilitar los siguientes tipos de autenticación:
Claves de acceso programático
Proveedor de identidad web
Credenciales de contenedor ECS
Credenciales del contenedor EC2
El siguiente ejemplo muestra cómo puede configurar sus claves de acceso programático en variables de entorno utilizando bash o un shell similar:
export AWS_ACCESS_KEY_ID=<awsKeyId> export AWS_SECRET_ACCESS_KEY=<awsSecretKey> export AWS_SESSION_TOKEN=<awsSessionToken>
Omita la línea que contiene AWS_SESSION_TOKEN si no necesita un token de sesión de AWS para esa función.
Puedes utilizar un proveedor de identidad web compatible con OpenID Connect (OIDC) para autenticarte en Amazon Elastic Kubernetes Service (EKS) u otros servicios.
Importante
Su proyecto debe incluir la v1 o v2 del AWS SDK como dependencia para autenticarse mediante un proveedor de identidad web.
Para utilizar un proveedor de identidad web, se debe crear un archivo que contenga el token OIDC. A continuación, utiliza bash o un shell similar para establecer una variable de entorno en la ruta absoluta de este archivo, como se muestra en el siguiente ejemplo:
export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to file containing your OIDC token>
Para autenticarse usando credenciales de contenedor ECS, establece el URI del endpoint relativo de ECS en una variable de entorno utilizando bash o una shell similar, como se muestra en el siguiente ejemplo:
export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<your ECS endpoint>
Para autenticar mediante el uso de credenciales de contenedor EC2, asegúrate de que ninguna de las variables de entorno mencionadas en esta sección esté configurada. El controlador obtiene las credenciales del endpoint de metadatos por defecto de la instancia de EC2 de IPv4 en lugar de variables de entorno.
Utilice una instancia de MongoCredential
Puede proporcionar sus credenciales de AWS IAM a un MongoClient utilizando una instancia MongoCredential. Para construir la instancia de MongoCredential para la autenticación de MONGODB-AWS, utiliza el método de fábrica createAwsCredential().
Solo puede proporcionar claves de acceso programáticas al método MongoCredential.createAwsCredential(). Si debe proporcionar credenciales de contenedor ECS o EC2, utiliza las instrucciones de las secciones Utilizar variables de entorno o Utilizar AWS SDK para Java.
Para usar el MongoCredential para la autenticación MONGODB-AWS, debe realizar las siguientes acciones:
Especificar el mecanismo de autenticación
Proporcione las credenciales
Para especificar el mecanismo de autenticación utilizando un MongoCredential, utiliza el método de fábrica MongoCredential.createAwsCredential() y añade la instancia MongoCredential a tu MongoClient como se muestra en el siguiente ejemplo:
MongoCredential credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray()); // Creates a MongoClient that receives AWS credentials from the MongoCredential instance MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>")))) .credential(credential) .build());
Si debes especificar un token de sesión de AWS, pásalo al método withMechanismProperty() como se muestra en el siguiente ejemplo:
MongoCredential credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray()).withMechanismProperty("AWS_SESSION_TOKEN", "<awsSessionToken>"); // Creates a MongoClient that receives configuration information from a MongoCredential instance MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>")))) .credential(credential) .build());
Para actualizar tus credenciales, puedes declarar una expresión lambda Supplier que devuelva nuevas credenciales, como se muestra en el siguiente ejemplo:
Supplier<AwsCredential> awsFreshCredentialSupplier = () -> { // Add your code to fetch new credentials return new AwsCredential("<awsKeyId>", "<awsSecretKey>", "<awsSessionToken>"); }; // Creates a MongoCredential instance to specify the new AWS credentials MongoCredential credential = MongoCredential.createAwsCredential(null, null) .withMechanismProperty(MongoCredential.AWS_CREDENTIAL_PROVIDER_KEY, awsFreshCredentialSupplier); // Creates a MongoClient that receives new configuration information from a MongoCredential instance MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Collections.singletonList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Nota
Si debe proporcionar credenciales de AWS IAM en una cadena de conexión, consulte la versión v4.7 o anterior de la documentación del controlador Java.
Documentación de la API
Para obtener más información sobre cualquiera de los métodos o tipos analizados en esta página, consulte la siguiente documentación de API: