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
SecretProviderClass
do 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
SecretRotation
usando 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.name
como 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-precheck
seguido desr-1
. - ROTATION_ID: defina
spec.rotationId
como um identificador personalizado, por exemplo,rotation-1-precheck
. - NEW_SPC_NAME: defina
spec.cassandra.newSecretProviderClass
como o novo nome da classe do provedor de secrets que você criou na etapa anterior. - OLD_SPC_NAME: defina
spec.cassandra.oldSecretProviderClass
como o nome do SPC que oApigeeDatastore
está 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.name
e definaspec.precheck
comofalse
. 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.name
e definaspec.cassandra.jobType
comoCLEANUP
. -
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
SecretProviderClass
do Kubernetes no namespaceAPIGEE_NAMESPACE
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
SecretRotation
usando 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.name
como 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-precheck
seguido desr-1
. - ROTATION_ID: defina
spec.rotationId
como um identificador personalizado, por exemplo,rotation-1-precheck
. - NEW_SPC_NAME: defina
spec.cassandra.newSecretProviderClass
como o novo nome da classe do provedor de secrets que você criou na etapa anterior. - OLD_SPC_NAME: defina
spec.cassandra.oldSecretProviderClass
como o nome do SPC que oApigeeDatastore
está 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-precheck
parasr-1
. - Defina
spec.precheck
comofalse
para desativar a pré-verificação e realizar a rotação. - Defina
spec.rotationId
como 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
SecretRotation
e 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
SecretProviderClass
do 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.yaml
e definacassandra.auth.secretProviderClass
para corresponder ao valor despec.cassandra.newSecretProviderClass
no 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
ReplicaSet
será 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.newSecretProviderClass
emrotation.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 é
default
na 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.newSecretProviderClass
emrotation.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_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
export POD=NEW_SYNCHRONIZER_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.newSecretProviderClass
emrotation.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.name
e definaspec.cassandra.jobType
comoCLEANUP
. -
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.