개요
이 절차에서는 Hashicorp Vault 내에서 Cassandra 사용자 인증 정보를 순환하는 방법을 설명합니다. 클러스터의 Kubernetes 보안 비밀에서 사용자 인증 정보를 순환하는 방법은 Kubernetes 보안 비밀에서 Cassandra 사용자 인증 정보 순환을 참조하세요.
이 기능을 사용하면 플랫폼 관리자가 다음을 수행할 수 있습니다.
- Hashicorp Vault에서 Cassandra 사용자 인증 정보를 순환합니다.
 - 비밀번호 순환 중 문제가 발생하면 Vault에 있는 이전 Cassandra 사용자 인증 정보로 롤백합니다.
 - 한 번에 하나의 리전에 대해 Cassandra 비밀번호를 순환하여 서비스 가용성에 대한 영향을 최소화하고 순환 프로세스를 효율적으로 제어할 수 있습니다.
 - 단일 리전의 순환 시작, 진행률 및 완료를 추적합니다.
 
이 기능은 Apigee Hybrid 1.13.1 이상에서 제공됩니다.
시작하기 전에
사용자 인증 정보 순환을 설정하기 전
- Cassandra 데이터베이스를 백업합니다. 이 백업은 순환 전 사용자 인증 정보를 복원할 수 있도록 하기 위한 것입니다.
 - 클러스터가 정상 상태인지 확인합니다(즉, 모든 Apigee 리소스가 실행 중이고 대기 중인 상태 변경사항이 없음).
 
단일 리전 설정
- 
    새 Cassandra 사용자 인증 정보에 대해 Apigee 네임스페이스에 새로운 
SecretProviderClassKubernetes 리소스를 만듭니다. 사용할 템플릿은 Hashicorp Vault에 Cassandra 보안 비밀 저장을 참조하세요. 이렇게 하면 Vault 역할이 Kubernetes 네임스페이스 내의 보안 비밀에 액세스할 수 있습니다. - 
    다음 템플릿을 사용하여 새 
SecretRotation커스텀 리소스를 만듭니다.# rotation.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_PROCESS_NAME namespace: APIGEE_NAMESPACE spec: organizationId: ORG_NAME rotationId: ROTATION_ID timeoutMinutes: 480 # optional. overrides the default (480m == 8hr). # less than or equal to 0 means infinite timeout. precheck: true cassandra: oldSecretProviderClass: OLD_SPC_NAME newSecretProviderClass: NEW_SPC_NAME jobType: ROTATE- ROTATION_PROCESS_NAME: 순환 작업의 고유 이름입니다. 순환 사전 확인 작업 및 순환 작업에 대해 
metadata.name을 고유한 값으로 설정해야 합니다. 예를 들어sr-1-precheck다음에sr-1과 같이 설정할 수 있습니다. - ROTATION_ID: 
spec.rotationId를 커스텀 식별자(예:rotation-1-precheck)로 설정합니다. - NEW_SPC_NAME: 
spec.cassandra.newSecretProviderClass를 이전 단계에서 만든 새로운 보안 비밀 제공자 클래스 이름으로 설정합니다. - OLD_SPC_NAME: 
spec.cassandra.oldSecretProviderClass를ApigeeDatastore에서 현재 사용 중인 SPC 이름으로 설정합니다. 
 - ROTATION_PROCESS_NAME: 순환 작업의 고유 이름입니다. 순환 사전 확인 작업 및 순환 작업에 대해 
 - 
    
rotation.yaml파일을 적용하여 순환 사전 확인 작업을 트리거합니다.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
 - 
    사전 확인 작업이 완료되었을 때 확인할 작업 상태를 확인합니다.
    
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
 - 
    순환 사전 확인 작업이 완료되면 
metadata.name값을 변경하고spec.precheck를false로 설정합니다. 파일을 다시 적용하여 순환을 수행합니다.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
 - 
    순환 작업이 완료되고 트래픽이 계속 올바르게 작동하는지 확인되었으면 다음 두 단계에 따라 프로세스를 정리합니다.
    
- 
        
metadata.name의 값을 업데이트하고spec.cassandra.jobType을CLEANUP으로 설정합니다. - 
        파일을 적용하여 정리 작업을 트리거합니다.
        
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
 
정리 작업이 끝나면 순환 프로세스가 완료됩니다.
 - 
        
 - 
    재정의 파일을 업데이트하고 
cassandra.auth.secretProviderClass를 새 보안 비밀 제공자 클래스(newSecretProviderClass)로 설정합니다.cassandra: auth: secretProviderClass: NEW_SPC_NAME - Cassandra 데이터베이스를 백업합니다. 이 백업은 순환된 사용자 인증 정보를 복원할 수 있도록 하기 위한 것입니다.
 - Vault에서 이전 Cassandra 사용자 인증 정보, 역할, 정책을 삭제합니다.
 
멀티 리전 설정
멀티 리전 설정 절차는 첫 번째 리전 설정과 남은 리전 설정의 두 섹션으로 구분됩니다.
- 후속 리전을 시작하기 전에 첫 번째 리전에서 다음 단계를 완료합니다.
    
- 
        새 Cassandra 사용자 인증 정보에 대해 
APIGEE_NAMESPACE네임스페이스에 새로운SecretProviderClassKubernetes 리소스를 만듭니다. 사용할 템플릿은 Hashicorp Vault에 Cassandra 보안 비밀 저장을 참조하세요. 이렇게 하면 Vault 역할이 Kubernetes 네임스페이스 내의 보안 비밀에 액세스할 수 있습니다. - 
        다음 템플릿을 사용하여 새 
SecretRotation커스텀 리소스를 만듭니다.# rotation.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_PROCESS_NAME namespace: APIGEE_NAMESPACE spec: organizationId: ORG_NAME rotationId: ROTATION_ID timeoutMinutes: -1 # this value is required and should not be changed. precheck: true cassandra: oldSecretProviderClass: OLD_SPC_NAME newSecretProviderClass: NEW_SPC_NAME jobType: ROTATE- ROTATION_PROCESS_NAME: 순환 작업의 고유 이름입니다. 순환 사전 확인 작업 및 순환 작업에 대해 
metadata.name을 고유한 값으로 설정해야 합니다. 예를 들어sr-1-precheck다음에sr-1과 같이 설정할 수 있습니다. - ROTATION_ID: 
spec.rotationId를 커스텀 식별자(예:rotation-1-precheck)로 설정합니다. - NEW_SPC_NAME: 
spec.cassandra.newSecretProviderClass를 이전 단계에서 만든 새로운 보안 비밀 제공자 클래스 이름으로 설정합니다. - OLD_SPC_NAME: 
spec.cassandra.oldSecretProviderClass를ApigeeDatastore에서 현재 사용 중인 SPC 이름으로 설정합니다. 
 - ROTATION_PROCESS_NAME: 순환 작업의 고유 이름입니다. 순환 사전 확인 작업 및 순환 작업에 대해 
 - 
        
rotation.yaml파일을 적용하여 순환 사전 확인 작업을 트리거합니다.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
 - 
        사전 확인 작업이 완료되었을 때 확인할 작업 상태를 확인합니다.
        
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
 - 
        순환 사전 확인 작업이 완료된 후 다음 안내를 따르세요.
        
metadata.name값을 변경합니다(예:sr-1-precheck에서sr-1로).spec.precheck를false로 설정하여 사전 확인을 사용 중지하고 순환을 실행합니다.spec.rotationId를 새 식별자로 설정합니다(예:rotation-1).
 - 
        파일을 다시 적용하여 순환을 수행합니다.
        
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
 - 
        
SecretRotation상태를 확인하고complete가 될 때까지 기다립니다.kubectl -n APIGEE_NAMESPACE get sr SR_NAME
 
 - 
        새 Cassandra 사용자 인증 정보에 대해 
 - 
    이후 각 리전에서 다음 단계를 완료합니다.
    
- 새 Cassandra 사용자 인증 정보에 대해 Apigee 네임스페이스에 새로운 
SecretProviderClassKubernetes 리소스를 만듭니다. 사용할 템플릿은 Hashicorp Vault에 Cassandra 보안 비밀 저장을 참조하세요. 1a단계와 동일한 정의여야 합니다. overrides.yaml을 업데이트하고rotation.yaml파일의spec.cassandra.newSecretProviderClass값과 일치하도록cassandra.auth.secretProviderClass를 설정합니다.cassandra: auth: secretProviderClass: NEW_SPC_NAME- 연산자 차트를 적용합니다.
        
helm upgrade operator apigee-operator/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
 - 
        새 
ReplicaSet가 생성됩니다. 새 컨트롤러 관리자 포드가 새 SPC를 사용하는지 확인합니다.export POD=NEW_CONTROLLER_MANAGER_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'결과는
rotation.yaml에서spec.cassandra.newSecretProviderClass에 설정한 값과 일치해야 합니다. 예를 들면 다음과 같습니다.kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'my-new-spc - 데이터 스토어 차트를 적용합니다.
        
helm upgrade datastore apigee-datastore/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
 - 데이터 스토어가 출시 상태로 전환됩니다. 데이터 스토어의 출시가 완료되고 실행 상태가 될 때까지 기다립니다.
        
kubectl -n APIGEE_NAMESPACE get apigeedatastore DATASTORE_NAME
대부분의 설치에서 DATASTORE_NAME은
default입니다. - 새 데이터 스토어 포드에서 새 SPC를 사용하는지 확인합니다.
        
export POD=NEW_DATASTORE_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'결과는
rotation.yaml에서spec.cassandra.newSecretProviderClass에 설정한 값과 일치해야 합니다. 예를 들면 다음과 같습니다.kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'my-new-spc - 조직 및 환경 출시가 완료되고 실행 중 상태로 돌아갈 때까지 기다립니다.
        
kubectl -n APIGEE_NAMESPACE get apigeeorg ORG_NAME
kubectl -n APIGEE_NAMESPACE get apigeeenv ENV_NAME - 새 MART, 런타임, 동기화기 포드가 새 SPC를 사용하는지 확인합니다.
        
export POD=NEW_MART_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'export POD=NEW_RUNTIME_POD_NAMEkubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'export POD=NEW_SYNCHRONIZER_POD_NAMEkubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'결과는
rotation.yaml에서spec.cassandra.newSecretProviderClass에 설정한 값과 일치해야 합니다. 예를 들면 다음과 같습니다.kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'my-new-spc 
 - 새 Cassandra 사용자 인증 정보에 대해 Apigee 네임스페이스에 새로운 
 - 
    모든 리전의 단계를 완료하고 트래픽이 올바르게 작동하는지 확인한 후 다음 두 단계에 따라 첫 번째 리전에서 프로세스를 정리합니다.
    
- 
        첫 번째 리전에서 
metadata.name값을 업데이트하고spec.cassandra.jobType을CLEANUP으로 설정합니다. - 
        파일을 적용하여 정리 작업을 트리거합니다.
        
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
 - 작업 상태를 확인하고 작업 로그를 통해 정리 작업이 완료되었는지 확인합니다.
 
정리 작업이 끝나면 순환 프로세스가 완료됩니다.
 - 
        첫 번째 리전에서 
 - 
    재정의 파일을 업데이트하고 
cassandra.auth.secretProviderClass를 새 보안 비밀 제공자 클래스(newSecretProviderClass)로 설정합니다.cassandra: auth: secretProviderClass: NEW_SPC_NAME - Cassandra 데이터베이스를 백업합니다. 이 백업은 순환된 사용자 인증 정보를 복원할 수 있도록 하기 위한 것입니다.
 - Vault에서 이전 Cassandra 사용자 인증 정보, 역할, 정책을 삭제합니다.
 
순환 롤백
멀티 리전의 경우 각 리전에서 롤백을 수행합니다.
- 
    다음 템플릿을 사용하여 새 SecretRotation 커스텀 리소스를 만듭니다.
    
# rollback-rotation.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: oldSecretProviderClass: OLD_SPC_NAME # Must match the previous oldSecretProviderClass. newSecretProviderClass: NEW_SPC_NAME # Must match the previous newSecretProviderClass. 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_SPC_NAME: 단일 리전 설정 또는 멀티 리전 설정 프러시저에서 사용한 순환 YAML 파일의 
oldSecretProviderClass:보안 비밀 이름과 일치해야 합니다. - NEW_SPC_NAME: 단일 리전 설정 또는 멀티 리전 설정 프러시저에서 사용한 순환 YAML 파일의 
newSecretProviderClass:보안 비밀 이름과 일치해야 합니다. 
 - 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
 - 
    작업 상태를 확인하고 완료될 때까지 기다립니다.
    
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
정리 작업이 끝나면 롤백 프로세스가 완료됩니다.
 - 
    재정의 파일을 업데이트하고 
cassandra.auth.secretProviderClass를 이전 보안 비밀 제공자 클래스(oldSecretProviderClass)로 설정합니다.cassandra: auth: secretProviderClass: OLD_SPC_NAME