16.4.2. Kafka에 대한 사용자 액세스 보안
Kafka 클러스터에 액세스해야 하는 클라이언트를 나타내는 사용자를 생성하거나 수정합니다.
-
Kafka리스너와 동일한 인증 유형을 지정합니다. 간단한승인을 위해 권한 부여 ACL을 지정합니다.사용자 구성 예
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaUser metadata: name: my-user labels: strimzi.io/cluster: my-cluster1 spec: authentication: type: tls2 authorization: type: simple acls:3 - resource: type: topic name: my-topic patternType: literal operations: - Describe - Read - resource: type: group name: my-group patternType: literal operations: - Read
-
KafkaUser리소스 구성에 변경 사항을 적용합니다.사용자는
KafkaUser리소스와 동일한 이름을 가진 시크릿과 함께 생성됩니다. 보안에는 mTLS 인증을 위한 공개 및 개인 키가 포함되어 있습니다.사용자 인증 정보가 있는 시크릿 예
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 used to sign this user certificate 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 storeKafka 클러스터의 <
cluster_name>-cluster-ca-cert시크릿에서 클러스터 CA 인증서를 추출합니다.oc get secret <cluster_name>-cluster-ca-cert -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt<user
_name> 보안에서 사용자 CA 인증서를추출합니다.oc get secret <user_name> -o jsonpath='{.data.user\.crt}' | base64 -d > user.crt<user
_name> 시크릿에서 사용자의 개인 키를추출합니다.oc get secret <user_name> -o jsonpath='{.data.user\.key}' | base64 -d > user.keyKafka 클러스터에 연결하기 위한 부트스트랩 주소 호스트 이름 및 포트로 클라이언트를 구성합니다.
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "<hostname>:<port>");Kafka 클러스터의 ID를 확인하도록 truststore 자격 증명으로 클라이언트를 구성합니다.
공용 클러스터 CA 인증서를 지정합니다.
truststore 구성의 예
props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SSL"); props.put(SslConfigs.SSL_TRUSTSTORE_TYPE_CONFIG, "PEM"); props.put(SslConfigs.SSL_TRUSTSTORE_CERTIFICATES_CONFIG, "<ca.crt_file_content>");SSL은 mTLS 인증을 위해 지정된 보안 프로토콜입니다. TLS를 통한 SCRAM-SHA-512 인증에 대해
SASL_SSL을 지정합니다. PEM은 truststore의 파일 형식입니다.Kafka 클러스터에 연결할 때 사용자를 확인하도록 키 저장소 인증 정보로 클라이언트를 구성합니다.
공개 인증서 및 개인 키를 지정합니다.
키 저장소 구성 예
props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SSL"); props.put(SslConfigs.SSL_KEYSTORE_TYPE_CONFIG, "PEM"); props.put(SslConfigs.SSL_KEYSTORE_CERTIFICATE_CHAIN_CONFIG, "<user.crt_file_content>"); props.put(SslConfigs.SSL_KEYSTORE_KEY_CONFIG, "<user.key_file_content>");키 저장소 인증서와 개인 키를 구성에 직접 추가합니다. 를 한 줄 형식으로 추가합니다.
BEGIN CERTIFICATE및END CERTIFICATE구분 기호 간에 줄 바꿈 문자(\n)로 시작합니다. 원래 인증서의 각 행을\n으로 종료합니다.키 저장소 구성 예
props.put(SslConfigs.SSL_KEYSTORE_CERTIFICATE_CHAIN_CONFIG, "-----BEGIN CERTIFICATE----- \n<user_certificate_content_line_1>\n<user_certificate_content_line_n>\n-----END CERTIFICATE---"); props.put(SslConfigs.SSL_KEYSTORE_KEY_CONFIG, "----BEGIN PRIVATE KEY-----\n<user_key_content_line_1>\n<user_key_content_line_n>\n-----END PRIVATE KEY-----");