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 fazer a recuperação para 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: 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.
- ROTATION_NAME: um nome para a tarefa de rotação, por exemplo:
-
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
-
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.name
para um nome que indique que não se trata de uma pré-verificação, por exemplo:sr-1
. - Defina
spec.precheck
comofalse
. - Altere
spec.rotationId
para 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.name
para um nome que indique que se trata de uma tarefa de limpeza, por exemplo:sr-1-cleanup
. - Defina
spec.cassandra.jobType
comoCLEANUP
. - Certifique-se de que a opção
spec.precheck
está 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.secret
para 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: 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.
- 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.name
para um nome que indique que não se trata de uma pré-verificação, por exemplo:sr-1
. - Defina
spec.precheck
comofalse
. - Altere
spec.rotationId
para 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.name
para um nome que indique que se trata de uma tarefa de limpeza, por exemplo:sr-1-cleanup
. - Defina
spec.cassandra.jobType
comoCLEANUP
. - Certifique-se de que a opção
spec.precheck
está 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.secret
para 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: 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.
- 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.name
para um nome que indique que se trata de uma tarefa de limpeza, por exemplo:sr-1-cleanup-rollback
. - Alterar
spec.cassandra.jobType
paraCLEANUP_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.secret
para o nome secreto antigo (oldSecretRef
).cassandra: auth: secret: OLD_SECRET_REF