Docs Menu
Docs Home
/ /

Proveedor de autenticación personalizado

Puede agregar un proveedor de autenticación personalizado implementando el com.mongodb.kafka.connect.util.custom.credentials.CustomCredentialProvider Interfaz. Debe colocar su archivo JAR de clase personalizado en la carpeta lib en su implementación de Kafka Connect.

Establezca las siguientes propiedades de autenticación para configurar el proveedor de autenticación:

  • mongo.custom.auth.mechanism.enable: establecido en true

  • mongo.custom.auth.mechanism.providerClass: se establece en el nombre de clase calificado de la clase de implementación

  • (Opcional) mongodbaws.auth.mechanism.roleArn: establecido en un nombre de recurso de Amazon (ARN)

Este ejemplo proporciona un proveedor de autenticación personalizado compatible con AWS IAM. El siguiente código muestra el archivo JAR del proveedor de autenticación personalizado:

package com.mongodb;
import java.util.Map;
import java.util.function.Supplier;
import com.mongodb.kafka.connect.util.custom.credentials.CustomCredentialProvider;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceAsyncClientBuilder;
import com.amazonaws.services.securitytoken.model.AssumeRoleRequest;
import com.amazonaws.services.securitytoken.model.AssumeRoleResult;
import com.amazonaws.services.securitytoken.model.Credentials;
import com.amazonaws.util.StringUtils;
public class SampleAssumeRoleCredential implements CustomCredentialProvider {
public SampleAssumeRoleCredential() {}
@Override
public MongoCredential getCustomCredential(Map<?, ?> map) {
AWSCredentialsProvider provider = new DefaultAWSCredentialsProviderChain();
Supplier<AwsCredential> awsFreshCredentialSupplier = () -> {
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceAsyncClientBuilder.standard()
.withCredentials(provider)
.withRegion("us-east-1")
.build();
AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest().withDurationSeconds(3600)
.withRoleArn((String)map.get("mongodbaws.auth.mechanism.roleArn"))
.withRoleSessionName("Test_Session");
AssumeRoleResult assumeRoleResult = stsClient.assumeRole(assumeRoleRequest);
Credentials creds = assumeRoleResult.getCredentials();
// Add your code to fetch new credentials
return new AwsCredential(creds.getAccessKeyId(), creds.getSecretAccessKey(), creds.getSessionToken());
};
return MongoCredential.createAwsCredential(null, null)
.withMechanismProperty(MongoCredential.AWS_CREDENTIAL_PROVIDER_KEY, awsFreshCredentialSupplier);
}
// Validates presence of an ARN
@Override
public void validate(Map<?, ?> map) {
String roleArn = (String) map.get("mongodbaws.auth.mechanism.roleArn");
if (StringUtils.isNullOrEmpty(roleArn)) {
throw new RuntimeException("Invalid value set for customProperty");
}
}
// Initializes the custom provider
@Override
public void init(Map<?, ?> map) {
}
}

Compile el archivo JAR y colóquelo en la carpeta lib en su implementación.

Nota

Para ver un ejemplo de un archivo pom.xml que puede generar el JAR completo que contiene la clase de implementación, consulte la Archivo README del repositorio de GitHub del conector de Kafka.

A continuación, configure el conector de origen o receptor para incluir el método de autenticación personalizado. Las siguientes propiedades de configuración definen un conector receptor que conecta el conector de Kafka con MongoDB Atlas mediante la autenticación de AWS IAM:

{
"name": "mongo-tutorial-sink",
"config": {
"connector.class": "com.mongodb.kafka.connect.MongoSinkConnector",
"topics": "<topic>",
"connection.uri": "<connection string>?authSource=%24external&authMechanism=MONGODB-AWS&retryWrites=true&w=majority",
"key.converter": "org.apache.kafka.connect.storage.StringConverter",
"value.converter": "org.apache.kafka.connect.json.JsonConverter",
"value.converter.schemas.enable": false,
"database": "<db>",
"collection": "<collection>",
"mongo.custom.auth.mechanism.enable": "true",
"mongo.custom.auth.mechanism.providerClass": "com.mongodb.SampleAssumeRoleCredential",
"mongodbaws.auth.mechanism.roleArn": "<AWS IAM ARN>"
}
}

En este ejemplo, el valor roleArn corresponde al rol de IAM del grupo de usuarios con acceso a MongoDB Atlas. En la consola de IAM de AWS, la cuenta de IAM que ejecuta Kafka Connect tiene permisos AssumeRole para el grupo de usuarios de Atlas.

Volver

Autenticación de MongoDB basada en AWS

En esta página