Como fazer a rotação de secrets do Cassandra em secrets do Kubernetes
Este procedimento descreve como fazer a rotação de credenciais do Cassandra em secrets do Kubernetes no seu cluster. Para fazer a rotação de credenciais no Hashicorp Vault, consulte Como fazer a rotação de credenciais do Cassandra no Hashicorp Vault.
Esse procedimento permite alternar as credenciais do Cassandra usadas para serviços de produção da Apigee Hybrid sem causar inatividade, automatizando e acionando três tarefas:
- Rotação de credenciais de usuário
- Reversão da rotação
- Limpeza de credenciais antigas e novas
Fazer a rotação de secrets do Cassandra em secrets do Kubernetes
Há seis pares de credenciais do Cassandra (nome de usuário + senha) que podem ser substituídos:
- Padrão*
- Administrador
- DDL
- DML
- JMX
- Jolokia
Preparar o ambiente para o rodízio de credenciais
Para executar 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 contenha as credenciais de 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 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 organização da Apigee.
- ROTATION_ID: um identificador personalizado, por exemplo,
rot-1-precheck
. - TIMEOUT_MINUTES: opcional. Substitui o padrão (480m == 8hr). <=0 significa tempo limite infinito.
- PRECHECK : aciona a execução de simulação. Quando definido como "true", o processo de rotação passa por todas as etapas, exceto a aplicação das novas credenciais.
- OLD_SECRET_REF: o nome do secret que o
apigeedatastore
está usando. Para encontrar esse valor, 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 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:
- Faça as seguintes mudanças no arquivo YAML de rotação:
- Mude o
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 o
- Aplique o arquivo novamente para realizar a rotação.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- Faça as seguintes mudanças no arquivo YAML de rotação:
- Depois que 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 secrets antigos.
-
Faça as seguintes mudanças no arquivo YAML de rotação:
- Mude o
metadata.name
para um nome que indique que é um job de limpeza. Por exemplo,sr-1-cleanup
. - Defina
spec.cassandra.jobType
comoCLEANUP
. - Verifique se
spec.precheck
está definido comofalse
.
- Mude o
- 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 mudanças no arquivo YAML de rotação:
-
Atualize o arquivo de substituições e defina
cassandra.auth.secret
como o novo nome do secret (newSecretRef
).cassandra: auth: secret: NEW_SECRET_REF
- 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 da credencial antiga do Cassandra.
Rotação de credenciais multirregional
-
Em cada região, crie um novo secret do Kubernetes no namespace da Apigee que contenha as credenciais de usuário do Cassandra que você quer girar, 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 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 organização da Apigee.
- ROTATION_ID: um identificador personalizado, por exemplo,
rot-1-precheck
. - TIMEOUT_MINUTES: opcional. Substitui o padrão (480m == 8hr). <=0 significa tempo limite infinito.
- PRECHECK : aciona a execução de simulação. Quando definido como "true", o processo de rotação passa por todas as etapas, exceto a aplicação das novas credenciais.
- OLD_SECRET_REF: o nome do secret que o
apigeedatastore
está usando. Para encontrar esse valor, 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, 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 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 mudanças no arquivo YAML de rotação:
- Mude o
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 o
- Aplique o arquivo novamente para realizar a rotação.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- Faça as seguintes mudanças no arquivo YAML de rotação:
- Depois que 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 secrets antigos. Você só precisa fazer a limpeza em uma única região. Não importa qual região você escolher.
-
Faça as seguintes mudanças no arquivo YAML de rotação:
- Mude o
metadata.name
para um nome que indique que é um job de limpeza. Por exemplo,sr-1-cleanup
. - Defina
spec.cassandra.jobType
comoCLEANUP
. - Verifique se
spec.precheck
está definido comofalse
.
- Mude o
- 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 mudanças no arquivo YAML de rotação:
-
Atualize o arquivo de substituições e defina
cassandra.auth.secret
como o novo nome do secret (newSecretRef
).cassandra: auth: secret: NEW_SECRET_REF
- 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 da credencial antiga do Cassandra.
Como reverter uma rotação
Siga as etapas abaixo em cada região.
-
Crie um 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 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 == 8hr). <=0 significa tempo limite infinito.
- OLD_SECRET_REF: precisa corresponder ao nome do secret para
oldSecretRef:
no arquivo YAML de rotação usado no procedimento de rotação em uma única região ou rotação em várias regiões. - NEW_SECRET_REF: precisa corresponder ao nome do secreto para
newSecretRef:
no arquivo YAML de rotação usado no procedimento de rotação em uma única região ou rotação multirregional.
- ROLLBACK_NAME: um nome para o job de reversão. Por exemplo,
-
Aplique o rollback:
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 os rollbacks forem concluídos, 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 o rollback e verificar se o tráfego ainda está fluindo corretamente, inicie o processo de limpeza. Você só precisa fazer a limpeza em uma única região. Não importa qual região você escolher.
Faça as seguintes mudanças 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
-
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 reversão será finalizado.
-
Atualize o arquivo de substituições e defina
cassandra.auth.secret
como o nome antigo do secret (oldSecretRef
).cassandra: auth: secret: OLD_SECRET_REF