Kubernetes 보안 비밀에서 Cassandra 보안 비밀 순환
이 절차에서는 클러스터의 Kubernetes 보안 비밀에서 Cassandra 사용자 인증 정보를 순환하는 방법을 설명합니다. Hashicorp Vault 내에서 사용자 인증 정보를 순환하는 방법은 Hashicorp Vault에서 Cassandra 사용자 인증 정보 순환을 참고하세요.
이 절차를 통해 세 가지 작업을 자동화하고 트리거하여 다운타임을 일으키지 않고 프로덕션 Apigee Hybrid 서비스에 사용되는 Cassandra 사용자 인증 정보를 순환할 수 있습니다.
- 사용자 인증 정보 순환
- 순환 롤백
- 이전 및 새 사용자 인증 정보 정리
Kubernetes 보안 비밀에서 Cassandra 보안 비밀 순환
순환할 수 있는 Cassandra 사용자 인증 정보의 사용자 이름-비밀번호 쌍은 6개입니다.
default
(비밀번호 순환만 해당)admin_user
ddl_user
dml_user
jmxuser
apigee
사용자 인증 정보 순환 준비
이 단계를 수행하려면 클러스터 내에서 kubectl apply -f
를 실행할 권한이 있어야 합니다.
- Cassandra 데이터베이스를 백업합니다. 이 백업은 순환 전 사용자 인증 정보를 복원할 수 있도록 하기 위한 것입니다. Cassandra 백업 개요를 참고하세요.
- 클러스터가 정상 상태이고 모든 Apigee 리소스가 실행 중이며 대기 중인 상태 변경사항이 없는지 확인합니다.
단일 리전 사용자 인증 정보 순환
- Kubernetes 보안 비밀에서 사용자 이름 및 비밀번호 설정에 따라 회전하려는 Cassandra 사용자 인증 정보를 보유하는 새 Kubernetes 보안 비밀을 Apigee 네임스페이스에 만듭니다.
- 순환 사전 확인을 실행합니다.
-
다음 템플릿을 사용하여 새 SecretRotation 맞춤 리소스를 만듭니다.
# rotation-k8s-secrets.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_NAME namespace: APIGEE_NAMESPACE spec: organizationId: APIGEE_ORG rotationId: ROTATION_ID timeoutMinutes: TIMEOUT_MINUTES # optional. 480 recommended. precheck: true cassandra: oldSecretRef: OLD_SECRET_REF newSecretRef: NEW_SECRET_REF jobType: ROTATE
각 항목의 의미는 다음과 같습니다.
- ROTATION_NAME: 순환 작업의 이름입니다(예:
sr-1-precheck
). - APIGEE_NAMESPACE: Apigee 네임스페이스입니다.
- APIGEE_ORG: Apigee 조직 ID입니다.
- ROTATION_ID: 맞춤 식별자입니다(예:
rot-1-precheck
). - TIMEOUT_MINUTES: 선택사항. 기본값을 재정의합니다 (480m == 8시간). <=0은 무한 제한 시간을 의미합니다.
- OLD_SECRET_REF:
apigeedatastore
에서 현재 사용 중인 보안 비밀 이름입니다. 다음 명령어를 사용하여 찾을 수 있습니다.kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
- NEW_SECRET_REF: 이전 단계에서 만든 보안 비밀 이름입니다.
- ROTATION_NAME: 순환 작업의 이름입니다(예:
-
순환 YAML 파일을 적용하여 순환 사전 확인 작업을 트리거합니다.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
작업 상태를 확인하고 완료될 때까지 기다립니다.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
작업이 완료되면 출력에 다음이 포함됩니다.
Status: Message: rotation complete State: complete
kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
-
다음 템플릿을 사용하여 새 SecretRotation 맞춤 리소스를 만듭니다.
-
순환 사전 확인 작업이 완료되면 순환을 실행합니다.
- 순환 YAML 파일을 다음과 같이 변경합니다.
metadata.name
을 사전 확인이 아님을 나타내는 이름(예:sr-1
)으로 변경합니다.spec.precheck
을false
로 설정합니다.spec.rotationId
를 새 식별자로 변경합니다(예:rot-1
).
- 파일을 다시 적용하여 순환을 수행합니다.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- 순환 YAML 파일을 다음과 같이 변경합니다.
- 순환 작업이 완료되면 트래픽이 계속 올바르게 흐르는지 확인합니다.
- 트래픽의 유효성을 검사한 후 이전 보안 비밀을 삭제합니다.
-
순환 YAML 파일을 다음과 같이 변경합니다.
metadata.name
을 정리 작업임을 나타내는 이름(예:sr-1-cleanup
)으로 변경합니다.spec.cassandra.jobType
을CLEANUP
로 설정합니다.
- 파일을 다시 적용하여 정리를 실행합니다.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
작업 상태를 확인하고 완료될 때까지 기다립니다.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
정리 작업이 끝나면 순환 프로세스가 완료됩니다.
-
순환 YAML 파일을 다음과 같이 변경합니다.
- Cassandra 데이터베이스를 백업합니다. 이 백업은 순환된 사용자 인증 정보를 복원할 수 있도록 하기 위한 것입니다.
- 이전 Cassandra 사용자 인증 정보 보안 비밀을 삭제합니다.
멀티 리전 사용자 인증 정보 순환
-
각 리전에서 Kubernetes 보안 비밀에서 사용자 이름 및 비밀번호 설정에 따라 회전하려는 Cassandra 사용자 인증 정보가 포함된 새 Kubernetes 보안 비밀을 Apigee 네임스페이스에 만듭니다.
각 리전에서 사용자 인증 정보가 동일해야 합니다.
- 순환 사전 확인을 실행합니다.
-
다음 템플릿을 사용하여 새 SecretRotation 맞춤 리소스를 만듭니다.
# rotation-k8s-secrets.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_NAME namespace: APIGEE_NAMESPACE spec: organizationId: APIGEE_ORG rotationId: ROTATION_ID timeoutMinutes: TIMEOUT_MINUTES # optional. 480 recommended. precheck: true cassandra: oldSecretRef: OLD_SECRET_REF newSecretRef: NEW_SECRET_REF jobType: ROTATE
각 항목의 의미는 다음과 같습니다.
- ROTATION_NAME: 순환 작업의 이름입니다(예:
sr-1-precheck
). - APIGEE_NAMESPACE: Apigee 네임스페이스입니다.
- APIGEE_ORG: Apigee 조직 ID입니다.
- ROTATION_ID: 맞춤 식별자입니다(예:
rot-1-precheck
). - TIMEOUT_MINUTES: 선택사항. 기본값을 재정의합니다 (480m == 8시간). <=0은 무한 제한 시간을 의미합니다.
- OLD_SECRET_REF:
apigeedatastore
에서 현재 사용 중인 보안 비밀 이름입니다. 다음 명령어를 사용하여 찾을 수 있습니다.kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
- NEW_SECRET_REF: 이전 단계에서 만든 보안 비밀 이름입니다.
- ROTATION_NAME: 순환 작업의 이름입니다(예:
-
첫 번째 리전에서 순환 YAML 파일을 적용하여 순환 사전 확인 작업을 트리거합니다.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
작업 상태를 확인하고 완료될 때까지 기다립니다.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
작업이 완료되면 출력에 다음이 포함됩니다.
Status: Message: rotation complete State: complete
kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
-
다음 템플릿을 사용하여 새 SecretRotation 맞춤 리소스를 만듭니다.
-
순환 사전 확인 작업이 완료되면 동일한 리전에서 순환을 실행합니다.
- 순환 YAML 파일을 다음과 같이 변경합니다.
metadata.name
을 사전 확인이 아님을 나타내는 이름(예:sr-1
)으로 변경합니다.spec.precheck
을false
로 설정합니다.spec.rotationId
를 새 식별자로 변경합니다(예:rot-1
).
- 파일을 다시 적용하여 순환을 수행합니다.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- 순환 YAML 파일을 다음과 같이 변경합니다.
- 순환 작업이 완료되면 트래픽이 계속 올바르게 흐르는지 확인합니다.
- 나머지 리전에 대해 순환 단계를 반복합니다.
- 트래픽의 유효성을 검사한 후 이전 보안 비밀을 삭제합니다. 단일 리전에서만 정리 작업을 실행하면 됩니다. 어떤 지역을 선택하든 관계가 없습니다.
-
순환 YAML 파일을 다음과 같이 변경합니다.
metadata.name
을 정리 작업임을 나타내는 이름(예:sr-1-cleanup
)으로 변경합니다.spec.cassandra.jobType
을CLEANUP
로 설정합니다.
- 파일을 다시 적용하여 정리를 실행합니다.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
작업 상태를 확인하고 완료될 때까지 기다립니다.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
정리 작업이 끝나면 순환 프로세스가 완료됩니다.
-
순환 YAML 파일을 다음과 같이 변경합니다.
- Cassandra 데이터베이스를 백업합니다. 이 백업은 순환된 사용자 인증 정보를 복원할 수 있도록 하기 위한 것입니다.
- 이전 Cassandra 사용자 인증 정보 보안 비밀을 삭제합니다.
순환 롤백
각 리전에서 다음 단계를 수행합니다.
-
다음 템플릿을 사용하여 새 SecretRotation 맞춤 리소스를 만듭니다.
# rollback-k8s-secrets.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROLLBACK_NAME namespace: APIGEE_NAMESPACE spec: organizationId: APIGEE_ORG rotationId: ROTATION_ID # match the current rotation. timeoutMinutes: TIMEOUT_MINUTES # optional. precheck: false cassandra: oldSecretRef: OLD_SECRET_REF # Must match the previous oldSecretRef. newSecretRef: NEW_SECRET_REF # Must match the previous newSecretRef. jobType: ROLLBACK
각 항목의 의미는 다음과 같습니다.
- ROLLBACK_NAME: 롤백 작업의 이름입니다(예:
sr-1-rollback
). - APIGEE_NAMESPACE: Apigee 네임스페이스입니다.
- APIGEE_ORG: Apigee 조직 ID입니다.
- ROTATION_ID: 롤백 중인 현재 순환의 ID입니다(예:
rot-1
). - TIMEOUT_MINUTES: 선택사항. 기본값을 재정의합니다 (480m == 8시간). <=0은 무한 제한 시간을 의미합니다.
- OLD_SECRET_REF: 단일 리전 회전 또는 멀티 리전 회전 절차에서 사용한 회전 YAML 파일의
oldSecretRef:
의 비밀 이름과 일치해야 합니다. - NEW_SECRET_REF: 단일 리전 회전 또는 다중 리전 회전 절차에서 사용한 회전 YAML 파일의
newSecretRef:
보안 비밀 이름과 일치해야 합니다.
- ROLLBACK_NAME: 롤백 작업의 이름입니다(예:
-
롤백을 적용합니다.
kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
-
작업 상태를 확인하고 완료될 때까지 기다립니다.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
- 롤백이 완료되면 트래픽이 계속 올바르게 흐르는지 확인합니다.
- 트래픽이 올바르게 흐르면 나머지 각 리전에서 롤백 프로세스를 반복합니다.
-
롤백을 완료하고 트래픽이 계속 올바르게 흐르는지 확인한 후 정리 프로세스를 시작합니다. 단일 리전에서만 정리 작업을 실행하면 됩니다. 어떤 지역을 선택하든 관계가 없습니다.
순환 YAML 파일을 다음과 같이 변경합니다.
metadata.name
을 정리 작업임을 나타내는 이름(예:sr-1-cleanup-rollback
)으로 변경합니다.spec.cassandra.jobType
를CLEANUP_ROLLBACK
로 변경합니다.
-
파일을 적용하여 정리 작업을 트리거합니다.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE