Overview
El 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. Este mecanismo solo se puede usar al autenticarse en MongoDB Atlas.
Para obtener más información sobre cómo configurar MongoDB Atlas para la autenticación de AWS IAM, consulte Configurar 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 SDK de AWS.
Marcadores de posición de código
Los ejemplos de código de esta página utilizan los siguientes marcadores de posición:
<awsKeyId>:Su ID de clave de acceso de AWS<atlasUri>:La dirección de red de su implementación de MongoDB Atlas<awsSecretKey>:Su clave de acceso secreta de AWS<awsSessionToken>:Su token de sesión de AWS<hostname>:El nombre de host de su 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 de MONGODB-AWS
Para indicarle al controlador que utilice este mecanismo de autenticación, puede especificar MONGODB-AWS como parámetro en la cadena de conexión o utilizando el 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 características:
Múltiples opciones para obtener credenciales
Almacenamiento en caché de credenciales que ayuda a su aplicación a evitar la limitación de velocidad
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 de proveedores 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 agregar el SDK de AWS como una dependencia a su proyecto, consulte la siguiente documentación de AWS para la versión que necesita:
Para el SDK de AWS para Java v,2 consulte la guía de configuración.
Para el SDK de AWS para Java v,1 consulte la guía de introducción.
Nota
Para el AWS SDK para Java v2, el controlador Java realiza pruebas utilizando la dependencia software.amazon.awssdk:auth:2.30.31.
Para el AWS SDK para Java v1, el controlador Java realiza pruebas utilizando la dependencia com.amazonaws:aws-java-sdk-core:1.12.782.
Para proporcionar sus credenciales, consulte la siguiente documentación de AWS para la versión que necesita:
Para obtener más información sobre la clase AWS SDK para Java v2 que utiliza el controlador para obtener las credenciales, consulte la documentación de la API DefaultCredentialsProvider.
Aprenda cómo proporcionar sus credenciales a esta clase desde la sección Utilizar la cadena de proveedor de credenciales predeterminada.
Para obtener más información sobre la clase AWS SDK para Java v1 que utiliza el controlador para obtener las credenciales, consulte la documentación de la API DefaultAWSCredentialsProviderChain.
Aprenda cómo proporcionar sus credenciales a esta clase desde la sección Uso de la cadena de proveedor de credenciales predeterminada.
Nota
Si incluye v1 y v2 del AWS SDK para Java en su proyecto, debe usar los métodos v2 para proporcionar sus 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 sus credenciales, debe realizar las siguientes acciones:
Especificar el mecanismo de autenticación
Agregue las variables de entorno apropiadas
Puede 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:
Teclas de acceso programático
Proveedor de identidad web
Credenciales del 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.
Puede utilizar un proveedor de identidad web compatible con OpenID Connect (OIDC) para autenticarse en Amazon Elastic Kubernetes Service (EKS) u otros servicios.
Importante
Su proyecto debe incluir v1 o v2 del SDK de AWS como dependencia para autenticarse mediante un proveedor de identidad web.
Para usar un proveedor de identidad web, cree un archivo que contenga su token OIDC. A continuación, use bash o un shell similar para establecer una variable de entorno con la ruta absoluta a 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 mediante las credenciales del contenedor ECS, configure el URI relativo del punto final ECS en una variable de entorno utilizando bash o un shell similar como se muestra en el siguiente ejemplo:
export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<your ECS endpoint>
Para autenticarse con las credenciales del contenedor EC,2 asegúrese de que ninguna de las variables de entorno mencionadas en esta sección esté configurada. El controlador obtiene las credenciales del punto final de metadatos de la instancia4 EC IPv2 predeterminada, en lugar de las variables de entorno.
Utilice una instancia de MongoCredential
Puede proporcionar sus credenciales de AWS IAM a una instancia MongoClient mediante una instancia MongoCredential. Para construir la instancia MongoCredential para la autenticación MONGODB-AWS, utilice el método de fábrica createAwsCredential().
Solo puede proporcionar claves de acceso programático al MongoCredential.createAwsCredential() método. Si debe proporcionar2 credenciales de contenedor ECS o EC, siga las instrucciones de las secciones "Usar variables de entorno" o "Usar el SDK de AWS para Java".
Para utilizar la autenticación MongoCredential para MONGODB-AWS, debe realizar las siguientes acciones:
Especificar el mecanismo de autenticación
Proporcionar 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 sus credenciales, puede 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: