Docs Menu
Docs Home
/
MongoDB Kafka Connector
/

사용자 지정 인증 제공자

이 페이지의 내용

  • 개요
  • Amazon Web Services IAM 인증 예시

com.mongodb.kafka.connect.util.custom.credentials.CustomCredentialProvider 인터페이스를 구현하여 사용자 지정 인증 제공자 를 추가할 수 있습니다. 사용자 지정 클래스 JAR 파일 을 Kafka Connect 배포서버 의 lib 폴더에 배치해야 합니다.

다음 인증 속성을 설정하여 인증 제공자 를 구성합니다.

  • mongo.custom.auth.mechanism.enable: 다음으로 설정하다 true

  • mongo.custom.auth.mechanism.providerClass: 구현 클래스의 정규화된 클래스 이름으로 설정하다

  • (선택 사항) mongodbaws.auth.mechanism.roleArn: Amazon 리소스 이름(ARN)으로 설정하다

이 예시 에서는 Amazon Web Services IAM을 지원하는 사용자 지정 인증 제공자 를 제공합니다. 다음 코드는 사용자 지정 인증 제공자 JAR 파일 을 보여줍니다.

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) {
}
}

JAR 파일 을 컴파일하여 배포서버의 lib 폴더에 배포서버.

참고

pom.xml 구현 클래스가 포함된 전체 JAR을 빌드 할 수 있는 파일 의 예시 를 보려면 Kafka Connector Github 리포지토리 README 파일 을 참조하세요.

그런 다음 사용자 지정 인증 방법을 포함하도록 소스 또는 싱크 connector 를 구성합니다. 다음 구성 속성은 Kafka Connector MongoDB Atlas Amazon Web Services IAM 인증 을 사용하여 를 에 연결하는 싱크 connector 를 정의합니다.

{
"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>"
}
}

이 예시 에서 roleArn 값은 MongoDB Atlas 에 액세스 있는 사용자 그룹 의 IAM 역할입니다. Amazon Web Services IAM 콘솔에서 Kafka Connect를 실행 하는 IAM 계정에는 Atlas user 그룹에 대한 AssumeRole 권한이 있습니다.

돌아가기

MongoDB AWS 기반 인증