10.3. 인증서 갱신 및 유효 기간
클러스터 CA 및 클라이언트 CA 인증서는 유효 기간이라는 제한된 기간 동안만 유효합니다. 일반적으로 인증서가 생성된 후 일수로 정의됩니다.
Cluster Operator가 자동으로 생성한 CA 인증서의 경우 유효한 기간을 구성할 수 있습니다.
-
Kafka.spec.clusterCa.validityDays의 클러스터 CA 인증서 -
Kafka.spec.clientsCa.validityDays의 클라이언트 CA 인증서
두 인증서의 기본 유효 기간은 365일입니다. 수동으로 설치한 CA 인증서에는 고유한 유효 기간이 정의되어 있어야 합니다.
CA 인증서가 만료되면 해당 인증서를 계속 신뢰하는 구성 요소 및 클라이언트는 CA 개인 키로 인증서를 서명한 피어의 TLS 연결을 허용하지 않습니다. 구성 요소 및 클라이언트는 대신 새 CA 인증서를 신뢰해야 합니다.
서비스 손실없이 CA 인증서의 갱신을 허용하기 위해 Cluster Operator는 이전 CA 인증서가 만료되기 전에 인증서 갱신을 시작합니다.
Cluster Operator가 생성한 인증서의 갱신 기간을 구성할 수 있습니다.
-
Kafka.spec.clusterCa.renewalDays의 클러스터 CA 인증서 -
Kafka.spec.clientsCa.renewalDays의 클라이언트 CA 인증서
두 인증서의 기본 갱신 기간은 30일입니다.
갱신 기간은 현재 인증서의 만료 날짜로부터 역순으로 측정됩니다.
갱신 기간에 대한 유효 기간
Not Before Not After
| |
|<--------------- validityDays --------------->|
<--- renewalDays --->|
Kafka 클러스터를 생성한 후 유효 기간 및 갱신 기간을 변경하려면 Kafka 사용자 정의 리소스를 구성 및 적용하고 CA 인증서를 수동으로 갱신합니다. 인증서를 수동으로 갱신하지 않으면 다음에 인증서가 자동으로 갱신될 때 새 기간이 사용됩니다.
인증서 유효 기간 및 갱신 기간에 대한 Kafka 구성의 예
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
# ...
spec:
# ...
clusterCa:
renewalDays: 30
validityDays: 365
generateCertificateAuthority: true
clientsCa:
renewalDays: 30
validityDays: 365
generateCertificateAuthority: true
# ...
갱신 기간 동안 Cluster Operator의 동작은 인증서 생성 속성, generateCertificateAuthority 및 generateCertificateAuthority 의 설정에 따라 다릅니다.
true-
속성이
true로 설정되면 Cluster Operator에 의해 CA 인증서가 자동으로 생성되고 갱신 기간 내에 자동으로 갱신됩니다. false-
속성이
false로 설정되면 Cluster Operator에 의해 CA 인증서가 생성되지 않습니다. 자체 인증서를 설치하는 경우 이 옵션을 사용합니다.
10.3.1. 자동으로 생성된 CA 인증서로 갱신 프로세스 링크 복사링크가 클립보드에 복사되었습니다!
Cluster Operator는 다음 프로세스를 수행하여 CA 인증서를 갱신합니다.
-
새 CA 인증서를 생성하지만 기존 키를 유지합니다. 새 인증서는 이전 인증서를 해당
시크릿내의ca.crt이름으로 교체합니다. - 새 클라이언트 인증서( Zookafka 노드, Kafka 브로커 및 Entity Operator용)를 생성합니다. 서명 키가 변경되지 않았으므로 엄격하게 필요하지 않지만 클라이언트 인증서의 유효 기간이 CA 인증서와 동기화됩니다.
- 새 CA 인증서를 신뢰하고 새 클라이언트 인증서를 사용할 수 있도록 Zoo Cryostat 노드를 다시 시작하십시오.
- Kafka 브로커를 다시 시작하여 새 CA 인증서를 신뢰하고 새 클라이언트 인증서를 사용합니다.
- 새 CA 인증서를 신뢰하고 새 클라이언트 인증서를 사용하도록 Topic 및 User Operator를 다시 시작합니다.
10.3.2. 클라이언트 인증서 갱신 링크 복사링크가 클립보드에 복사되었습니다!
Cluster Operator는 Kafka 클러스터를 사용하는 클라이언트 애플리케이션을 인식하지 못합니다.
클러스터에 연결하고 올바르게 작동하려면 클라이언트 애플리케이션이 다음을 수행해야 합니다.
- <cluster> - cluster-ca-cert 시크릿에 게시된 클러스터 CA 인증서를 신뢰합니다.
< user-name> 보안에 게시된 인증 정보를 사용하여 클러스터에 연결합니다.
사용자 시크릿은 PEM 및 PKCS #12 형식으로 자격 증명을 제공하거나 SCRAM-SHA 인증을 사용할 때 암호를 제공할 수 있습니다. User Operator는 사용자가 생성될 때 사용자 인증 정보를 생성합니다.
인증서 갱신 후에도 클라이언트가 계속 작동하는지 확인해야 합니다. 갱신 프로세스는 클라이언트 구성 방법에 따라 다릅니다.
클라이언트 인증서 및 키를 수동으로 프로비저닝하는 경우 새 클라이언트 인증서를 생성하고 갱신 기간 내에 클라이언트에서 새 인증서를 사용해야 합니다. 갱신 기간이 끝날 때까지 이 작업을 수행하지 않으면 클라이언트 애플리케이션이 클러스터에 연결할 수 없게 될 수 있습니다.
동일한 OpenShift 클러스터 및 네임스페이스 내에서 실행되는 워크로드의 경우 Secrets는 보안의 현재 상태에서 클라이언트 Pod가 키 저장소 및 신뢰 저장소를 구성하도록 볼륨으로 마운트할 수 있습니다. 이 프로세스에 대한 자세한 내용은 클러스터 CA를 신뢰하도록 내부 클라이언트 구성을 참조하십시오.
10.3.3. Cluster Operator가 생성한 CA 인증서 수동 갱신 링크 복사링크가 클립보드에 복사되었습니다!
Cluster Operator가 생성한 클러스터 및 클라이언트 CA 인증서는 해당 인증서 갱신 기간이 시작될 때 자동으로 갱신됩니다. 그러나 strimzi.io/force-renew 주석을 사용하여 인증서 갱신 기간이 시작되기 전에 이러한 인증서 중 하나 또는 둘 다를 수동으로 갱신할 수 있습니다. 보안상의 이유로 이 작업을 수행하거나 인증서의 갱신 또는 유효 기간을 변경한 경우 .
업데이트된 인증서는 이전 인증서와 동일한 개인 키를 사용합니다.
자체 CA 인증서를 사용하는 경우 force-renew 주석을 사용할 수 없습니다. 대신 자체 CA 인증서를 갱신하는 절차를 따르십시오.
사전 요구 사항
- Cluster Operator가 실행 중입니다.
- CA 인증서 및 개인 키가 설치된 Kafka 클러스터입니다.
절차
strimzi.io/force-renew주석을 갱신하려는 CA 인증서가 포함된 보안에 적용합니다.Expand 표 10.13. 인증서 갱신을 강제 적용하는 시크릿에 대한 주석 certificate Secret 주석 명령 클러스터 CA
KAFKA-CLUSTER-NAME-cluster-ca-cert
oc annotate secret KAFKA-CLUSTER-NAME-cluster-ca-cert strimzi.io/force-renew=trueClients CA
KAFKA-CLUSTER-NAME-clients-ca-cert
oc annotate secret KAFKA-CLUSTER-NAME-clients-ca-cert strimzi.io/force-renew=true다음 조정에서 Cluster Operator는 주석이 달린 보안에 대한 새 CA 인증서를 생성합니다.
유지 관리 시간 창이 구성된 경우 Cluster Operator는 다음 유지 관리 시간 기간 내에 첫 번째 조정 시 새 CA 인증서를 생성합니다.클라이언트 애플리케이션은 Cluster Operator가 업데이트한 클러스터 및 클라이언트 CA 인증서를 다시 로드해야 합니다.
CA 인증서가 유효한 기간을 확인합니다.
예를 들어
openssl명령을 사용합니다.oc get secret CA-CERTIFICATE-SECRET -o 'jsonpath={.data.CA-CERTIFICATE}' | base64 -d | openssl x509 -subject -issuer -startdate -enddate -nooutCA 인증서의 경우
KAFKA-CLUSTER-NAME-cluster-ca-cert 이고 클라이언트 CA 인증서의KAFKA-CLUSTER-NAME-clients-ca-cert인Secret의 이름입니다.CA-CERTIFICATE 는
jsonpath={.data.ca\.crt}와 같은 CA 인증서의 이름입니다.이 명령은 CA 인증서의 유효 기간인
notBefore및notAfter날짜를 반환합니다.예를 들어 클러스터 CA 인증서의 경우 다음을 수행합니다.
subject=O = io.strimzi, CN = cluster-ca v0 issuer=O = io.strimzi, CN = cluster-ca v0 notBefore=Jun 30 09:43:54 2020 GMT notAfter=Jun 30 09:43:54 2021 GMT시크릿에서 이전 인증서를 삭제합니다.
구성 요소가 새 인증서를 사용하는 경우 이전 인증서가 계속 활성화될 수 있습니다. 이전 인증서를 삭제하여 잠재적인 보안 위험을 제거합니다.
10.3.4. Cluster Operator에서 생성한 CA 인증서에서 사용하는 개인 키 교체 링크 복사링크가 클립보드에 복사되었습니다!
Cluster Operator에서 생성한 클러스터 CA 및 클라이언트 CA 인증서에서 사용하는 개인 키를 교체할 수 있습니다. 개인 키가 교체되면 Cluster Operator는 새 개인 키에 대한 새 CA 인증서를 생성합니다.
자체 CA 인증서를 사용하는 경우 force-replace 주석을 사용할 수 없습니다. 대신 자체 CA 인증서를 갱신하는 절차를 따르십시오.
사전 요구 사항
- Cluster Operator가 실행 중입니다.
- CA 인증서 및 개인 키가 설치된 Kafka 클러스터입니다.
절차
strimzi.io/force-replace주석을 갱신할 개인 키가 포함된 보안에 적용합니다.Expand 표 10.14. 개인 키 교체 명령 의 개인 키 Secret 주석 명령 클러스터 CA
CLUSTER-NAME-cluster-ca
oc annotate secret CLUSTER-NAME-cluster-ca strimzi.io/force-replace=trueClients CA
CLUSTER-NAME-clients-ca
oc annotate secret CLUSTER-NAME-clients-ca strimzi.io/force-replace=true
다음 조정에서 Cluster Operator는 다음을 수행합니다.
-
주석이 달린 보안에 대한 새 개인 키 생성
- 새 CA 인증서 생성
유지 관리 시간 창이 구성된 경우 Cluster Operator는 다음 유지 관리 시간 기간 내에 첫 번째 조정 시 새 개인 키 및 CA 인증서를 생성합니다.
클라이언트 애플리케이션은 Cluster Operator가 업데이트한 클러스터 및 클라이언트 CA 인증서를 다시 로드해야 합니다.
10.3.5. 자체 CA 인증서 갱신 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 Cluster Operator가 생성한 인증서 대신 사용 중인 CA 인증서를 갱신하는 방법을 설명합니다.
해당 CA 키를 변경하지 않는 경우 이 절차의 단계를 수행합니다. 그렇지 않으면 자체 CA 인증서에서 사용하는 개인 키를 교체 하려면 단계를 수행합니다.
자체 인증서를 사용하는 경우 Cluster Operator가 자동으로 갱신되지 않습니다. 따라서 인증서 갱신 기간에 이 절차를 수행하여 곧 만료되는 CA 인증서를 교체하는 것이 중요합니다.
이 절차에서는 PEM 형식의 CA 인증서 갱신을 설명합니다.
사전 요구 사항
- Cluster Operator가 실행 중입니다.
- 자체 CA 인증서 및 개인 키가 설치됩니다.
- PEM 형식의 새 클러스터 또는 클라이언트 X.509 인증서가 있습니다.
절차
CA 인증서의
시크릿을 업데이트합니다.기존 보안을 편집하여 새 CA 인증서를 추가하고 인증서 생성 주석 값을 업데이트합니다.
oc edit secret <ca_certificate_secret_name>< ca_certificate_secret_name >은
시크릿의 이름입니다. 이 이름은 클러스터 CA 인증서의 경우 <kafka_cluster_name> -cluster-ca-cert이고클라이언트 CA 인증서에 대한 <kafka_cluster_name> -clients-ca-cert입니다.다음 예제에서는
my-cluster라는 Kafka 클러스터와 연결된 클러스터 CA 인증서의 보안을 보여줍니다.클러스터 CA 인증서에 대한 보안 구성의 예
apiVersion: v1 kind: Secret data: ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0F...1 metadata: annotations: strimzi.io/ca-cert-generation: "0"2 labels: strimzi.io/cluster: my-cluster strimzi.io/kind: Kafka name: my-cluster-cluster-ca-cert #... type: Opaque새 CA 인증서를 base64로 인코딩합니다.
cat <path_to_new_certificate> | base64CA 인증서를 업데이트합니다.
이전 단계에서 base64로 인코딩된 CA 인증서를
data아래의ca.crt속성 값으로 복사합니다.CA 인증서 생성 주석의 값을 늘립니다.
strimzi.io/ca-cert-generation주석을 더 높은 증분 값으로 업데이트합니다. 예를 들어strimzi.io/ca-cert-generation=0을strimzi.io/ca-cert-generation=1으로 변경합니다. 보안에 주석이 없는 경우 값은0으로 처리되므로 값이1인 주석을 추가합니다.AMQ Streams에서 인증서를 생성하면 인증서 생성 주석이 Cluster Operator에 의해 자동으로 증가합니다. 자체 CA 인증서를 수동으로 갱신하려면 주석이 증가된 값으로 설정합니다. 이 주석에는 Cluster Operator가 Pod를 롤아웃하고 인증서를 업데이트할 수 있도록 현재 보안의 값보다 높은 값이 필요합니다.
strimzi.io/ca-cert-generation는 각 CA 인증서 갱신에 따라 증가해야 합니다.새 CA 인증서 및 인증서 생성 주석 값을 사용하여 보안을 저장합니다.
새 CA 인증서로 업데이트된 보안 구성의 예
apiVersion: v1 kind: Secret data: ca.crt: GCa6LS3RTHeKFiFDGBOUDYFAZ0F...1 metadata: annotations: strimzi.io/ca-cert-generation: "1"2 labels: strimzi.io/cluster: my-cluster strimzi.io/kind: Kafka name: my-cluster-cluster-ca-cert #... type: Opaque
다음 조정에서 Cluster Operator는 새 CA 인증서를 신뢰하기 위해 Zoo Cryostat, Kafka 및 기타 구성 요소의 롤링 업데이트를 수행합니다.
유지 관리 시간 창이 구성된 경우 Cluster Operator는 다음 유지 관리 기간 기간 내에 첫 번째 조정 시 Pod를 롤아웃합니다.
10.3.6. 자체 CA 인증서에서 사용하는 개인 키 교체 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 Cluster Operator가 생성한 인증서 및 키 대신 사용 중인 CA 인증서 및 개인 키를 갱신하는 방법을 설명합니다.
해당 CA 키도 변경하는 경우 이 절차의 단계를 수행합니다. 그렇지 않으면 단계를 수행하여 자체 CA 인증서를 갱신합니다.
자체 인증서를 사용하는 경우 Cluster Operator가 자동으로 갱신되지 않습니다. 따라서 인증서 갱신 기간에 이 절차를 수행하여 곧 만료되는 CA 인증서를 교체하는 것이 중요합니다.
이 절차에서는 PEM 형식의 CA 인증서 갱신을 설명합니다.
다음 단계를 수행하기 전에 새 CA 인증서의 CN(Common Name)이 현재 CA 인증서와 다른지 확인합니다. 예를 들어 Cluster Operator에서 인증서를 자동으로 갱신하면 v<version_number > 접미사가 추가되어 버전을 확인합니다. 갱신마다 다른 접미사를 추가하여 자체 CA 인증서로 동일한 작업을 수행합니다. 다른 키를 사용하여 새 CA 인증서를 생성하면 Secret 에 저장된 현재 CA 인증서가 유지됩니다.
사전 요구 사항
- Cluster Operator가 실행 중입니다.
- 자체 CA 인증서 및 개인 키가 설치됩니다.
- PEM 형식의 새 클러스터 또는 클라이언트 X.509 인증서 및 키가 있습니다.
절차
Kafka사용자 정의 리소스의 조정을 일시 중지합니다.OpenShift에서 사용자 정의 리소스에 주석을 달고
pause-reconciliation주석을true로 설정합니다.oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="true"예를 들어 이름이
my-cluster인Kafka사용자 정의 리소스의 경우 다음과 같습니다.oc annotate Kafka my-cluster strimzi.io/pause-reconciliation="true"사용자 정의 리소스의 상태 조건에
ReconciliationPaused: 변경 사항이 표시되는지 확인합니다.oc describe Kafka <name_of_custom_resource>유형조건은lastTransitionTime에서ReconciliationPaused로 변경됩니다.
CA 인증서의
시크릿을 업데이트합니다.기존 보안을 편집하여 새 CA 인증서를 추가하고 인증서 생성 주석 값을 업데이트합니다.
oc edit secret <ca_certificate_secret_name>< ca_certificate_secret_name >은
시크릿의 이름입니다. 이 이름은 클러스터 CA 인증서의 경우KAFKA-CLUSTER-NAME-cluster-ca입니다.-cert이고 클라이언트 CA 인증서의KAFKA-CLUSTER-NAME-clients-ca-cert다음 예제에서는
my-cluster라는 Kafka 클러스터와 연결된 클러스터 CA 인증서의 보안을 보여줍니다.클러스터 CA 인증서에 대한 보안 구성의 예
apiVersion: v1 kind: Secret data: ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0F...1 metadata: annotations: strimzi.io/ca-cert-generation: "0"2 labels: strimzi.io/cluster: my-cluster strimzi.io/kind: Kafka name: my-cluster-cluster-ca-cert #... type: Opaque현재 CA 인증서의 이름을 변경하여 유지합니다.
data아래의 현재ca.crt속성의 이름을ca- <date > .crt로 변경합니다. 여기서 <date>는 YEAR-MONTH-DAYTHOUR-MINUTE-SECONDZ 형식의 인증서 만료 날짜입니다. 예:ca-2022-01-26T17-32-00Z.crt:. 현재 CA 인증서를 유지하기 위해 속성 값을 그대로 둡니다.새 CA 인증서를 base64로 인코딩합니다.
cat <path_to_new_certificate> | base64CA 인증서를 업데이트합니다.
data아래에 새ca.crt속성을 생성하고 이전 단계에서 base64로 인코딩된 CA 인증서를ca.crt속성 값으로 복사합니다.CA 인증서 생성 주석의 값을 늘립니다.
strimzi.io/ca-cert-generation주석을 더 높은 증분 값으로 업데이트합니다. 예를 들어strimzi.io/ca-cert-generation=0을strimzi.io/ca-cert-generation=1으로 변경합니다. 보안에 주석이 없는 경우 값은0으로 처리되므로 값이1인 주석을 추가합니다.AMQ Streams에서 인증서를 생성하면 인증서 생성 주석이 Cluster Operator에 의해 자동으로 증가합니다. 자체 CA 인증서를 수동으로 갱신하려면 주석이 증가된 값으로 설정합니다. 이 주석에는 Cluster Operator가 Pod를 롤아웃하고 인증서를 업데이트할 수 있도록 현재 보안의 값보다 높은 값이 필요합니다.
strimzi.io/ca-cert-generation는 각 CA 인증서 갱신에 따라 증가해야 합니다.새 CA 인증서 및 인증서 생성 주석 값을 사용하여 보안을 저장합니다.
새 CA 인증서로 업데이트된 보안 구성의 예
apiVersion: v1 kind: Secret data: ca.crt: GCa6LS3RTHeKFiFDGBOUDYFAZ0F...1 ca-2022-01-26T17-32-00Z.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0F...2 metadata: annotations: strimzi.io/ca-cert-generation: "1"3 labels: strimzi.io/cluster: my-cluster strimzi.io/kind: Kafka name: my-cluster-cluster-ca-cert #... type: Opaque
새 CA 인증서에 서명하는 데 사용되는 CA 키의
시크릿을 업데이트합니다.기존 보안을 편집하여 새 CA 키를 추가하고 키 생성 주석 값을 업데이트합니다.
oc edit secret <ca_key_name>< ca_key_name >은 CA 키의 이름입니다. 이 키는 클러스터 CA 키의 경우 <
kafka_cluster_name> -cluster-ca, 클라이언트 CA 키의 <kafka_cluster_name> -clients-ca입니다.다음 예제에서는
my-cluster라는 Kafka 클러스터와 연결된 클러스터 CA 키의 시크릿을 보여줍니다.클러스터 CA 키의 시크릿 구성 예
apiVersion: v1 kind: Secret data: ca.key: SA1cKF1GFDzOIiPOIUQBHDNFGDFS...1 metadata: annotations: strimzi.io/ca-key-generation: "0"2 labels: strimzi.io/cluster: my-cluster strimzi.io/kind: Kafka name: my-cluster-cluster-ca #... type: OpaqueCA 키를 base64로 인코딩합니다.
cat <path_to_new_key> | base64CA 키를 업데이트합니다.
이전 단계에서 base64로 인코딩된 CA 키를
data아래의ca.key속성 값으로 복사합니다.CA 키 생성 주석의 값을 늘립니다.
strimzi.io/ca-key-generation주석을 더 높은 증분 값으로 업데이트합니다. 예를 들어strimzi.io/ca-key-generation=0을strimzi.io/ca-key-generation=1으로 변경합니다. 보안에 주석이 없는 경우0으로 처리되므로 값이1인 주석을 추가합니다.AMQ Streams가 인증서를 생성하면 Cluster Operator에 의해 키 생성 주석이 자동으로 증가합니다. 새 CA 키와 함께 자체 CA 인증서를 수동으로 갱신하려면 더 높은 증분 값으로 주석을 설정합니다. 이 주석에는 Cluster Operator가 Pod를 롤아웃하고 인증서 및 키를 업데이트할 수 있도록 현재 보안의 값보다 높은 값이 필요합니다.
strimzi.io/ca-key-generation는 각 CA 인증서 갱신에 따라 증가해야 합니다.
새 CA 키 및 키 생성 주석 값을 사용하여 시크릿을 저장합니다.
새 CA 키로 업데이트된 보안 구성의 예
apiVersion: v1 kind: Secret data: ca.key: AB0cKF1GFDzOIiPOIUQWERZJQ0F...1 metadata: annotations: strimzi.io/ca-key-generation: "1"2 labels: strimzi.io/cluster: my-cluster strimzi.io/kind: Kafka name: my-cluster-cluster-ca #... type: Opaque일시 중지에서 다시 시작합니다.
Kafka사용자 정의 리소스 조정을 다시 시작하려면pause-reconciliation주석을false로 설정합니다.oc annotate --overwrite Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="false"pause-reconciliation주석을 제거하여 동일한 작업을 수행할 수도 있습니다.oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation-
다음 조정에서 Cluster Operator는 새 CA 인증서를 신뢰하기 위해 Zoo Cryostat, Kafka 및 기타 구성 요소의 롤링 업데이트를 수행합니다. 롤링 업데이트가 완료되면 Cluster Operator가 새 CA 키로 서명한 새 서버 인증서를 생성하기 위해 새 업데이트를 시작합니다.
유지 관리 시간 창이 구성된 경우 Cluster Operator는 다음 유지 관리 기간 기간 내에 첫 번째 조정 시 Pod를 롤아웃합니다.