4.7. 권한 부여
Kafka 브로커의 권한 부여는 승인자 플러그인을 사용하여 구현됩니다.
이 섹션에서는 Kafka와 함께 제공된 AclAuthorizer 플러그인을 사용하는 방법을 설명합니다.
또는 고유한 권한 부여 플러그인을 사용할 수 있습니다. 예를 들어 OAuth 2.0 토큰 기반 인증을 사용하는 경우 OAuth 2.0 인증을 사용할 수 있습니다.
4.7.1. 간단한 ACL 승인자 링크 복사링크가 클립보드에 복사되었습니다!
AclAuthorizer 를 포함한 승인자 플러그인은 authorizer.class.name 속성을 통해 활성화됩니다.
authorizer.class.name=kafka.security.auth.AclAuthorizer
authorizer.class.name=kafka.security.auth.AclAuthorizer
선택한 승인자에게 정규화된 이름이 필요합니다. AclAuthorizer 의 경우 정규화된 이름은 kafka.security.auth.AclAuthorizer 입니다.
4.7.1.1. ACL 규칙 링크 복사링크가 클립보드에 복사되었습니다!
AclAuthorizer 는 ACL 규칙을 사용하여 Kafka 브로커에 대한 액세스를 관리합니다.
ACL 규칙은 형식으로 정의됩니다.
호스트 H에서 Kafka 리소스 R 에서 주체 P 가 허용 / 거부된 작업 O
예를 들어, 사용자를 위해 규칙을 설정할 수 있습니다.
존은 host 127.0.0.1의 주제 주석 을 볼 수 있습니다.
host는 존스가 연결 중인 시스템의 IP 주소입니다.
대부분의 경우 사용자는 생산자 또는 소비자 애플리케이션입니다.
Consumer01 은 호스트 127.0.0.1에서 소비자 그룹 계정에 쓸 수 있습니다.
ACL 규칙이 없는 경우
지정된 리소스에 ACL 규칙이 없으면 모든 작업이 거부됩니다. Kafka 구성 파일 /opt/kafka/config/server.properties 에서 allow.everyone.if.no.acl.found 속성을 true 로 설정하여 이 동작을 변경할 수 있습니다.
4.7.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> when connected using Kerberos.
DistinguishedName 은 클라이언트 인증서와 고유 이름입니다.
Kerberos 사용자 이름은 Kerberos 주체의 기본 부분이며 Kerberos를 사용하여 연결할 때 기본적으로 사용됩니다. sasl.kerberos.principal.to.local.rules 속성을 사용하여 Kerberos 주체에서 Kafka 주체를 빌드하는 방법을 구성할 수 있습니다.
4.7.1.3. 사용자 인증 링크 복사링크가 클립보드에 복사되었습니다!
승인을 사용하려면 클라이언트가 인증을 활성화하고 사용해야 합니다. 그렇지 않으면 모든 연결에 주체 User:ANONYMOUS 가 있습니다.
인증 방법에 대한 자세한 내용은 암호화 및 인증을 참조하십시오.
4.7.1.4. 슈퍼유저 링크 복사링크가 클립보드에 복사되었습니다!
슈퍼유저는 ACL 규칙에 관계없이 모든 작업을 수행할 수 있습니다.
슈퍼 사용자는 super.users 속성을 사용하여 Kafka 구성 파일에 정의되어 있습니다.
예를 들면 다음과 같습니다.
super.users=User:admin,User:operator
super.users=User:admin,User:operator
4.7.1.5. 복제본 브로커 인증 링크 복사링크가 클립보드에 복사되었습니다!
권한 부여가 활성화되면 모든 리스너 및 모든 연결에 적용됩니다. 여기에는 브로커 간 데이터 복제에 사용되는 inter-broker 연결이 포함됩니다. 따라서 권한 부여를 활성화하는 경우 브랜드 간 연결에 인증을 사용하고 브로커에서 사용하는 사용자에게 충분한 권한을 부여해야 합니다. 예를 들어 브로커 간 인증이 kafka-broker 사용자를 사용하는 경우 슈퍼 사용자 구성에 사용자 이름 super.users=User:kafka-broker 가 포함되어야 합니다.
4.7.1.6. 지원되는 리소스 링크 복사링크가 클립보드에 복사되었습니다!
이러한 유형의 리소스에 Kafka ACL을 적용할 수 있습니다.
- 주제
- 소비자 그룹
- 클러스터
- TransactionId
- DelegationToken
4.7.1.7. 지원되는 작업 링크 복사링크가 클립보드에 복사되었습니다!
AclAuthorizer 는 리소스에 대한 작업을 인증합니다.
다음 표에 X 가 있는 필드는 각 리소스에 대해 지원되는 작업을 나타냅니다.
| 주제 | 소비자 그룹 | Cluster | |
|---|---|---|---|
| 읽기 | X | X | |
| 쓰기 | X | ||
| 개발 | X | ||
| delete | X | ||
| 변경 | X | ||
| describe | X | X | X |
| ClusterAction | X | ||
| All | X | X | X |
4.7.1.8. ACL 관리 옵션 링크 복사링크가 클립보드에 복사되었습니다!
ACL 규칙은 Kafka 배포 패키지의 일부로 제공되는 bin/kafka-acls.sh 유틸리티를 사용하여 관리됩니다.
kafka-acls.sh 매개변수 옵션을 사용하여 ACL 규칙을 추가, 나열 및 제거하고 기타 기능을 수행합니다.
매개 변수에는 --add 와 같은 이중-하이프 규칙(예: --add )이 필요합니다.
| 옵션 | 유형 | 설명 | 기본 |
|---|---|---|---|
|
| 동작 | ACL 규칙을 추가합니다. | |
|
| 동작 | ACL 규칙을 제거합니다. | |
|
| 동작 | ACL 규칙을 나열합니다. | |
|
| 동작 | 승인자의 정규화된 클래스 이름입니다. |
|
|
| 설정 | 초기화를 위해 승인자에게 전달된 키/값 쌍입니다.
| |
|
| 리소스 | Kafka 클러스터에 연결할 호스트/포트 쌍입니다. |
이 옵션 또는 |
|
| 리소스 |
| |
|
| 리소스 | 클러스터를 ACL 리소스로 지정합니다. | |
|
| 리소스 | 주제 이름을 ACL 리소스로 지정합니다.
와일드카드로 사용되는 별표(
단일 명령은 여러 | |
|
| 리소스 | 소비자 그룹 이름을 ACL 리소스로 지정합니다.
단일 명령은 여러 | |
|
| 리소스 | 트랜잭션 ID를 ACL 리소스로 지정합니다. 트랜잭션 전달은 생산자가 여러 파티션으로 전송하거나 해당 파티션을 성공적으로 전달하지 않아야 함을 의미합니다.
와일드카드로 사용되는 별표( | |
|
| 리소스 | 위임 토큰을 ACL 리소스로 지정합니다.
와일드카드로 사용되는 별표( | |
|
| 설정 |
리소스 이름에 대한 리소스 패턴 유형으로
리소스 패턴 필터 값 또는 특정 패턴 유형 필터로 일부 또는 |
|
|
| 주체 | 주체가 허용 ACL 규칙에 추가되었습니다.
단일 명령은 | |
|
| 주체 | 거부 ACL 규칙에 보안 주체가 추가되었습니다.
단일 명령은 | |
|
| 주체 |
principal에 대한 ACL
단일 명령은 | |
|
| 호스트 |
호스트 이름 또는 CIDR 범위는 지원되지 않습니다. |
|
|
| 호스트 |
호스트 이름 또는 CIDR 범위는 지원되지 않습니다. |
|
|
| 작업 | 작업을 허용하거나 거부합니다.
단일 명령은 단일 명령에서 multipleMultiple | All |
|
| 바로 가기 | 메시지 프로듀서(WRITE 및 DESCRIBE, 클러스터의 CREATE)에 필요한 모든 작업을 허용하거나 거부하는 바로 가기입니다. | |
|
| 바로 가기 | 메시지 소비자(READ 및 DESCRIBE on topic, READ on consumer group)에 필요한 모든 작업을 허용하거나 거부하는 바로 가기입니다. | |
|
| 바로 가기 |
Idepmotence는 생산자가 특정 트랜잭션 ID를 기반으로 메시지를 보낼 수 있는 권한이 부여된 경우 자동으로 활성화됩니다. | |
|
| 바로 가기 | 모든 쿼리를 수락하고 묻지 않는 바로 가기입니다. |
4.7.2. 권한 부여 활성화 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 Kafka 브로커에서 승인을 위해 AclAuthorizer 플러그인을 활성화하는 방법을 설명합니다.
프로세스
AclAuthorizer를 사용하도록/opt/kafka/config/server.propertiesKafka 구성 파일을 편집합니다.authorizer.class.name=kafka.security.auth.AclAuthorizer
authorizer.class.name=kafka.security.auth.AclAuthorizerCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Kafka 브로커를 시작합니다.
추가 리소스
- AMQ Streams 구성에 대한 자세한 내용은 2.8절. “AMQ Streams 구성” 을 참조하십시오.
- Kafka 클러스터 실행에 대한 자세한 내용은 4.5절. “다중 노드 Kafka 클러스터 실행” 을 참조하십시오.
4.7.3. ACL 규칙 추가 링크 복사링크가 클립보드에 복사되었습니다!
AclAuthorizer 는 사용자가 수행할 수 있고 수행할 수 없는 규칙 집합을 정의하는 ACL(액세스 제어 목록)을 사용합니다.
다음 절차에서는 Kafka 브로커에서 AclAuthorizer 플러그인을 사용할 때 ACL 규칙을 추가하는 방법을 설명합니다.
규칙은 kafka-acls.sh 유틸리티를 사용하여 추가되고 Zoo Cryostat에 저장됩니다.
사전 요구 사항
- AMQ Streams는 Kafka 브로커로 사용되는 모든 호스트에 설치됩니다.
- Kafka 브로커에서 권한 부여가 활성화됩니다.
프로세스
--add옵션을 사용하여kafka-acls.sh를 실행합니다.예:
MyConsumerGroup소비자 그룹을 사용하여user1및user2액세스가myTopic에서 읽을 수 있도록 허용합니다.bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2Copy to Clipboard Copied! Toggle word wrap Toggle overflow user1액세스를 거부하여 IP 주소127.0.0.1에서myTopic을 읽습니다.bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow MyConsumerGroup을 사용하여myTopic의 소비자로user1을 추가합니다.bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
추가 리소스
-
모든
kafka-acls.sh옵션 목록은 4.7.1절. “간단한 ACL 승인자” 을 참조하십시오.
4.7.4. ACL 규칙 나열 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 Kafka 브로커에서 AclAuthorizer 플러그인을 사용할 때 기존 ACL 규칙을 나열하는 방법을 설명합니다.
규칙은 kafka-acls.sh 유틸리티를 사용하여 나열됩니다.
사전 요구 사항
- AMQ Streams는 Kafka 브로커로 사용되는 모든 호스트에 설치됩니다.
- Kafka 브로커에서 권한 부여가 활성화됨
- ACL이 추가되었습니다.
프로세스
--list옵션을 사용하여kafka-acls.sh를 실행합니다.예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
추가 리소스
-
모든
kafka-acls.sh옵션 목록은 4.7.1절. “간단한 ACL 승인자” 을 참조하십시오.
4.7.5. ACL 규칙 제거 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 Kafka 브로커에서 AclAuthorizer 플러그인을 사용할 때 ACL 규칙을 제거하는 방법을 설명합니다.
규칙은 kafka-acls.sh 유틸리티를 사용하여 제거됩니다.
사전 요구 사항
- AMQ Streams는 Kafka 브로커로 사용되는 모든 호스트에 설치됩니다.
- Kafka 브로커에서 권한 부여가 활성화됩니다.
- ACL이 추가되었습니다.
프로세스
--remove옵션을 사용하여kafka-acls.sh를 실행합니다.예:
MyConsumerGroup소비자 그룹을 사용하여myTopic에서 Allowuser1및user2액세스를 읽을 수 있도록 ACL을 제거합니다.bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2Copy to Clipboard Copied! Toggle word wrap Toggle overflow MyConsumerGroup을 사용하여myTopic의 소비자로user1을 추가하는 ACL을 제거합니다.bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1Copy to Clipboard Copied! Toggle word wrap Toggle overflow IP 주소 호스트
127.0.0.1에서myTopic읽기를 위해user1액세스를 거부하는 ACL을 제거합니다.bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
추가 리소스
-
모든
kafka-acls.sh옵션 목록은 4.7.1절. “간단한 ACL 승인자” 을 참조하십시오. - 권한 부여 활성화에 대한 자세한 내용은 4.7.2절. “권한 부여 활성화” 을 참조하십시오.