14.2. Kafka 클라이언트의 보안 옵션
KafkaUser 리소스를 사용하여 Kafka 클라이언트에 대한 인증 메커니즘, 권한 부여 메커니즘 및 액세스 권한을 구성합니다. 보안 구성 측면에서 클라이언트는 사용자로 표시됩니다.
Kafka 브로커에 대한 사용자 액세스 권한을 인증하고 인증할 수 있습니다. 인증은 액세스를 허용하고 권한 부여는 허용되는 작업에 대한 액세스를 제한합니다.
Kafka 브로커에 대한 제약되지 않은 액세스 권한이 있는 슈퍼 사용자를 생성할 수도 있습니다.
인증 및 권한 부여 메커니즘은 Kafka 브로커에 액세스하는 데 사용되는 리스너의 사양과 일치해야 합니다.
Kafka 브로커에 안전하게 액세스하도록 KafkaUser 리소스를 구성하는 방법에 대한 자세한 내용은 13.3절. “리스너를 사용하여 Kafka 클러스터에 클라이언트 액세스 설정” 을 참조하십시오.
14.2.1. 사용자 처리를 위한 Kafka 클러스터 식별 링크 복사링크가 클립보드에 복사되었습니다!
KafkaUser 리소스에는 적절한 Kafka 클러스터 이름( Kafka 리소스의 이름에서 파생)을 정의하는 레이블이 포함됩니다.
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaUser
metadata:
name: my-user
labels:
strimzi.io/cluster: my-cluster
레이블은 User Operator에서 KafkaUser 리소스를 식별하고 새 사용자를 생성하고 사용자를 나중에 처리하는 데 사용됩니다.
레이블이 Kafka 클러스터와 일치하지 않으면 User Operator에서 KafkaUser 를 식별할 수 없으며 사용자가 생성되지 않습니다.
KafkaUser 리소스의 상태가 비어 있으면 레이블을 확인합니다.
14.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 인증서에 지정된 공통 이름입니다.
14.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
# ...
인증 유형은 Kafka 클러스터에 액세스하는 데 사용되는 Kafka 리스너의 동등한 구성과 일치해야 합니다.
User Operator에 의해 사용자를 생성하면 KafkaUser 리소스와 동일한 이름으로 새 시크릿을 생성합니다. 보안에는 mTLS에 대한 개인 및 공개 키가 포함되어 있습니다. 공개 키는 생성될 때 클라이언트 CA(인증 기관)에 의해 서명되는 사용자 인증서에 포함됩니다. 모든 키는 X.509 형식으로 되어 있습니다.
Cluster Operator에서 생성한 클라이언트 CA를 사용하는 경우 클라이언트 CA를 Cluster Operator가 갱신할 때 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
클라이언트를 구성할 때 다음을 지정합니다.
- Kafka 클러스터의 ID를 확인하기 위한 공용 클러스터 CA 인증서의 신뢰 저장소 속성
- 사용자 인증 자격 증명의 키 저장소 속성을 사용하여 클라이언트를 확인합니다.
구성은 파일 형식(PEM 또는 PKCS #12)에 따라 다릅니다. 이 예에서는 PKCS #12 저장소와 저장소의 자격 증명에 액세스하는 데 필요한 암호를 사용합니다.
PKCS #12 형식의 mTLS를 사용한 클라이언트 구성 예
bootstrap.servers=<kafka_cluster_name>-kafka-bootstrap:9093
security.protocol=SSL
ssl.truststore.location=/tmp/ca.p12
ssl.truststore.password=<truststore_password>
ssl.keystore.location=/tmp/user.p12
ssl.keystore.password=<keystore_password>
- 1
- Kafka 클러스터에 연결할 부트스트랩 서버 주소입니다.
- 2
- 암호화에 TLS를 사용할 때 보안 프로토콜 옵션입니다.
- 3
- 신뢰 저장소 위치에는 Kafka 클러스터의 공개 키 인증서(
ca.p12)가 포함됩니다. Kafka 클러스터가 생성될 때 <cluster_name>-cluster-ca-cert보안의 Cluster Operator에 클러스터 CA 인증서 및 암호가 생성됩니다. - 4
- 신뢰 저장소에 액세스하기 위한 암호(
ca.password)입니다. - 5
- 키 저장소 위치에는 Kafka 사용자의 공개 키 인증서(
user.p12)가 포함됩니다. - 6
- 키 저장소에 액세스하기 위한 암호(
user.password)
14.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
# ...
14.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
# ...
User Operator에 의해 사용자를 생성하면 KafkaUser 리소스와 동일한 이름으로 새 시크릿을 생성합니다. 보안에는 암호 키에 생성된 암호 가 포함되어 있으며, 이 암호는 base64로 인코딩됩니다. 암호를 사용하려면 암호를 디코딩해야 합니다.
사용자 인증 정보가 있는 시크릿 예
apiVersion: v1
kind: Secret
metadata:
name: my-user
labels:
strimzi.io/kind: KafkaUser
strimzi.io/cluster: my-cluster
type: Opaque
data:
password: Z2VuZXJhdGVkcGFzc3dvcmQ=
sasl.jaas.config: b3JnLmFwYWNoZS5rYWZrYS5jb21tb24uc2VjdXJpdHkuc2NyYW0uU2NyYW1Mb2dpbk1vZHVsZSByZXF1aXJlZCB1c2VybmFtZT0ibXktdXNlciIgcGFzc3dvcmQ9ImdlbmVyYXRlZHBhc3N3b3JkIjsK
생성된 암호를 디코딩합니다.
echo "Z2VuZXJhdGVkcGFzc3dvcmQ=" | base64 --decode
14.2.2.3.1. 사용자 정의 암호 구성 링크 복사링크가 클립보드에 복사되었습니다!
사용자가 생성되면 AMQ Streams에서 임의의 암호를 생성합니다. AMQ 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
key: my-password
# ...
14.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 관리가 활성화되지 않은 경우 AMQ Streams는 ACL 규칙이 포함된 경우 리소스를 거부합니다.
User Operator의 독립 실행형 배포를 사용하는 경우 ACL 관리가 기본적으로 활성화됩니다. STRIMZI_ACLS_ADMIN_API_SUPPORTED 환경 변수를 사용하여 비활성화할 수 있습니다.
인증이 지정되지 않은 경우 User Operator는 사용자에 대한 액세스 권한을 프로비저닝하지 않습니다. 이러한 KafkaUser 가 리소스에 계속 액세스할 수 있는지의 여부는 사용 중인 인증자에 따라 달라집니다. 예를 들어 AclAuthorizer 의 경우 allow.everyone.if.no.acl.found 구성에 따라 결정됩니다.
14.2.3.1. ACL 규칙 링크 복사링크가 클립보드에 복사되었습니다!
AclAuthorizer 는 ACL 규칙을 사용하여 Kafka 브로커에 대한 액세스를 관리합니다.
ACL 규칙은 acls 속성에 지정하는 사용자에게 액세스 권한을 부여합니다.
AclRule 오브젝트에 대한 자세한 내용은 AclRule 스키마 참조를 참조하십시오.
14.2.3.2. Kafka 브로커에 대한 Super 사용자 액세스 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 브로커 구성의 슈퍼 사용자 목록에 사용자를 추가하면 KafkaUser 의 ACL에 정의된 권한 부여 제약 조건에 관계없이 사용자가 클러스터에 대한 무제한 액세스를 허용합니다.
브로커에 대한 슈퍼 사용자 액세스에 대한 자세한 내용은 Kafka 권한 부여 를 참조하십시오.
14.2.3.3. 사용자 할당량 링크 복사링크가 클립보드에 복사되었습니다!
KafkaUser 리소스에 대한 사양 을 구성하여 사용자가 Kafka 브로커에 대한 구성된 액세스 수준을 초과하지 않도록 할당량을 적용할 수 있습니다. 크기 기반 네트워크 사용량 및 시간 기반 CPU 사용률 임계값을 설정할 수 있습니다. 파티션 변경 할당량을 추가하여 사용자 요청에 대해 파티션 변경 요청이 허용되는 속도를 제어할 수도 있습니다.
사용자 할당량이 있는 KafkaUser 의 예
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaUser
metadata:
name: my-user
labels:
strimzi.io/cluster: my-cluster
spec:
# ...
quotas:
producerByteRate: 1048576
consumerByteRate: 2097152
requestPercentage: 55
controllerMutationRate: 10
이러한 속성에 대한 자세한 내용은 KafkaUserQuotas 스키마 참조를 참조하십시오.