개요
이 절차에서는 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