Como fazer a rotação de credenciais do Cassandra em segredos do Kubernetes

Como fazer a rotação de secrets do Cassandra em secrets do Kubernetes

Este procedimento descreve a rotação de credenciais do Cassandra em segredos do Kubernetes no cluster. Para alternar credenciais no Hashicorp Vault, consulte Como alternar credenciais do Cassandra no Hashicorp Vault.

Com esse procedimento, você poderá alternar as credenciais do Cassandra usadas para serviços de produção da Apigee Hybrid sem causar inatividade, automatizando e acionar três tarefas:

  • Rotação de credenciais do usuário
  • Reversão da rotação
  • Limpeza de credenciais antigas e novas

Rotacionar secrets do Cassandra nos secrets do Kubernetes

Há seis pares de nome de usuário e senha de credenciais do Cassandra que podem ser alternados:

  • default (somente rotação de senha)
  • admin_user
  • ddl_user
  • dml_user
  • jmxuser
  • apigee

Preparar o ambiente para o rodízio de credenciais

Para realizar essas etapas, você precisa ter permissão para executar kubectl apply -f no cluster.

  1. Faça o backup do banco de dados do Cassandra. Esse backup é para garantir que a recuperação seja possível para credenciais pré-rotação. Consulte Visão geral do backup do Cassandra.
  2. Verifique se o cluster está em um estado íntegro, se todos os recursos da Apigee estão em execução e se não há mudanças de estado pendentes.

Rotação de credenciais de região única

  1. Crie um novo secret do Kubernetes no namespace da Apigee que contém as credenciais do usuário do Cassandra que você quer girar, seguindo Como definir nomes de usuário e senhas em um secret do Kubernetes.
  2. Faça a pré-verificação da rotação.
    1. Crie um novo recurso personalizado SecretRotation usando o seguinte modelo:
      # 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
      

      Em que:

      • ROTATION_NAME: um nome para o job de rotação, por exemplo, sr-1-precheck.
      • APIGEE_NAMESPACE: seu namespace da Apigee.
      • APIGEE_ORG: o ID da sua organização da Apigee.
      • ROTATION_ID: um identificador personalizado, por exemplo, rot-1-precheck.
      • TIMEOUT_MINUTES: opcional. Substitui o padrão (480m == 8 horas). <=0 significa tempo limite infinito.
      • OLD_SECRET_REF: o nome do secret que está sendo usado pelo apigeedatastore. Para encontrar essa informação, use o seguinte comando:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: o nome do secret criado na etapa anterior.
    2. Ative o job de pré-verificação de rotação aplicando o arquivo YAML de rotação:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Verifique o status do job e aguarde a conclusão.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Quando o job for concluído, a saída vai conter:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Quando o job de pré-verificação de rotação for concluído, realize a rotação:
    1. Faça as seguintes alterações no arquivo YAML de rotação:
      • Mude metadata.name para um nome que indique que não é uma pré-verificação, por exemplo: sr-1.
      • Defina spec.precheck como false.
      • Mude spec.rotationId para um novo identificador, por exemplo: rot-1.
    2. Aplique o arquivo novamente para realizar a rotação.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Quando o job de rotação for concluído, valide se o tráfego ainda está fluindo corretamente.
  5. Depois de validar o tráfego, faça a limpeza dos segredos antigos.
    1. Faça as seguintes alterações no arquivo YAML de rotação:
      • Mude metadata.name para um nome que indique que este é um job de limpeza, por exemplo: sr-1-cleanup.
      • Defina spec.cassandra.jobType como CLEANUP.
    2. Aplique o arquivo novamente para realizar a limpeza.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Verifique o status do job e aguarde a conclusão.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Quando o job de limpeza for concluído, o processo de rotação será finalizado.

  6. Faça um backup do banco de dados do Cassandra. Esse backup garante a recuperação das credenciais após a rotação.
  7. Exclua o secret de credencial do Cassandra antigo.

Rotação de credenciais em várias regiões

  1. em cada região, crie um novo secret do Kubernetes no namespace da Apigee que contém as credenciais do usuário do Cassandra que você quer alternar, seguindo Como definir nomes de usuário e senhas em um secret do Kubernetes.

    As credenciais precisam ser as mesmas em cada região.

  2. Faça a pré-verificação da rotação.
    1. Crie um novo recurso personalizado SecretRotation usando o seguinte modelo:
      # 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
      

      Em que:

      • ROTATION_NAME: um nome para o job de rotação, por exemplo, sr-1-precheck.
      • APIGEE_NAMESPACE: seu namespace da Apigee.
      • APIGEE_ORG: o ID da sua organização da Apigee.
      • ROTATION_ID: um identificador personalizado, por exemplo, rot-1-precheck.
      • TIMEOUT_MINUTES: opcional. Substitui o padrão (480m == 8 horas). <=0 significa tempo limite infinito.
      • OLD_SECRET_REF: o nome do secret que está sendo usado pelo apigeedatastore. Para encontrar essa informação, use o seguinte comando:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: o nome do secret criado na etapa anterior.
    2. Na primeira região, acione o job de pré-verificação de rotação aplicando o arquivo YAML de rotação:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Verifique o status do job e aguarde a conclusão.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Quando o job for concluído, a saída vai conter:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Quando o job de pré-verificação de rotação for concluído, faça a rotação na mesma região:
    1. Faça as seguintes alterações no arquivo YAML de rotação:
      • Mude metadata.name para um nome que indique que não é uma pré-verificação, por exemplo: sr-1.
      • Defina spec.precheck como false.
      • Mude spec.rotationId para um novo identificador, por exemplo: rot-1.
    2. Aplique o arquivo novamente para realizar a rotação.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Quando o job de rotação for concluído, valide se o tráfego ainda está fluindo corretamente.
  5. Repita as etapas de rotação para as regiões restantes.
  6. Depois de validar o tráfego, faça a limpeza dos segredos antigos. Você só precisa executar a limpeza em uma única região. Não importa qual região você escolher.
    1. Faça as seguintes alterações no arquivo YAML de rotação:
      • Mude metadata.name para um nome que indique que este é um job de limpeza, por exemplo: sr-1-cleanup.
      • Defina spec.cassandra.jobType como CLEANUP.
    2. Aplique o arquivo novamente para realizar a limpeza.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Verifique o status do job e aguarde a conclusão.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Quando o job de limpeza for concluído, o processo de rotação será finalizado.

  7. Faça um backup do banco de dados do Cassandra. Esse backup garante a recuperação das credenciais após a rotação.
  8. Exclua o secret de credencial do Cassandra antigo.

Como reverter uma rotação

Siga as etapas abaixo em cada região.

  1. Crie um novo recurso personalizado SecretRotation usando o seguinte modelo:
    # 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
    

    Em que:

    • ROLLBACK_NAME: um nome para o job de reversão, por exemplo, sr-1-rollback.
    • APIGEE_NAMESPACE: seu namespace da Apigee.
    • APIGEE_ORG: o ID da sua organização da Apigee.
    • ROTATION_ID: o ID da rotação atual que você está revertendo. Por exemplo: rot-1.
    • TIMEOUT_MINUTES: opcional. Substitui o padrão (480m == 8 horas). <=0 significa tempo limite infinito.
    • OLD_SECRET_REF: precisa corresponder ao nome secreto de oldSecretRef: no arquivo YAML de rotação usado no procedimento de rotação de uma única região ou rotação de várias regiões.
    • NEW_SECRET_REF: precisa corresponder ao nome secreto de newSecretRef: no arquivo YAML de rotação usado no procedimento de rotação de uma região ou rotação de várias regiões.
  2. Aplique a reversão:
    kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
    
  3. Verifique o status do job e aguarde a conclusão.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    
  4. Quando as reversão(ões) forem concluídas, verifique se o tráfego ainda está fluindo corretamente.
  5. Quando o tráfego estiver fluindo corretamente, repita o processo de reversão em cada região restante.
  6. Depois de concluir a reversão e verificar se o tráfego ainda está fluindo corretamente, inicie o processo de limpeza. Você só precisa executar a limpeza em uma única região. Não importa qual região você escolher.

    Faça as seguintes alterações no arquivo YAML de rotação:

    • Mude metadata.name para um nome que indique que este é um job de limpeza, por exemplo: sr-1-cleanup-rollback.
    • Altere spec.cassandra.jobType para CLEANUP_ROLLBACK.
  7. Aplique o arquivo para acionar o job de limpeza:
    kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE