16.2. Operator에서 생성한 보안
Cluster Operator는 클러스터 내에서 암호화 및 인증을 활성화하기 위해 TLS 인증서를 자동으로 설정하고 갱신합니다. Kafka 브로커와 클라이언트 간에 암호화 또는 mTLS 인증을 활성화하려면 다른 TLS 인증서도 설정합니다.
시크릿은 Kafka 및 KafkaUser 와 같은 사용자 정의 리소스가 배포되면 생성됩니다. AMQ Streams는 이러한 시크릿을 사용하여 Kafka 클러스터, 클라이언트 및 사용자의 개인 및 공개 키 인증서를 저장합니다. 시크릿은 Kafka 브로커 간 TLS 암호화 연결을 설정하고 브로커와 클라이언트 간의 TLS 암호화 연결을 설정하는 데 사용됩니다. mTLS 인증에도 사용됩니다.
클러스터 및 클라이언트 보안은 항상 쌍입니다. 하나는 공개 키가 포함되어 있고 개인 키가 포함되어 있습니다.
- 클러스터 시크릿
- 클러스터 시크릿에는 Kafka 브로커 인증서에 서명하는 클러스터 CA 가 포함되어 있습니다. 클라이언트는 인증서를 사용하여 Kafka 클러스터와 TLS 암호화 연결을 설정합니다. 인증서는 브로커 ID를 확인합니다.
- 클라이언트 시크릿
- 클라이언트 시크릿에는 사용자가 자체 클라이언트 인증서에 서명할 수 있는 클라이언트 CA 가 포함되어 있습니다. 이를 통해 Kafka 클러스터에 대한 상호 인증을 허용합니다. 브로커는 인증서를 통해 클라이언트의 ID를 검증합니다.
- 사용자 시크릿
- 사용자 시크릿에는 개인 키와 인증서가 포함되어 있습니다. 새 사용자를 생성할 때 클라이언트 CA에서 시크릿을 생성하고 서명합니다. 키와 인증서는 클러스터에 액세스할 때 사용자를 인증하고 권한을 부여하는 데 사용됩니다.
TLS 리스너 또는 TLS 암호화가 활성화된 외부 리스너에 대한 Kafka 리스너 인증서를 제공할 수 있습니다. Kafka 리스너 인증서를 사용하여 이미 보유한 보안 인프라를 통합합니다.
16.2.1. PEM 또는 PKCS #12 형식의 키와 인증서를 사용하는 TLS 인증 링크 복사링크가 클립보드에 복사되었습니다!
AMQ Streams에서 생성한 시크릿은 PEM(Privacy Enhanced Mail) 및 PKCS #12(Public-Key Cryptography Standards) 형식으로 개인 키와 인증서를 제공합니다. PEM 및 PKCS #12는 SSL 프로토콜을 사용하여 TLS 통신을 위한 OpenSSL 생성 키 형식입니다.
Kafka 클러스터 및 사용자에 대해 생성된 보안에 포함된 인증 정보를 사용하는 상호 TLS(mTLS) 인증을 구성할 수 있습니다.
mTLS를 설정하려면 먼저 다음을 수행해야 합니다.
Kafka 클러스터를 배포할 때 클러스터를 확인하기 위해 < cluster_name>-cluster-ca-cert 시크릿이 공개 키로 생성됩니다. 공개 키를 사용하여 클라이언트의 신뢰 저장소를 구성합니다.
KafkaUser 를 생성할 때 사용자(클라이언트)를 확인하기 위해 키와 인증서로 < kafka_user_name > 시크릿이 생성됩니다. 이러한 인증 정보를 사용하여 클라이언트의 키 저장소를 구성합니다.
Kafka 클러스터 및 클라이언트가 mTLS를 사용하도록 설정된 상태에서 시크릿에서 인증 정보를 추출하여 클라이언트 구성에 추가합니다.
- PEM 키 및 인증서
PEM의 경우 클라이언트 구성에 다음을 추가합니다.
- truststore
-
클러스터의 CA 인증서인 <
cluster_name>-cluster-ca-cert시크릿의ca.crt.
-
클러스터의 CA 인증서인 <
- 키 저장소
-
<
kafka_user_name> 시크릿의user.crt는 사용자의 공용 인증서입니다. -
<
kafka_user_name> 시크릿의user.key는 사용자의 개인 키입니다.
-
<
- PKCS #12 키 및 인증서
PKCS #12의 경우 클라이언트 구성에 다음을 추가합니다.
- truststore
-
클러스터의 CA 인증서인 <
cluster_name>-cluster-ca-cert시크릿의ca.p12. -
공용 클러스터 CA 인증서에 액세스하기 위한 암호인 <
cluster_name>-cluster-ca-cert시크릿의ca.password.
-
클러스터의 CA 인증서인 <
- 키 저장소
-
<
kafka_user_name> 시크릿의user.p12는 사용자의 공개 키 인증서입니다. -
Kafka 사용자의 공개 키 인증서에 액세스하기 위한 암호인 <
kafka_user_name> 시크릿의user.password.
-
<
PKCS #12는 Java에서 지원하므로 인증서 값을 Java 클라이언트 구성에 직접 추가할 수 있습니다. 보안 스토리지 위치의 인증서를 참조할 수도 있습니다. PEM 파일을 사용하면 한 줄 형식으로 클라이언트 구성에 인증서를 직접 추가해야 합니다. Kafka 클러스터와 클라이언트 간의 TLS 연결을 설정하는 데 적합한 형식을 선택합니다. PEM에 익숙하지 않은 경우 PKCS #12를 사용합니다.
모든 키는 크기가 2048비트이며 기본적으로 초기 생성에서 365일 동안 유효합니다. 유효 기간을 변경할 수 있습니다.
16.2.2. Cluster Operator에서 생성한 보안 링크 복사링크가 클립보드에 복사되었습니다!
Cluster Operator는 OpenShift 클러스터에 시크릿으로 저장된 다음 인증서를 생성합니다. AMQ Streams는 기본적으로 이러한 시크릿을 사용합니다.
클러스터 CA 및 클라이언트 CA에는 개인 키 및 공개 키에 대한 별도의 시크릿이 있습니다.
<cluster_name>-cluster-ca- 클러스터 CA의 개인 키를 포함합니다. AMQ Streams 및 Kafka 구성 요소는 개인 키를 사용하여 서버 인증서에 서명합니다.
<cluster_name>-cluster-ca-cert- 클러스터 CA의 공개 키를 포함합니다. Kafka 클라이언트는 공개 키를 사용하여 TLS 서버 인증으로 연결된 Kafka 브로커의 ID를 확인합니다.
<cluster_name>-clients-ca- 클라이언트 CA의 개인 키를 포함합니다. Kafka 클라이언트는 Kafka 브로커에 연결할 때 개인 키를 사용하여 mTLS 인증을 위한 새 사용자 인증서에 서명합니다.
<cluster_name>-clients-ca-cert- 클라이언트 CA의 공개 키를 포함합니다. Kafka 브로커는 공개 키를 사용하여 mTLS 인증이 사용되는 경우 Kafka 브로커에 액세스하는 클라이언트의 ID를 확인합니다.
AMQ Streams 구성 요소 간 통신을 위한 시크릿에는 클러스터 CA에서 서명한 개인 키와 공개 키 인증서가 포함되어 있습니다.
<cluster_name>-kafka-brokers- Kafka 브로커의 개인 키 및 공개 키가 포함되어 있습니다.
<cluster_name>-zookeeper-nodes- Zoo Cryostat 노드의 개인 및 공개 키를 포함합니다.
<cluster_name>-cluster-operator-certs- Cluster Operator와 Kafka 또는 Zoo Cryostat 간의 통신을 암호화하기 위한 개인 및 공개 키가 포함되어 있습니다.
<cluster_name>-entity-topic-operator-certs- Topic Operator와 Kafka 또는 Zoo Cryostat 간의 통신을 암호화하기 위한 개인 및 공개 키가 포함되어 있습니다.
<cluster_name>-entity-user-operator-certs- User Operator와 Kafka 또는 Zoo Cryostat 간의 통신을 암호화하기 위한 개인 및 공개 키가 포함되어 있습니다.
<cluster_name>-cruise-control-certs- Cruise Control과 Kafka 또는 Zoo Cryostat 간의 통신을 암호화하기 위한 개인 및 공개 키가 포함되어 있습니다.
<cluster_name>-kafka-exporter-certs- Kafka Exporter와 Kafka 또는 Zoo Cryostat 간의 통신을 암호화하기 위한 개인 및 공개 키가 포함되어 있습니다.
클러스터 CA에서 서명한 인증서 대신 Kafka 리스너 인증서를 사용하여 Kafka 브로커에 연결하기 위해 자체 서버 인증서 및 개인 키를 제공할 수 있습니다.
16.2.3. 클러스터 CA 시크릿 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 CA 보안은 Kafka 클러스터의 Cluster Operator에 의해 관리됩니다.
클라이언트에는 <cluster_name> -cluster-ca-cert 시크릿만 필요합니다. 다른 모든 클러스터 시크릿은 AMQ Streams 구성 요소에서 액세스할 수 있습니다. 필요한 경우 OpenShift 역할 기반 액세스 제어를 사용하여 이를 적용할 수 있습니다.
< cluster_name> -cluster-ca-cert 의 CA 인증서는 TLS를 통해 Kafka 브로커에 연결할 때 Kafka 브로커 인증서를 검증하도록 Kafka 클라이언트 애플리케이션에서 신뢰해야 합니다.
| 필드 | 설명 |
|---|---|
|
| 클러스터 CA의 현재 개인 키입니다. |
| 필드 | 설명 |
|---|---|
|
| 인증서 및 키를 저장하기 위한 PKCS #12 저장소입니다. |
|
| PKCS #12 저장소를 보호하기 위한 암호입니다. |
|
| 클러스터 CA의 현재 인증서입니다. |
| 필드 | 설명 |
|---|---|
|
| 인증서 및 키를 저장하기 위한 PKCS #12 저장소입니다. |
|
| PKCS #12 저장소를 보호하기 위한 암호입니다. |
|
|
Kafka 브로커 Pod < num>의 인증서입니다. <cluster |
|
|
Kafka 브로커 Pod < |
| 필드 | 설명 |
|---|---|
|
| 인증서 및 키를 저장하기 위한 PKCS #12 저장소입니다. |
|
| PKCS #12 저장소를 보호하기 위한 암호입니다. |
|
|
Zoo Cryostat 노드 < num& gt;의 인증서입니다. <cluster |
|
|
Zoo Cryostat pod < |
| 필드 | 설명 |
|---|---|
|
| 인증서 및 키를 저장하기 위한 PKCS #12 저장소입니다. |
|
| PKCS #12 저장소를 보호하기 위한 암호입니다. |
|
|
Cluster Operator와 Kafka 또는 Zoo Cryostat 간의 mTLS 통신 인증서입니다. <cluster |
|
| Cluster Operator와 Kafka 또는 Zoo Cryostat 간의 mTLS 통신의 개인 키입니다. |
| 필드 | 설명 |
|---|---|
|
| 인증서 및 키를 저장하기 위한 PKCS #12 저장소입니다. |
|
| PKCS #12 저장소를 보호하기 위한 암호입니다. |
|
|
Topic Operator와 Kafka 또는 Zoo Cryostat 간의 mTLS 통신 인증서입니다. <cluster |
|
| Topic Operator와 Kafka 또는 Zoo Cryostat 간의 mTLS 통신의 개인 키입니다. |
| 필드 | 설명 |
|---|---|
|
| 인증서 및 키를 저장하기 위한 PKCS #12 저장소입니다. |
|
| PKCS #12 저장소를 보호하기 위한 암호입니다. |
|
|
User Operator와 Kafka 또는 Zoo Cryostat 간의 mTLS 통신 인증서입니다. <cluster |
|
| User Operator와 Kafka 또는 Zoo Cryostat 간의 mTLS 통신의 개인 키입니다. |
| 필드 | 설명 |
|---|---|
|
| 인증서 및 키를 저장하기 위한 PKCS #12 저장소입니다. |
|
| PKCS #12 저장소를 보호하기 위한 암호입니다. |
|
|
Cruise Control과 Kafka 또는 Zoo Cryostat 간의 mTLS 통신 인증서입니다. <cluster |
|
| 크루즈 컨트롤과 Kafka 또는 Zoo Cryostat 간의 mTLS 통신의 개인 키입니다. |
| 필드 | 설명 |
|---|---|
|
| 인증서 및 키를 저장하기 위한 PKCS #12 저장소입니다. |
|
| PKCS #12 저장소를 보호하기 위한 암호입니다. |
|
|
Kafka Exporter와 Kafka 또는 Zoo Cryostat 간의 mTLS 통신 인증서입니다. <cluster |
|
| Kafka Exporter와 Kafka 또는 Zoo Cryostat 간의 mTLS 통신의 개인 키입니다. |
16.2.4. 클라이언트 CA 시크릿 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트 CA 보안은 Kafka 클러스터의 Cluster Operator에 의해 관리됩니다.
< cluster_name> -clients-ca-cert 의 인증서는 Kafka 브로커가 신뢰하는 인증서입니다.
& lt;cluster_name> -clients-ca 시크릿은 클라이언트 애플리케이션의 인증서에 서명하는 데 사용됩니다. User Operator를 사용하지 않고 애플리케이션 인증서를 발급하려는 경우 AMQ Streams 구성 요소와 관리 액세스 권한을 위해 이 시크릿에 액세스할 수 있어야 합니다. 필요한 경우 OpenShift 역할 기반 액세스 제어를 사용하여 이를 적용할 수 있습니다.
| 필드 | 설명 |
|---|---|
|
| 클라이언트 CA의 현재 개인 키입니다. |
| 필드 | 설명 |
|---|---|
|
| 인증서 및 키를 저장하기 위한 PKCS #12 저장소입니다. |
|
| PKCS #12 저장소를 보호하기 위한 암호입니다. |
|
| 클라이언트 CA의 현재 인증서입니다. |
16.2.5. User Operator에서 생성한 사용자 시크릿 링크 복사링크가 클립보드에 복사되었습니다!
사용자 보안은 User Operator가 관리합니다.
User Operator를 사용하여 사용자를 생성하면 사용자 이름을 사용하여 보안이 생성됩니다.
| 시크릿 이름 | 시크릿 내 필드 | 설명 |
|---|---|---|
|
|
| 인증서 및 키를 저장하기 위한 PKCS #12 저장소입니다. |
|
| PKCS #12 저장소를 보호하기 위한 암호입니다. | |
|
| 클라이언트 CA에서 서명한 사용자의 인증서 | |
|
| 사용자의 개인 키 |
16.2.6. 클러스터 CA 보안에 레이블 및 주석 추가 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 사용자 정의 리소스에서 clusterCaCert 템플릿 속성을 구성하면 Cluster Operator에서 생성한 Cluster CA 보안에 사용자 정의 레이블 및 주석을 추가할 수 있습니다. 레이블 및 주석은 오브젝트를 식별하고 컨텍스트 정보를 추가하는 데 유용합니다. AMQ Streams 사용자 정의 리소스에서 템플릿 속성을 구성합니다.
보안에 레이블 및 주석을 추가하는 템플릿 사용자 정의 예
16.2.7. CA 보안에서 ownerReference 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 클러스터 및 클라이언트 CA 보안은 Kafka 사용자 정의 리소스로 설정된 ownerReference 속성을 사용하여 생성됩니다. 즉, Kafka 사용자 정의 리소스가 삭제되면 OpenShift에서 CA 시크릿도 삭제(가용됨)됩니다.
새 클러스터에 CA를 재사용하려면 Kafka 구성에서 클러스터 및 클라이언트 CA 시크릿의 generateSecretOwnerReference 속성을 false 로 설정하여 ownerReference 를 비활성화할 수 있습니다. ownerReference 가 비활성화되면 해당 Kafka 사용자 정의 리소스가 삭제되면 OpenShift에서 CA 시크릿이 삭제되지 않습니다.
클러스터 및 클라이언트 CA에 대해 비활성화된 ownerReference 가 있는 Kafka 구성의 예