Kubernetes 보안 비밀에서 Cassandra 사용자 인증 정보 순환

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를 실행할 권한이 있어야 합니다.

  1. Cassandra 데이터베이스를 백업합니다. 이 백업은 순환 전 사용자 인증 정보를 복원할 수 있도록 하기 위한 것입니다. Cassandra 백업 개요를 참고하세요.
  2. 클러스터가 정상 상태이고 모든 Apigee 리소스가 실행 중이며 대기 중인 상태 변경사항이 없는지 확인합니다.

단일 리전 사용자 인증 정보 순환

  1. Kubernetes 보안 비밀에서 사용자 이름 및 비밀번호 설정에 따라 회전하려는 Cassandra 사용자 인증 정보를 보유하는 새 Kubernetes 보안 비밀을 Apigee 네임스페이스에 만듭니다.
  2. 순환 사전 확인을 실행합니다.
    1. 다음 템플릿을 사용하여 새 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: 이전 단계에서 만든 보안 비밀 이름입니다.
    2. 순환 YAML 파일을 적용하여 순환 사전 확인 작업을 트리거합니다.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 작업 상태를 확인하고 완료될 때까지 기다립니다.
      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
      
  3. 순환 사전 확인 작업이 완료되면 순환을 실행합니다.
    1. 순환 YAML 파일을 다음과 같이 변경합니다.
      • metadata.name을 사전 확인이 아님을 나타내는 이름(예: sr-1)으로 변경합니다.
      • spec.precheckfalse로 설정합니다.
      • spec.rotationId를 새 식별자로 변경합니다(예: rot-1).
    2. 파일을 다시 적용하여 순환을 수행합니다.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. 순환 작업이 완료되면 트래픽이 계속 올바르게 흐르는지 확인합니다.
  5. 트래픽의 유효성을 검사한 후 이전 보안 비밀을 삭제합니다.
    1. 순환 YAML 파일을 다음과 같이 변경합니다.
      • metadata.name을 정리 작업임을 나타내는 이름(예: sr-1-cleanup)으로 변경합니다.
      • spec.cassandra.jobTypeCLEANUP로 설정합니다.
    2. 파일을 다시 적용하여 정리를 실행합니다.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 작업 상태를 확인하고 완료될 때까지 기다립니다.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      정리 작업이 끝나면 순환 프로세스가 완료됩니다.

  6. Cassandra 데이터베이스를 백업합니다. 이 백업은 순환된 사용자 인증 정보를 복원할 수 있도록 하기 위한 것입니다.
  7. 이전 Cassandra 사용자 인증 정보 보안 비밀을 삭제합니다.

멀티 리전 사용자 인증 정보 순환

  1. 각 리전에서 Kubernetes 보안 비밀에서 사용자 이름 및 비밀번호 설정에 따라 회전하려는 Cassandra 사용자 인증 정보가 포함된 새 Kubernetes 보안 비밀을 Apigee 네임스페이스에 만듭니다.

    각 리전에서 사용자 인증 정보가 동일해야 합니다.

  2. 순환 사전 확인을 실행합니다.
    1. 다음 템플릿을 사용하여 새 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: 이전 단계에서 만든 보안 비밀 이름입니다.
    2. 첫 번째 리전에서 순환 YAML 파일을 적용하여 순환 사전 확인 작업을 트리거합니다.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 작업 상태를 확인하고 완료될 때까지 기다립니다.
      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
      
  3. 순환 사전 확인 작업이 완료되면 동일한 리전에서 순환을 실행합니다.
    1. 순환 YAML 파일을 다음과 같이 변경합니다.
      • metadata.name을 사전 확인이 아님을 나타내는 이름(예: sr-1)으로 변경합니다.
      • spec.precheckfalse로 설정합니다.
      • spec.rotationId를 새 식별자로 변경합니다(예: rot-1).
    2. 파일을 다시 적용하여 순환을 수행합니다.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. 순환 작업이 완료되면 트래픽이 계속 올바르게 흐르는지 확인합니다.
  5. 나머지 리전에 대해 순환 단계를 반복합니다.
  6. 트래픽의 유효성을 검사한 후 이전 보안 비밀을 삭제합니다. 단일 리전에서만 정리 작업을 실행하면 됩니다. 어떤 지역을 선택하든 관계가 없습니다.
    1. 순환 YAML 파일을 다음과 같이 변경합니다.
      • metadata.name을 정리 작업임을 나타내는 이름(예: sr-1-cleanup)으로 변경합니다.
      • spec.cassandra.jobTypeCLEANUP로 설정합니다.
    2. 파일을 다시 적용하여 정리를 실행합니다.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 작업 상태를 확인하고 완료될 때까지 기다립니다.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      정리 작업이 끝나면 순환 프로세스가 완료됩니다.

  7. Cassandra 데이터베이스를 백업합니다. 이 백업은 순환된 사용자 인증 정보를 복원할 수 있도록 하기 위한 것입니다.
  8. 이전 Cassandra 사용자 인증 정보 보안 비밀을 삭제합니다.

순환 롤백

각 리전에서 다음 단계를 수행합니다.

  1. 다음 템플릿을 사용하여 새 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: 보안 비밀 이름과 일치해야 합니다.
  2. 롤백을 적용합니다.
    kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
    
  3. 작업 상태를 확인하고 완료될 때까지 기다립니다.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    
  4. 롤백이 완료되면 트래픽이 계속 올바르게 흐르는지 확인합니다.
  5. 트래픽이 올바르게 흐르면 나머지 각 리전에서 롤백 프로세스를 반복합니다.
  6. 롤백을 완료하고 트래픽이 계속 올바르게 흐르는지 확인한 후 정리 프로세스를 시작합니다. 단일 리전에서만 정리 작업을 실행하면 됩니다. 어떤 지역을 선택하든 관계가 없습니다.

    순환 YAML 파일을 다음과 같이 변경합니다.

    • metadata.name을 정리 작업임을 나타내는 이름(예: sr-1-cleanup-rollback)으로 변경합니다.
    • spec.cassandra.jobTypeCLEANUP_ROLLBACK로 변경합니다.
  7. 파일을 적용하여 정리 작업을 트리거합니다.
    kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE