15.2. Kafka 클라이언트의 보안 옵션


KafkaUser 리소스를 사용하여 Kafka 클라이언트에 대한 인증 메커니즘, 권한 부여 메커니즘 및 액세스 권한을 구성합니다. 보안 구성 측면에서 클라이언트는 사용자로 표시됩니다.

Kafka 브로커에 대한 사용자 액세스 권한을 인증하고 인증할 수 있습니다. 인증을 사용하면 액세스를 허용하고 권한 부여가 허용되는 작업에 대한 액세스를 제한합니다.

Kafka 브로커에 대한 무제한 액세스 권한이 있는 슈퍼 사용자를 생성할 수도 있습니다.

인증 및 권한 부여 메커니즘은 Kafka 브로커에 액세스하는 데 사용되는 리스너의 사양 과 일치해야 합니다.

Kafka 브로커에 안전하게 액세스하도록 KafkaUser 리소스를 구성하는 방법에 대한 자세한 내용은 14.4절. “리스너를 사용하여 Kafka 클러스터에 대한 클라이언트 액세스 설정” 을 참조하십시오.

15.2.1. 사용자 처리를 위한 Kafka 클러스터 식별

KafkaUser 리소스에는 해당 리소스가 속한 Kafka 리소스의 이름에서 파생되는 Kafka 클러스터의 적절한 이름을 정의하는 레이블이 포함됩니다.

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaUser
metadata:
  name: my-user
  labels:
    strimzi.io/cluster: my-cluster
Copy to Clipboard Toggle word wrap

이 레이블은 User Operator에서 KafkaUser 리소스를 식별하고 새 사용자를 생성하고 후속 처리를 수행하는 데 사용됩니다.

레이블이 Kafka 클러스터와 일치하지 않으면 User Operator에서 KafkaUser 를 식별할 수 없으며 사용자가 생성되지 않습니다.

KafkaUser 리소스의 상태가 비어 있으면 레이블을 확인합니다.

15.2.2. 사용자 인증

KafkaUser 사용자 지정 리소스를 사용하여 Kafka 클러스터에 액세스해야 하는 사용자(클라이언트)에 대한 인증 자격 증명을 구성합니다. KafkaUser.spec인증 속성을 사용하여 인증 정보를 구성합니다. 유형을 지정하면 생성되는 인증 정보를 제어할 수 있습니다.

지원되는 인증 유형:

  • mTLS 인증용 TLS
  • 외부 인증서를 사용한 mTLS 인증에 대한 TLS- external
  • SCRAM-SHA-512 인증을 위한 SCRAM-sha -512

tls 또는 scram-sha-512 가 지정된 경우 User Operator는 사용자를 생성할 때 인증 인증 정보를 생성합니다. tls-external 가 지정된 경우에도 사용자는 mTLS를 계속 사용하지만 인증 인증 정보는 생성되지 않습니다. 자체 인증서를 제공할 때 이 옵션을 사용합니다. 인증 유형을 지정하지 않으면 User Operator에서 사용자 또는 인증 정보를 생성하지 않습니다.

tls-external 를 사용하여 User Operator 외부에서 발행된 인증서를 사용하여 mTLS로 인증할 수 있습니다. User Operator는 TLS 인증서 또는 보안을 생성하지 않습니다. tls 메커니즘을 사용하는 경우와 동일한 방식으로 User Operator를 통해 ACL 규칙 및 할당량을 계속 관리할 수 있습니다. 즉, ACL 규칙 및 할당량을 지정할 때 CN=USER-NAME 형식을 사용합니다. USER-NAME 은 TLS 인증서에 지정된 일반적인 이름입니다.

15.2.2.1. mTLS 인증

mTLS 인증을 사용하려면 KafkaUser 리소스의 type 필드를 tls 로 설정합니다.

mTLS 인증이 활성화된 사용자 예

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaUser
metadata:
  name: my-user
  labels:
    strimzi.io/cluster: my-cluster
spec:
  authentication:
    type: tls
  # ...
Copy to Clipboard Toggle word wrap

인증 유형은 Kafka 클러스터에 액세스하는 데 사용되는 Kafka 리스너의 동등한 구성과 일치해야 합니다.

User Operator에 의해 사용자를 생성하면 KafkaUser 리소스와 동일한 이름으로 새 시크릿을 생성합니다. 보안에는 mTLS의 개인 및 공개 키가 포함됩니다. 공개 키는 사용자 인증서에 포함되어 있으며 클라이언트 CA(인증 기관)가 이를 생성할 때 서명합니다. 모든 키는 X.509 형식으로 되어 있습니다.

참고

Cluster Operator에서 생성한 클라이언트 CA를 사용하는 경우 Cluster Operator에 의해 클라이언트 CA를 갱신할 때 User Operator에서 생성한 사용자 인증서도 갱신됩니다.

사용자 시크릿 은 PEM 및 PKCS #12 형식의 키와 인증서를 제공합니다.

사용자 인증 정보가 있는 시크릿 예

apiVersion: v1
kind: Secret
metadata:
  name: my-user
  labels:
    strimzi.io/kind: KafkaUser
    strimzi.io/cluster: my-cluster
type: Opaque
data:
  ca.crt: <public_key> # Public key of the clients CA
  user.crt: <user_certificate> # Public key of the user
  user.key: <user_private_key> # Private key of the user
  user.p12: <store> # PKCS #12 store for user certificates and keys
  user.password: <password_for_store> # Protects the PKCS #12 store
Copy to Clipboard Toggle word wrap

클라이언트를 구성할 때 다음을 지정합니다.

  • Kafka 클러스터의 ID를 확인하기 위한 공용 클러스터 CA 인증서의 truststore 속성
  • 클라이언트를 확인하기 위한 사용자 인증 자격 증명의 키 저장소 속성

구성은 파일 형식(PEM 또는 PKCS #12)에 따라 다릅니다. 이 예에서는 PKCS #12 저장소와 저장소의 자격 증명에 액세스하는 데 필요한 암호를 사용합니다.

PKCS #12 형식의 mTLS를 사용하는 클라이언트 구성 예

bootstrap.servers=<kafka_cluster_name>-kafka-bootstrap:9093 
1

security.protocol=SSL 
2

ssl.truststore.location=/tmp/ca.p12 
3

ssl.truststore.password=<truststore_password> 
4

ssl.keystore.location=/tmp/user.p12 
5

ssl.keystore.password=<keystore_password> 
6
Copy to Clipboard Toggle word wrap

1
Kafka 클러스터에 연결할 부트스트랩 서버 주소입니다.
2
암호화에 TLS를 사용할 때 보안 프로토콜 옵션입니다.
3
truststore 위치에는 Kafka 클러스터의 공개 키 인증서(ca.p12)가 포함되어 있습니다. 클러스터 CA 인증서 및 암호는 Kafka 클러스터가 생성될 때 < cluster_name>-cluster-ca-cert 시크릿의 Cluster Operator에 의해 생성됩니다.
4
신뢰 저장소에 액세스하기 위한 암호(ca.password)입니다.
5
키 저장소 위치에는 Kafka 사용자의 공개 키 인증서(user.p12)가 포함되어 있습니다.
6
키 저장소에 액세스하기 위한 암호(user.password)입니다.

15.2.2.2. User Operator 외부에서 발급된 인증서를 사용한 mTLS 인증

User Operator 외부에서 발행된 인증서를 사용하여 mTLS 인증을 사용하려면 KafkaUser 리소스의 type 필드를 tls-external 로 설정합니다. 사용자에 대한 시크릿 및 인증 정보는 생성되지 않습니다.

User Operator 외부에서 발행된 인증서를 사용하는 mTLS 인증이 있는 사용자의 예

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaUser
metadata:
  name: my-user
  labels:
    strimzi.io/cluster: my-cluster
spec:
  authentication:
    type: tls-external
  # ...
Copy to Clipboard Toggle word wrap

15.2.2.3. SCRAM-SHA-512 인증

SCRAM-SHA-512 인증 메커니즘을 사용하려면 KafkaUser 리소스의 type 필드를 scram-sha-512 로 설정합니다.

SCRAM-SHA-512 인증이 활성화된 사용자 예

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaUser
metadata:
  name: my-user
  labels:
    strimzi.io/cluster: my-cluster
spec:
  authentication:
    type: scram-sha-512
  # ...
Copy to Clipboard Toggle word wrap

User Operator에 의해 사용자를 생성하면 KafkaUser 리소스와 동일한 이름으로 새 시크릿을 생성합니다. 보안에는 base64로 인코딩되는 password 키에 생성된 암호가 포함되어 있습니다. 암호를 사용하려면 디코딩해야 합니다.

사용자 인증 정보가 있는 시크릿 예

apiVersion: v1
kind: Secret
metadata:
  name: my-user
  labels:
    strimzi.io/kind: KafkaUser
    strimzi.io/cluster: my-cluster
type: Opaque
data:
  password: Z2VuZXJhdGVkcGFzc3dvcmQ= 
1

  sasl.jaas.config: b3JnLmFwYWNoZS5rYWZrYS5jb21tb24uc2VjdXJpdHkuc2NyYW0uU2NyYW1Mb2dpbk1vZHVsZSByZXF1aXJlZCB1c2VybmFtZT0ibXktdXNlciIgcGFzc3dvcmQ9ImdlbmVyYXRlZHBhc3N3b3JkIjsK 
2
Copy to Clipboard Toggle word wrap

1
생성된 암호, base64로 인코딩됩니다.
2
SASL SCRAM-SHA-512 인증에 대한 JAAS 구성 문자열, base64로 인코딩됩니다.

생성된 암호를 디코딩합니다.

echo "Z2VuZXJhdGVkcGFzc3dvcmQ=" | base64 --decode
Copy to Clipboard Toggle word wrap
15.2.2.3.1. 사용자 정의 암호 구성

사용자가 생성되면 Apache Kafka용 Streams가 임의의 암호를 생성합니다. Apache Kafka용 Streams에서 생성한 암호 대신 고유한 암호를 사용할 수 있습니다. 이렇게 하려면 암호를 사용하여 시크릿을 생성하고 KafkaUser 리소스에서 참조합니다.

SCRAM-SHA-512 인증에 대한 암호가 설정된 사용자 예

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaUser
metadata:
  name: my-user
  labels:
    strimzi.io/cluster: my-cluster
spec:
  authentication:
    type: scram-sha-512
    password:
      valueFrom:
        secretKeyRef:
          name: my-secret 
1

          key: my-password 
2

  # ...
Copy to Clipboard Toggle word wrap

1
사전 정의된 암호가 포함된 시크릿의 이름입니다.
2
시크릿에 저장된 암호의 키입니다.

15.2.3. 사용자 권한 부여

KafkaUser 사용자 지정 리소스를 사용하여 Kafka 클러스터에 액세스해야 하는 사용자(클라이언트)에 대한 권한 부여 규칙을 구성합니다. KafkaUser.spec 에서 권한 부여 속성을 사용하여 규칙을 구성합니다. 유형을 지정하면 사용되는 규칙을 제어할 수 있습니다.

간단한 인증을 사용하려면 KafkaUser.spec.authorization 에서 type 속성을 simple 로 설정합니다. 간단한 인증에서는 Kafka Admin API를 사용하여 Kafka 클러스터 내부의 ACL 규칙을 관리합니다. User Operator의 ACL 관리가 활성화되어 있는지 여부는 Kafka 클러스터의 권한 부여 구성에 따라 다릅니다.

  • 간단한 승인을 위해 ACL 관리는 항상 활성화됩니다.
  • OPA 권한 부여의 경우 ACL 관리는 항상 비활성화되어 있습니다. 권한 부여 규칙은 OPA 서버에서 구성됩니다.
  • Red Hat Single Sign-On 권한 부여의 경우 Red Hat Single Sign-On에서 ACL 규칙을 직접 관리할 수 있습니다. 구성의 대체 옵션으로 간단한 인증자에게 권한을 위임할 수도 있습니다. 간단한 인증자로 위임할 때 User Operator는 ACL 규칙도 관리할 수 있습니다.
  • 사용자 정의 권한 부여 플러그인을 사용하는 사용자 정의 인증의 경우 Kafka 사용자 정의 리소스의 .spec.kafka.authorization 구성에서 supportsAdminApi 속성을 사용하여 지원을 활성화하거나 비활성화합니다.

권한 부여는 클러스터 전체입니다. 권한 부여 유형은 Kafka 사용자 정의 리소스의 동등한 구성과 일치해야 합니다.

ACL 관리가 활성화되지 않은 경우 Apache Kafka의 Streams는 ACL 규칙이 포함된 경우 리소스를 거부합니다.

User Operator의 독립 실행형 배포를 사용하는 경우 기본적으로 ACL 관리가 활성화됩니다. STRIMZI_ACLS_ADMIN_API_SUPPORTED 환경 변수를 사용하여 비활성화할 수 있습니다.

권한 부여가 지정되지 않은 경우 User Operator는 사용자에 대한 액세스 권한을 프로비저닝하지 않습니다. 이러한 KafkaUser 가 리소스에 계속 액세스할 수 있는지 여부는 사용 중인 인증자에 따라 다릅니다. 예를 들어 간단한 승인을 위해 Kafka 클러스터의 allow.everyone.if.no.acl.found 구성에 의해 결정됩니다.

15.2.3.1. ACL 규칙

간단한 인증에서는 ACL 규칙을 사용하여 Kafka 브로커에 대한 액세스를 관리합니다.

ACL 규칙은 acls 속성에서 지정하는 사용자에게 액세스 권한을 부여합니다.

AclRule 오브젝트에 대한 자세한 내용은 AclRule 스키마 참조를 참조하십시오.

15.2.3.2. Kafka 브로커에 대한 슈퍼 사용자 액세스

사용자가 Kafka 브로커 구성의 슈퍼 사용자 목록에 추가되면 KafkaUser 의 ACL에 정의된 권한 부여 제약 조건에 관계없이 클러스터에 대한 무제한 액세스가 허용됩니다.

브로커에 대한 슈퍼유저 액세스를 구성하는 방법에 대한 자세한 내용은 Kafka 권한 부여를 참조하십시오.

15.2.3.3. 사용자 할당량

사용자가 Kafka 브로커에 대한 구성된 액세스 수준을 초과하지 않도록 KafkaUser 리소스의 사양 을 구성하여 할당량을 적용할 수 있습니다. 크기 기반 네트워크 사용량과 시간 기반 CPU 사용률 임계값을 설정할 수 있습니다. 파티션 변경 할당량을 추가하여 사용자 요청에 대해 파티션 변경 요청을 허용하는 속도를 제어할 수도 있습니다.

사용자 할당량이 있는 KafkaUser 의 예

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaUser
metadata:
  name: my-user
  labels:
    strimzi.io/cluster: my-cluster
spec:
  # ...
  quotas:
    producerByteRate: 1048576 
1

    consumerByteRate: 2097152 
2

    requestPercentage: 55 
3

    controllerMutationRate: 10 
4
Copy to Clipboard Toggle word wrap

1
사용자가 Kafka 브로커로 내보낼 수 있는 데이터 양에 대한 바이트당 1초 할당량
2
사용자가 Kafka 브로커에서 가져올 수 있는 데이터 양에 대한 바이트당 할당량
3
클라이언트 그룹의 백분율로 CPU 사용률 제한
4
초당 허용된 동시 파티션 생성 및 삭제 작업(mutations) 수

이러한 속성에 대한 자세한 내용은 KafkaUserQuotas 스키마 참조를 참조하십시오.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat