AWS Secrets Manager를 통한 로그인 자격 증명 인증 - Amazon Managed Streaming for Apache Kafka

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS Secrets Manager를 통한 로그인 자격 증명 인증

AWS Secrets Manager를 사용하여 저장 및 보호되는 로그인 자격 증명을 사용하여 Amazon MSK 클러스터에 대한 액세스를 제어할 수 있습니다. Secrets Manager에 사용자 보안 인증 정보를 저장하면 보안 인증 정보 감사, 업데이트, 교체와 같은 클러스터 인증의 오버헤드가 줄어듭니다. 또한 Secrets Manager를 사용하면 클러스터 간에 사용자 보안 인증 정보를 공유할 수 있습니다.

작동 방식

Amazon MSK의 로그인 보안 인증 정보 인증은 SASL/SCRAM(Simple Authentication and Security Layer/Salted Challenge Response Mechanism) 인증을 사용합니다. 클러스터에 대한 로그인 보안 인증 정보 인증을 설정하려면 AWS Secrets Manager에서 보안 암호 리소스를 생성하고 로그인 보안 인증 정보를 해당 보안 암호에 연결합니다.

SASL/SCRAM은 RFC 5802에 정의되어 있습니다. SCRAM은 보안 해싱 알고리즘을 사용하며 클라이언트와 서버 간에 일반 텍스트 로그인 보안 인증 정보를 전송하지 않습니다.

참고

클러스터에 대해 SASL/SCRAM 인증을 설정하면 Amazon MSK는 클라이언트와 브로커 간의 모든 트래픽에 대해 TLS 암호화를 설정합니다.

Amazon MSK 클러스터를 위한 SASL/SCRAM 인증 설정

Secrets Manager에서 AWS 시크릿을 설정하려면 Secrets Manager 사용 설명서의 시크릿 생성 및 검색 튜토리얼을AWS 따르세요.

Amazon MSK 클러스터에 대한 보안 암호를 생성하는 경우에는 다음 요구 사항에 유의하세요.

  • 암호 유형으로 다른 유형의 보안 암호(예: API 키)를 선택합니다.

  • 보안 암호 이름은 접두사 AmazonMSK_로 시작해야 합니다.

  • 기존 사용자 지정 AWS KMS 키를 사용하거나 암호에 대한 새 사용자 지정 AWS KMS 키를 만들어야 합니다. Secrets Manager는 기본적으로 시크릿에 기본 AWS KMS 키를 사용합니다.

    중요

    기본 AWS KMS 키로 생성한 암호는 Amazon MSK 클러스터에서 사용할 수 없습니다.

  • 일반 텍스트 옵션을 사용하여 키-값 페어를 입력하려면 로그인 보안 인증 정보 데이터가 다음 형식이어야 합니다.

    { "username": "alice", "password": "alice-secret" }
  • 보안 암호에 대한 Amazon 리소스 이름(ARN) 값

  • 중요

    클러스터 크기를 적절하게 조정: 브로커당 파티션 수에 설명된 제한을 초과하는 클러스터에는 Secrets Manager 보안 암호를 연결할 수 없습니다.

  • 를 사용하여 AWS CLI 시크릿을 생성하는 경우 파라미터에 키 ID 또는 ARN을 kms-key-id 지정하십시오. 별칭을 지정하지 마세요.

  • 암호를 클러스터와 연결하려면 Amazon MSK 콘솔 또는 BatchAssociateScramSecret작업을 사용하십시오.

    중요

    암호를 클러스터와 연결하면 Amazon MSK는 클러스터가 정의한 보안 암호 값에 액세스하고 읽을 수 있도록 허용하는 리소스 정책을 암호에 연결합니다. 이 리소스 정책을 수정해서는 안 됩니다. 이렇게 하면 클러스터가 보안 암호에 액세스하는 것을 방지할 수 있습니다.

    다음 BatchAssociateScramSecret 작업의 예제 JSON 입력은 보안 암호를 클러스터와 연결합니다.

    { "clusterArn" : "arn:aws:kafka:us-west-2:0123456789019:cluster/SalesCluster/abcd1234-abcd-cafe-abab-9876543210ab-4", "secretArnList": [ "arn:aws:secretsmanager:us-west-2:0123456789019:secret:AmazonMSK_MyClusterSecret" ] }

로그인 보안 인증 정보를 사용하여 클러스터에 연결

보안 암호를 생성하고 클러스터에 연결하면 클라이언트를 클러스터에 연결할 수 있습니다. 다음 예제 단계에서는 SASL/SCRAM 인증을 사용하는 클러스터에 클라이언트를 연결하는 방법과 예제 주제에서 생성 및 소비하는 방법을 보여줍니다.

  1. AWS CLI가 설치된 시스템에서 다음 명령을 실행하여 ClusterARN을 클러스터의 ARN으로 대체합니다.

    aws kafka get-bootstrap-brokers --cluster-arn clusterARN
  2. 예제 주제를 생성하려면 다음 명령을 실행하여 BootstrapServer문자열을 이전 단계에서 확보한 브로커 엔드포인트 중 하나로 대체합니다.

    <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapServerString --replication-factor 3 --partitions 1 --topic ExampleTopicName
  3. 클라이언트 머신에서 암호에 저장된 사용자 보안 인증 정보가 포함된 JAAS 구성 파일을 생성합니다. 예를 들어 사용자 alice에 대해 다음과 같은 내용으로 users_jaas.conf라는 파일을 생성합니다.

    KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule required username="alice" password="alice-secret"; };
  4. 다음 명령을 사용하여 JAAS 구성 파일을 KAFKA_OPTS 환경 파라미터로 내보냅니다.

    export KAFKA_OPTS=-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf
  5. ./tmp 디렉터리에 kafka.client.truststore.jks라는 파일을 생성합니다.

  6. 다음 명령을 사용하여 JVM cacerts 폴더에서 이전 단계에서 생성한 kafka.client.truststore.jks 파일로 JDK 키 저장소 파일을 복사합니다. JDKFolder를 인스턴스의 JDK 폴더 이름으로 변경합니다. 예를 들어 JDK 폴더의 이름은 java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64일 수 있습니다.

    cp /usr/lib/jvm/JDKFolder/jre/lib/security/cacerts /tmp/kafka.client.truststore.jks
  7. Apache Kafka 설치의 bin 디렉터리에 다음 내용으로 client_sasl.properties라는 클라이언트 속성 파일을 생성합니다. 이 파일은 SASL 메커니즘과 프로토콜을 정의합니다.

    security.protocol=SASL_SSL sasl.mechanism=SCRAM-SHA-512 ssl.truststore.location=<path-to-keystore-file>/kafka.client.truststore.jks
  8. 다음 명령으로 부트스트랩 브로커 문자열을 검색합니다. 클러스터의 Amazon 리소스 이름 (ARN) ClusterArn으로 바꾸십시오.

    aws kafka get-bootstrap-brokers --cluster-arn ClusterArn

    명령의 JSON 결과에서 BootstrapBrokerStringSaslScram이라는 문자열과 연관된 값을 저장합니다.

  9. 생성한 예제 주제로 생성하려면 클라이언트 머신에서 다음 명령을 실행합니다. BootstrapBrokerStringSaslScram을 이전 단계에서 검색한 값으로 대체하십시오.

    <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
  10. 생성한 주제에서 사용하려면 클라이언트 머신에서 다음 명령을 실행합니다. BootstrapBrokerStringSasl스크램을 이전에 구한 값으로 바꾸십시오.

    <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic ExampleTopicName --from-beginning --consumer.config client_sasl.properties

사용자 작업

사용자 생성: 보안 암호에 키-값 페어로 사용자를 생성합니다. Secrets Manager 콘솔에서 일반 텍스트 옵션을 사용하는 경우 로그인 보안 인증 정보 데이터를 다음 형식으로 지정해야 합니다.

{ "username": "alice", "password": "alice-secret" }

사용자 액세스 취소: 클러스터에 액세스하기 위한 사용자의 보안 인증 정보를 취소하려면 먼저 클러스터에서 ACL을 제거하거나 적용한 다음 보안 암호 연결을 해제하는 것을 권장합니다. 이는 다음과 같은 이유 때문입니다.

  • 사용자를 제거해도 기존 연결은 닫히지 않습니다.

  • 보안 암호에 대한 변경 사항이 전파되는 데에는 최대 10분이 소요됩니다.

Amazon MSK에서 ACL을 사용하는 방법에 대한 자세한 내용은 Apache Kafka ACL 섹션을 참조하세요.

ZooKeeper 모드를 사용하는 클러스터의 경우 사용자가 ACL을 수정하지 못하도록 ZooKeeper 노드에 대한 액세스를 제한하는 것이 좋습니다. 자세한 정보는 아파치에 대한 액세스 제어 ZooKeeper을 참조하세요.

제한 사항

SCRAM 보안 암호를 사용할 때는 다음 제한 사항에 유의하세요.

  • Amazon MSK는 SCRAM-SHA-512 인증만 지원합니다.

  • Amazon MSK 클러스터는 최대 1,000명의 사용자를 보유할 수 있습니다.

  • AWS KMS key 시크릿과 함께 a를 사용해야 합니다. 기본 시크릿 관리자 암호화 키를 사용하는 보안 암호는 Amazon MSK와 함께 사용할 수 없습니다. KMS 키 생성에 대한 자세한 내용은 대칭 암호화 KMS 키 생성을 참조하세요.

  • Secrets Manager에서는 비대칭 KMS 키를 사용할 수 없습니다.

  • BatchAssociateScramSecret작업을 사용하여 한 번에 최대 10개의 비밀을 클러스터에 연결할 수 있습니다.

  • Amazon MSK 클러스터와 연결된 보안 암호의 이름에는 접두사 AmazonMSK_가 있어야 합니다.

  • Amazon MSK 클러스터와 관련된 비밀은 클러스터와 동일한 Amazon Web Services 계정 및 AWS 지역에 있어야 합니다.