Visão geral
Com esse recurso, os administradores da plataforma podem fazer o seguinte:
- Alternar as credenciais do Cassandra no Hashicorp Vault.
- Reverter para as credenciais anteriores do Cassandra no Vault em caso de problemas durante a rotação de senha.
- Alternar a senha do Cassandra para uma região por vez, garantindo o impacto mínimo na disponibilidade do serviço e mantendo o controle sobre o processo de rotação.
- Acompanhar o início, o andamento e a conclusão da rotação de uma única região.
Esse recurso está disponível na Apigee híbrida 1.13.1 e em versões mais recentes.
Antes de começar
Antes de configurar a rotação de credenciais, siga estas etapas:
- 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.
- Verifique se o cluster está em um estado íntegro (ou seja, se todos os recursos da Apigee estão em execução e se não há mudanças de estado pendentes).
Configuração de região única
-
Crie um novo recurso
SecretProviderClassdo Kubernetes no namespace da Apigee para as novas credenciais do Cassandra. Consulte Como armazenar secrets do Cassandra no Hashicorp Vault para conferir um modelo. Isso permite que uma função do Vault acesse segredos nos namespaces do Kubernetes. -
Crie um novo recurso personalizado
SecretRotationusando o seguinte modelo:# rotation.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_PROCESS_NAME namespace: APIGEE_NAMESPACE spec: organizationId: ORG_NAME rotationId: ROTATION_ID timeoutMinutes: 480 # optional. overrides the default (480m == 8hr). # less than or equal to 0 means infinite timeout. precheck: true cassandra: oldSecretProviderClass: OLD_SPC_NAME newSecretProviderClass: NEW_SPC_NAME jobType: ROTATE- ROTATION_PROCESS_NAME: um nome exclusivo para o job de rotação. É necessário definir
metadata.namecomo um valor exclusivo para o job de pré-verificação de rotação e novamente para o job de rotação. Por exemplo,sr-1-precheckseguido desr-1. - ROTATION_ID: defina
spec.rotationIdcomo um identificador personalizado, por exemplo,rotation-1-precheck. - NEW_SPC_NAME: defina
spec.cassandra.newSecretProviderClasscomo o novo nome da classe do provedor de secrets que você criou na etapa anterior. - OLD_SPC_NAME: defina
spec.cassandra.oldSecretProviderClasscomo o nome do SPC que oApigeeDatastoreestá usando.
- ROTATION_PROCESS_NAME: um nome exclusivo para o job de rotação. É necessário definir
-
Ative o job de pré-verificação de rotação aplicando o arquivo
rotation.yaml.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Verifique o status do job para saber quando a pré-verificação for concluída.
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
Quando o job de pré-verificação de rotação for concluído, mude o valor de
metadata.namee definaspec.precheckcomofalse. Aplique o arquivo novamente para realizar a rotação.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Depois que o job de rotação for concluído e você tiver validado que o tráfego ainda está fluindo corretamente, limpe o processo com estas duas etapas:
-
Atualize o valor de
metadata.namee definaspec.cassandra.jobTypecomoCLEANUP. -
Ative o job de limpeza aplicando o arquivo.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
Quando o job de limpeza for concluído, o processo de rotação será finalizado.
-
Atualize o valor de
- Faça o backup do banco de dados do Cassandra. Esse backup garante a recuperação das credenciais após a rotação.
- Exclua as credenciais, a função e a política do Cassandra antigo do Vault.
Configuração multirregional
Os procedimentos de configuração multirregional são divididos em duas seções: configuração da primeira região e configuração das demais regiões.
- Conclua as etapas a seguir na primeira região antes de iniciar as regiões seguintes.
-
Crie um novo recurso
SecretProviderClassdo Kubernetes no namespaceAPIGEE_NAMESPACEpara as novas credenciais do Cassandra. Consulte Como armazenar secrets do Cassandra no Hashicorp Vault para conferir um modelo. Isso permite que uma função do Vault acesse segredos nos namespaces do Kubernetes. -
Crie um novo recurso personalizado
SecretRotationusando o seguinte modelo:# rotation.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_PROCESS_NAME namespace: APIGEE_NAMESPACE spec: organizationId: ORG_NAME rotationId: ROTATION_ID timeoutMinutes: -1 # this value is required and should not be changed. precheck: true cassandra: oldSecretProviderClass: OLD_SPC_NAME newSecretProviderClass: NEW_SPC_NAME jobType: ROTATE- ROTATION_PROCESS_NAME: um nome exclusivo para o job de rotação. É necessário definir
metadata.namecomo um valor exclusivo para o job de pré-verificação de rotação e novamente para o job de rotação. Por exemplo,sr-1-precheckseguido desr-1. - ROTATION_ID: defina
spec.rotationIdcomo um identificador personalizado, por exemplo,rotation-1-precheck. - NEW_SPC_NAME: defina
spec.cassandra.newSecretProviderClasscomo o novo nome da classe do provedor de secrets que você criou na etapa anterior. - OLD_SPC_NAME: defina
spec.cassandra.oldSecretProviderClasscomo o nome do SPC que oApigeeDatastoreestá usando.
- ROTATION_PROCESS_NAME: um nome exclusivo para o job de rotação. É necessário definir
-
Ative o job de pré-verificação de rotação aplicando o arquivo
rotation.yaml.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Verifique o status do job para saber quando a pré-verificação for concluída.
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
Quando o job de pré-verificação de rotação for concluído, faça o seguinte:
- Mude o valor de
metadata.name, por exemplo, desr-1-precheckparasr-1. - Defina
spec.precheckcomofalsepara desativar a pré-verificação e realizar a rotação. - Defina
spec.rotationIdcomo um novo identificador, por exemplo,rotation-1.
- Mude o valor de
-
Aplique o arquivo novamente para realizar a rotação.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Verifique o estado do
SecretRotatione aguarde até que ele sejacomplete.kubectl -n APIGEE_NAMESPACE get sr SR_NAME
-
Crie um novo recurso
-
Em cada região subsequente, siga estas etapas:
- Crie um novo recurso
SecretProviderClassdo Kubernetes no namespace da Apigee para as novas credenciais do Cassandra. Consulte Como armazenar secrets do Cassandra no Hashicorp Vault para conferir um modelo. Essa definição precisa ser igual à da etapa 1a. - Atualize o
overrides.yamle definacassandra.auth.secretProviderClasspara corresponder ao valor despec.cassandra.newSecretProviderClassno arquivorotation.yaml.cassandra: auth: secretProviderClass: NEW_SPC_NAME - Aplique o gráfico do operador:
helm upgrade operator apigee-operator/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
-
Um novo
ReplicaSetserá criado. Verifique se os novos pods de controller-manager estão usando o novo SPC:export POD=NEW_CONTROLLER_MANAGER_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'O resultado precisa corresponder ao valor definido para
spec.cassandra.newSecretProviderClassemrotation.yaml, por exemplo:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'my-new-spc - Aplique o gráfico do repositório de dados:
helm upgrade datastore apigee-datastore/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
- O repositório de dados vai entrar em um estado de lançamento. Aguarde até que o repositório de dados termine o lançamento e esteja em execução.
kubectl -n APIGEE_NAMESPACE get apigeedatastore DATASTORE_NAME
DATASTORE_NAME é
defaultna maioria das instalações. - Verifique se os novos pods de repositório de dados estão usando o novo SPC:
export POD=NEW_DATASTORE_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'O resultado precisa corresponder ao valor definido para
spec.cassandra.newSecretProviderClassemrotation.yaml, por exemplo:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'my-new-spc - Aguarde até que a organização e os ambientes terminem de ser lançados e voltem ao estado de execução.
kubectl -n APIGEE_NAMESPACE get apigeeorg ORG_NAME
kubectl -n APIGEE_NAMESPACE get apigeeenv ENV_NAME - Verifique se os novos pods de MART, ambiente de execução e sincronizador estão usando o novo SPC:
export POD=NEW_MART_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'export POD=NEW_RUNTIME_POD_NAMEkubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'export POD=NEW_SYNCHRONIZER_POD_NAMEkubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'O resultado precisa corresponder ao valor definido para
spec.cassandra.newSecretProviderClassemrotation.yaml, por exemplo:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'my-new-spc
- Crie um novo recurso
-
Depois de concluir as etapas em todas as regiões e validar se o tráfego ainda está fluindo corretamente, limpe o processo na primeira região com estas duas etapas:
-
Na primeira região, atualize o valor de
metadata.namee definaspec.cassandra.jobTypecomoCLEANUP. -
Ative o job de limpeza aplicando o arquivo.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
- Verifique o status do job e acompanhe os registros para verificar quando o job de limpeza for concluído.
Quando o job de limpeza for concluído, o processo de rotação será finalizado.
-
Na primeira região, atualize o valor de
- Faça o backup do banco de dados do Cassandra. Esse backup garante a recuperação das credenciais após a rotação.
- Exclua as credenciais, a função e a política do Cassandra antigo do Vault.