6.4. 권한 부여
Kafka 브로커의 권한 부여는 승인자 플러그인을 사용하여 구현됩니다.
이 섹션에서는 Kafka와 함께 제공된 StandardAuthorizer
플러그인을 사용하는 방법을 설명합니다.
또는 고유한 권한 부여 플러그인을 사용할 수 있습니다. 예를 들어 OAuth 2.0 토큰 기반 인증을 사용하는 경우 OAuth 2.0 인증을 사용할 수 있습니다.
6.4.1. ACL 승인자 활성화
Kafka 구성 속성 파일을 편집하여 ACL 승인자를 추가합니다. authorizer.class.name
속성에 정규화된 이름을 지정하여 승인자를 활성화합니다.
승인자 활성화
authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer
6.4.1.1. ACL 규칙
ACL 승인자는 ACL 규칙을 사용하여 Kafka 브로커에 대한 액세스를 관리합니다.
ACL 규칙은 다음 형식으로 정의됩니다.
기본 P 는 호스트 H의 <kafka_resource> R 에서 / denied <operation> O 입니다.
예를 들어, 사용자 존이 호스트 127.0.0.1 의 주제 주석 을 볼 수 있도록 규칙이 설정될 수 있습니다. host는 존스가 연결 중인 시스템의 IP 주소입니다.
대부분의 경우 사용자는 생산자 또는 소비자 애플리케이션입니다.
Consumer01 은 호스트 127.0.0.1에서 소비자 그룹 계정에 쓸 수 있습니다.
지정된 리소스에 ACL 규칙이 없으면 모든 작업이 거부됩니다. Kafka 구성 파일에서 allow.everyone.if.no.acl.found
속성을 true
로 설정하여 이 동작을 변경할 수 있습니다.
6.4.1.2. 보안 주체
보안 주체 는 사용자의 ID를 나타냅니다. ID 형식은 클라이언트가 Kafka에 연결하는 데 사용하는 인증 메커니즘에 따라 달라집니다.
-
인증 없이 연결할 때
사용자:ANONYMOUS
. user:<username
>은 PLAIN 또는 SCRAM과 같은 간단한 인증 메커니즘을 사용하여 연결된 경우입니다.예:
User:admin
또는User:user1
.TLS 클라이언트 인증을 사용하여 연결된 경우 user
:<DistinguishedName
>입니다.예를 들면
User:CN=user1,O=MyCompany,L=Prague,C=CZ
입니다.-
User:<Kerberos username&
gt; when connected using Kerberos.
DistinguishedName 은 클라이언트 인증서와 고유 이름입니다.
Kerberos 사용자 이름은 Kerberos 주체의 기본 부분이며 Kerberos를 사용하여 연결할 때 기본적으로 사용됩니다. sasl.kerberos.principal.to.local.rules
속성을 사용하여 Kerberos 주체에서 Kafka 주체를 빌드하는 방법을 구성할 수 있습니다.
6.4.1.3. 사용자 인증
승인을 사용하려면 클라이언트가 인증을 활성화하고 사용해야 합니다. 그렇지 않으면 모든 연결에 주체 User:ANONYMOUS
가 있습니다.
인증 방법에 대한 자세한 내용은 6.3절. “인증” 을 참조하십시오.
6.4.1.4. 슈퍼유저
슈퍼유저는 ACL 규칙에 관계없이 모든 작업을 수행할 수 있습니다.
슈퍼 사용자는 super.users
속성을 사용하여 Kafka 구성 파일에 정의되어 있습니다.
예를 들면 다음과 같습니다.
super.users=User:admin,User:operator
6.4.1.5. 복제본 브로커 인증
권한 부여가 활성화되면 모든 리스너 및 모든 연결에 적용됩니다. 여기에는 브로커 간 데이터 복제에 사용되는 inter-broker 연결이 포함됩니다. 따라서 권한 부여를 활성화하는 경우 브랜드 간 연결에 인증을 사용하고 브로커에서 사용하는 사용자에게 충분한 권한을 부여해야 합니다. 예를 들어 브로커 간 인증이 kafka-broker
사용자를 사용하는 경우 슈퍼 사용자 구성에 사용자 이름 super.users=User:kafka-broker
가 포함되어야 합니다.
ACL을 사용하여 제어할 수 있는 Kafka 리소스에 대한 자세한 내용은 Apache Kafka 설명서 를 참조하십시오.
6.4.2. ACL 규칙 추가
ACL 승인자를 사용하여 ACL(액세스 제어 목록)을 기반으로 Kafka에 대한 액세스를 제어하는 경우 kafka-acls.sh
유틸리티를 사용하여 새 ACL 규칙을 추가할 수 있습니다.
kafka-acls.sh
매개변수 옵션을 사용하여 ACL 규칙을 추가, 나열 및 제거하고 기타 기능을 수행합니다. 매개 변수에는 --add 와 같은 이중-하이프 규칙(예: --add
)이 필요합니다.
사전 요구 사항
- 사용자가 생성되어 Kafka 리소스에 액세스할 수 있는 적절한 권한이 부여되었습니다.
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- Kafka 브로커에서 권한 부여가 활성화됩니다.
프로세스
--add
옵션을 사용하여kafka-acls.sh
를 실행합니다.예:
MyConsumerGroup
소비자 그룹을 사용하여user1
및user2
액세스가myTopic
에서 읽을 수 있도록 허용합니다.opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2
user1
액세스를 거부하여 IP 주소127.0.0.1
에서myTopic
을 읽습니다.opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1
MyConsumerGroup
을 사용하여myTopic
의 소비자로user1
을 추가합니다.opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
6.4.3. ACL 규칙 나열
ACL 승인자를 사용하여 ACL(액세스 제어 목록)을 기반으로 Kafka에 대한 액세스를 제어하는 경우 kafka-acls.sh
유틸리티를 사용하여 기존 ACL 규칙을 나열할 수 있습니다.
사전 요구 사항
프로세스
--list
옵션을 사용하여kafka-acls.sh
를 실행합니다.예를 들면 다음과 같습니다.
opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --list --topic myTopic Current ACLs for resource `Topic:myTopic`: User:user1 has Allow permission for operations: Read from hosts: * User:user2 has Allow permission for operations: Read from hosts: * User:user2 has Deny permission for operations: Read from hosts: 127.0.0.1 User:user1 has Allow permission for operations: Describe from hosts: * User:user2 has Allow permission for operations: Describe from hosts: * User:user2 has Deny permission for operations: Describe from hosts: 127.0.0.1
6.4.4. ACL 규칙 제거
ACL 승인자를 사용하여 ACL(액세스 제어 목록)을 기반으로 Kafka에 대한 액세스를 제어하는 경우 kafka-acls.sh
유틸리티를 사용하여 기존 ACL 규칙을 제거할 수 있습니다.
사전 요구 사항
프로세스
--remove
옵션을 사용하여kafka-acls.sh
를 실행합니다.예:
MyConsumerGroup
소비자 그룹을 사용하여myTopic
에서 Allowuser1
및user2
액세스를 읽을 수 있도록 ACL을 제거합니다.opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2
MyConsumerGroup
을 사용하여myTopic
의 소비자로user1
을 추가하는 ACL을 제거합니다.opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
IP 주소 호스트
127.0.0.1
에서myTopic
읽기를 위해user1
액세스를 거부하는 ACL을 제거합니다.opt/kafka/bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1