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.
- 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 recuperar as credenciais pré-alternadas. Consulte a vista geral da cópia de segurança do Cassandra.
 - 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
- 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.
 - Faça a pré-verificação da rotação.
    
- 
        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: ROTATEOnde:
- 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.
 
 - ROTATION_NAME: um nome para a tarefa de rotação, por exemplo: 
 - 
        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
 - 
    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
 
 - 
        Crie um novo recurso personalizado SecretRotation com o seguinte modelo:
        
 - 
    Quando a tarefa de pré-verificação da rotação estiver concluída, execute a rotação:
    
- Faça as seguintes alterações no ficheiro YAML de rotação:
        
- Altere o 
metadata.namepara um nome que indique que não se trata de uma pré-verificação, por exemplo:sr-1. - Defina 
spec.precheckcomofalse. - Altere 
spec.rotationIdpara um novo identificador, por exemplo:rot-1. 
 - Altere o 
 - Aplique novamente o ficheiro para fazer a rotação.
        
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
 
 - Faça as seguintes alterações no ficheiro YAML de rotação:
        
 - Assim que a tarefa de rotação estiver concluída, valide se o tráfego continua a fluir corretamente.
 - Depois de validar o tráfego, faça a limpeza dos segredos antigos.
    
    
- 
       Faça as seguintes alterações no ficheiro YAML de rotação:
        
- Altere o 
metadata.namepara um nome que indique que se trata de uma tarefa de limpeza, por exemplo:sr-1-cleanup. - Defina 
spec.cassandra.jobTypecomoCLEANUP. - Certifique-se de que a opção 
spec.precheckestá definida comofalse. 
 - Altere o 
 - Aplique novamente o ficheiro para fazer a limpeza.
        
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
 - 
        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.
 
 - 
       Faça as seguintes alterações no ficheiro YAML de rotação:
        
 - 
    Atualize o ficheiro de substituições e defina 
cassandra.auth.secretpara o novo nome do segredo (newSecretRef).cassandra: auth: secret: NEW_SECRET_REF - 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.
 - Elimine o segredo da credencial do Cassandra antigo.
 
Rotação de credenciais em várias regiões
- 
    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.
 - Faça a pré-verificação da rotação.
    
- 
        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: ROTATEOnde:
- 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.
 
 - ROTATION_NAME: um nome para a tarefa de rotação, por exemplo: 
 - 
        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
 - 
    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
 
 - 
        Crie um novo recurso personalizado SecretRotation com o seguinte modelo:
        
 - 
    Quando a tarefa de pré-verificação da rotação estiver concluída, faça a rotação na mesma região:
    
- Faça as seguintes alterações no ficheiro YAML de rotação:
        
- Altere o 
metadata.namepara um nome que indique que não se trata de uma pré-verificação, por exemplo:sr-1. - Defina 
spec.precheckcomofalse. - Altere 
spec.rotationIdpara um novo identificador, por exemplo:rot-1. 
 - Altere o 
 - Aplique novamente o ficheiro para fazer a rotação.
        
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
 
 - Faça as seguintes alterações no ficheiro YAML de rotação:
        
 - Assim que a tarefa de rotação estiver concluída, valide se o tráfego continua a fluir corretamente.
 - Repita os passos de rotação para as regiões restantes.
 - 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.
    
    
- 
       Faça as seguintes alterações no ficheiro YAML de rotação:
        
- Altere o 
metadata.namepara um nome que indique que se trata de uma tarefa de limpeza, por exemplo:sr-1-cleanup. - Defina 
spec.cassandra.jobTypecomoCLEANUP. - Certifique-se de que a opção 
spec.precheckestá definida comofalse. 
 - Altere o 
 - Aplique novamente o ficheiro para fazer a limpeza.
        
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
 - 
        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.
 
 - 
       Faça as seguintes alterações no ficheiro YAML de rotação:
        
 - 
    Atualize o ficheiro de substituições e defina 
cassandra.auth.secretpara o novo nome do segredo (newSecretRef).cassandra: auth: secret: NEW_SECRET_REF - 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.
 - Elimine o segredo da credencial do Cassandra antigo.
 
Reverter uma rotação
Execute os seguintes passos em cada região.
- 
    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: ROLLBACKOnde:
- 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. 
 - ROLLBACK_NAME: um nome para a tarefa de reversão, por exemplo: 
 - 
    Aplique a reversão:
    
kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
 - 
    Verifique o estado da tarefa e aguarde pela conclusão.
    
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
 - Quando as reversões estiverem concluídas, verifique se o tráfego continua a fluir corretamente.
 - Quando o tráfego estiver a fluir corretamente, repita o processo de reversão em cada região restante.
 - 
    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.namepara um nome que indique que se trata de uma tarefa de limpeza, por exemplo:sr-1-cleanup-rollback. - Alterar 
spec.cassandra.jobTypeparaCLEANUP_ROLLBACK. 
 - Altere 
 - 
    Aplique o ficheiro para acionar a tarefa de limpeza:
    
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
 - 
    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.
 - 
    Atualize o ficheiro de substituições e defina 
cassandra.auth.secretpara o nome secreto antigo (oldSecretRef).cassandra: auth: secret: OLD_SECRET_REF