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.
- 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.
- 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
- 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.
- Faça a pré-verificação da rotação.
-
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.
- ROTATION_NAME: um nome para o job de rotação, por exemplo,
-
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
-
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
-
Crie um novo recurso personalizado SecretRotation usando o seguinte modelo:
-
Quando o job de pré-verificação de rotação for concluído, realize a rotação:
- 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
comofalse
. - Mude
spec.rotationId
para um novo identificador, por exemplo:rot-1
.
- Mude
- Aplique o arquivo novamente para realizar a rotação.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- Faça as seguintes alterações no arquivo YAML de rotação:
- Quando o job de rotação for concluído, valide se o tráfego ainda está fluindo corretamente.
- Depois de validar o tráfego, faça a limpeza dos segredos antigos.
-
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
comoCLEANUP
.
- Mude
- Aplique o arquivo novamente para realizar a limpeza.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
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.
-
Faça as seguintes alterações no arquivo YAML de rotação:
- Faça um backup do banco de dados do Cassandra. Esse backup garante a recuperação das credenciais após a rotação.
- Exclua o secret de credencial do Cassandra antigo.
Rotação de credenciais em várias regiões
-
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.
- Faça a pré-verificação da rotação.
-
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.
- ROTATION_NAME: um nome para o job de rotação, por exemplo,
-
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
-
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
-
Crie um novo recurso personalizado SecretRotation usando o seguinte modelo:
-
Quando o job de pré-verificação de rotação for concluído, faça a rotação na mesma região:
- 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
comofalse
. - Mude
spec.rotationId
para um novo identificador, por exemplo:rot-1
.
- Mude
- Aplique o arquivo novamente para realizar a rotação.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- Faça as seguintes alterações no arquivo YAML de rotação:
- Quando o job de rotação for concluído, valide se o tráfego ainda está fluindo corretamente.
- Repita as etapas de rotação para as regiões restantes.
- 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.
-
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
comoCLEANUP
.
- Mude
- Aplique o arquivo novamente para realizar a limpeza.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
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.
-
Faça as seguintes alterações no arquivo YAML de rotação:
- Faça um backup do banco de dados do Cassandra. Esse backup garante a recuperação das credenciais após a rotação.
- Exclua o secret de credencial do Cassandra antigo.
Como reverter uma rotação
Siga as etapas abaixo em cada região.
-
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.
- ROLLBACK_NAME: um nome para o job de reversão, por exemplo,
-
Aplique a reversão:
kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
-
Verifique o status do job e aguarde a conclusão.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
- Quando as reversão(ões) forem concluídas, verifique se o tráfego ainda está fluindo corretamente.
- Quando o tráfego estiver fluindo corretamente, repita o processo de reversão em cada região restante.
-
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
paraCLEANUP_ROLLBACK
.
- Mude
-
Aplique o arquivo para acionar o job de limpeza:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE