Rodar credenciais do Cassandra em secrets do Kubernetes

Rotação de segredos do Cassandra em segredos do Kubernetes

Este procedimento descreve a rotação das credenciais do Cassandra em segredos do Kubernetes no seu cluster. Para rodar as credenciais no Hashicorp Vault, consulte o artigo Rodar as credenciais do Cassandra no Hashicorp Vault.

Este procedimento permite-lhe rodar as credenciais do Cassandra usadas para os serviços Apigee Hybrid de produção sem causar tempo de inatividade, automatizando e acionando três tarefas:

  • Rotação das credenciais de utilizador
  • Reversão da rotação
  • Limpeza de credenciais antigas e novas

Alterne os segredos do Cassandra nos segredos do Kubernetes

Existem seis pares de credenciais do Cassandra (nome de utilizador + palavra-passe) que podem ser rodados:

  • Predefinição*
  • Administrador
  • LDD
  • DML
  • JMX
  • Jolokia

Prepare-se para a rotação de credenciais

Para realizar estes passos, tem de ter autorização para executar o comando kubectl apply -f no cluster.

  1. Faça uma cópia de segurança da base de dados Cassandra. Esta cópia de segurança destina-se a garantir que é possível fazer a recuperação para credenciais pré-alternadas. Consulte a vista geral da cópia de segurança do Cassandra.
  2. Certifique-se de que o cluster está em bom estado, que todos os recursos do Apigee estão em execução e que não existem alterações de estado pendentes.

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

  1. Crie um novo segredo do Kubernetes no seu espaço de nomes do Apigee que contenha as credenciais do utilizador do Cassandra que quer rodar, seguindo o artigo Definir nomes de utilizador e palavras-passe num segredo do Kubernetes.
  2. Faça a pré-verificação da rotação.
    1. Crie um novo recurso personalizado SecretRotation com 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
      

      Onde:

      • ROTATION_NAME: um nome para a tarefa de rotação, por exemplo: sr-1-precheck.
      • APIGEE_NAMESPACE: o seu espaço de nomes do Apigee.
      • APIGEE_ORG: o ID da sua organização do Apigee.
      • ROTATION_ID: um identificador personalizado, por exemplo: rot-1-precheck.
      • TIMEOUT_MINUTES: opcional. Substitui a predefinição (480 m == 8 horas). <=0 significa limite de tempo infinito.
      • PRECHECK : aciona a execução de ensaio. Quando definido como verdadeiro, o processo de rotação passa por todos os passos, exceto a aplicação real das novas credenciais.
      • OLD_SECRET_REF: o nome secreto que está a ser usado atualmente pelo apigeedatastore. Pode encontrá-lo através do seguinte comando:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: o nome do segredo criado no passo anterior.
    2. Aplique o ficheiro YAML de rotação para acionar a tarefa de pré-verificação da rotação:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Verifique o estado da tarefa e aguarde pela conclusão.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Quando a tarefa estiver concluída, o resultado contém:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Quando a tarefa de pré-verificação da rotação estiver concluída, execute a rotação:
    1. Faça as seguintes alterações no ficheiro YAML de rotação:
      • Altere o metadata.name para um nome que indique que não se trata de uma pré-verificação, por exemplo: sr-1.
      • Defina spec.precheck como false.
      • Altere spec.rotationId para um novo identificador, por exemplo: rot-1.
    2. Aplique novamente o ficheiro para fazer a rotação.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Assim que a tarefa de rotação estiver concluída, valide se o tráfego continua a fluir corretamente.
  5. Depois de validar o tráfego, faça a limpeza dos segredos antigos.
    1. Faça as seguintes alterações no ficheiro YAML de rotação:
      • Altere o metadata.name para um nome que indique que se trata de uma tarefa de limpeza, por exemplo: sr-1-cleanup.
      • Defina spec.cassandra.jobType como CLEANUP.
      • Certifique-se de que a opção spec.precheck está definida como false.
    2. Aplique novamente o ficheiro para fazer a limpeza.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Verifique o estado da tarefa e aguarde pela conclusão.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Quando a tarefa de limpeza estiver concluída, o processo de rotação está concluído.

  6. Atualize o ficheiro de substituições e defina cassandra.auth.secret para o novo nome do segredo (newSecretRef).
    cassandra:
      auth:
        secret: NEW_SECRET_REF
  7. Faça uma cópia de segurança da base de dados Cassandra. Esta cópia de segurança destina-se a garantir que a recuperação é possível para credenciais pós-rotação.
  8. Elimine o segredo da credencial do Cassandra antigo.

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

  1. Em cada região, crie um novo segredo do Kubernetes no seu espaço de nomes do Apigee que contenha as credenciais de utilizador do Cassandra que quer rodar, seguindo o artigo Definir nomes de utilizadores e palavras-passe num segredo do Kubernetes.

    As credenciais têm de ser as mesmas em cada região.

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

      Onde:

      • ROTATION_NAME: um nome para a tarefa de rotação, por exemplo: sr-1-precheck.
      • APIGEE_NAMESPACE: o seu espaço de nomes do Apigee.
      • APIGEE_ORG: o ID da sua organização do Apigee.
      • ROTATION_ID: um identificador personalizado, por exemplo: rot-1-precheck.
      • TIMEOUT_MINUTES: opcional. Substitui a predefinição (480 m == 8 horas). <=0 significa limite de tempo infinito.
      • PRECHECK : aciona a execução de ensaio. Quando definido como verdadeiro, o processo de rotação passa por todos os passos, exceto a aplicação real das novas credenciais.
      • OLD_SECRET_REF: o nome secreto que está a ser usado atualmente pelo apigeedatastore. Pode encontrá-lo através do seguinte comando:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: o nome do segredo criado no passo anterior.
    2. Na primeira região, acione a tarefa de pré-verificação da rotação aplicando o ficheiro YAML de rotação:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Verifique o estado da tarefa e aguarde pela conclusão.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Quando a tarefa estiver concluída, o resultado contém:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Quando a tarefa de pré-verificação da rotação estiver concluída, faça a rotação na mesma região:
    1. Faça as seguintes alterações no ficheiro YAML de rotação:
      • Altere o metadata.name para um nome que indique que não se trata de uma pré-verificação, por exemplo: sr-1.
      • Defina spec.precheck como false.
      • Altere spec.rotationId para um novo identificador, por exemplo: rot-1.
    2. Aplique novamente o ficheiro para fazer a rotação.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Assim que a tarefa de rotação estiver concluída, valide se o tráfego continua a fluir corretamente.
  5. Repita os passos de rotação para as regiões restantes.
  6. Depois de validar o tráfego, faça a limpeza dos segredos antigos. Só tem de fazer a limpeza numa única região. Não importa a região que escolher.
    1. Faça as seguintes alterações no ficheiro YAML de rotação:
      • Altere o metadata.name para um nome que indique que se trata de uma tarefa de limpeza, por exemplo: sr-1-cleanup.
      • Defina spec.cassandra.jobType como CLEANUP.
      • Certifique-se de que a opção spec.precheck está definida como false.
    2. Aplique novamente o ficheiro para fazer a limpeza.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Verifique o estado da tarefa e aguarde pela conclusão.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Quando a tarefa de limpeza estiver concluída, o processo de rotação está concluído.

  7. Atualize o ficheiro de substituições e defina cassandra.auth.secret para o novo nome do segredo (newSecretRef).
    cassandra:
      auth:
        secret: NEW_SECRET_REF
  8. Faça uma cópia de segurança da base de dados Cassandra. Esta cópia de segurança destina-se a garantir que a recuperação é possível para credenciais pós-rotação.
  9. Elimine o segredo da credencial do Cassandra antigo.

Reverter uma rotação

Execute os seguintes passos em cada região.

  1. Crie um novo recurso personalizado SecretRotation com 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
    

    Onde:

    • ROLLBACK_NAME: um nome para a tarefa de reversão, por exemplo: sr-1-rollback.
    • APIGEE_NAMESPACE: o seu espaço de nomes do Apigee.
    • APIGEE_ORG: o ID da sua organização do Apigee.
    • ROTATION_ID: o ID da rotação atual para a qual está a reverter, por exemplo: rot-1.
    • TIMEOUT_MINUTES: opcional. Substitui a predefinição (480 m == 8 horas). <=0 significa limite de tempo infinito.
    • OLD_SECRET_REF: tem de corresponder ao nome secreto de oldSecretRef: no ficheiro YAML de rotação que usou no procedimento de rotação de região única ou rotação de várias regiões.
    • NEW_SECRET_REF: tem de corresponder ao nome do segredo para newSecretRef: no ficheiro YAML de rotação que usou no procedimento de rotação de região única 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 estado da tarefa e aguarde pela conclusão.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    
  4. Quando as reversões estiverem concluídas, verifique se o tráfego continua a fluir corretamente.
  5. Quando o tráfego estiver a fluir 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 continua a fluir corretamente, inicie o processo de limpeza. Só tem de fazer a limpeza numa única região. Não importa a região que escolher.

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

    • Altere metadata.name para um nome que indique que se trata de uma tarefa de limpeza, por exemplo: sr-1-cleanup-rollback.
    • Alterar spec.cassandra.jobType para CLEANUP_ROLLBACK.
  7. Aplique o ficheiro para acionar a tarefa de limpeza:
    kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
    
  8. Verifique o estado da tarefa e aguarde pela conclusão.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    

    Quando a tarefa de limpeza estiver concluída, o processo de reversão está concluído.

  9. Atualize o ficheiro de substituições e defina cassandra.auth.secret para o nome secreto antigo (oldSecretRef).
    cassandra:
      auth:
        secret: OLD_SECRET_REF