Resolver problemas de criptografia de secrets na camada do aplicativo


Nesta página, mostramos como resolver problemas relacionados à criptografia de secrets na camada de aplicativo no Google Kubernetes Engine (GKE).

Falha na atualização

Quando você atualiza a configuração da criptografia de secrets na camada do aplicativo, o GKE precisa regravar todos os objetos Secret no cluster do Kubernetes. O GKE fará isso para garantir que todos os Secrets sejam criptografados pela nova chave do Cloud KMS ou sejam gravados sem criptografia, se você configurar isso.

Essa operação de atualização pode falhar devido a qualquer uma das seguintes condições:

  • O plano de controle do Kubernetes fica temporariamente indisponível enquanto a atualização está em andamento.
  • Um AdmissionWebhook definido pelo usuário impede que o GKE atualize objetos Secret.
  • A chave atualizada ou anterior do Cloud KMS é desativada antes da conclusão da operação de atualização.

Até que a operação de atualização seja concluída, não interaja com as chaves atualizadas ou anteriores do Cloud KMS.

Campos de depuração

Novos clusters do GKE que executam a versão 1.29 e posteriores contêm campos adicionais que ajudam a monitorar atualizações para Cluster.DatabaseEncryption e a se recuperar de falhas.

As etapas a seguir se aplicam apenas aos clusters em que o campo DatabaseEncryption.CurrentState não está vazio. Se o campo CurrentState estiver vazio, o recurso ainda não estará ativado nessa versão do cluster.

Os limites a seguir se aplicam a esses campos:

  • São somente saída, o que significa que não é possível defini-los durante as solicitações de criação ou atualização do cluster.

Campo CurrentState

É possível inspecionar o status atual de uma operação de atualização de DatabaseEncryption examinando o campo CurrentState em Cluster.DatabaseEncryption.

Valor de CurrentState Descrição

CURRENT_STATE_ENCRYPTED

CURRENT_STATE_DECRYPTED

A operação de atualização mais recente foi concluída. Nenhuma outra ação é necessária. É possível descartar as chaves usadas anteriormente.

CURRENT_STATE_ENCRYPTION_PENDING

CURRENT_STATE_DECRYPTION_PENDING

A atualização está em andamento.

CURRENT_STATE_ENCRYPTION_ERROR

CURRENT_STATE_DECRYPTION_ERROR

Ocorreu um erro com a atualização mais recente. Não desative nem destrua as chaves do Cloud KMS usadas anteriormente, porque elas ainda podem estar em uso pelo GKE.

Consulte o campo LastOperationErrors para mais informações.

Campo LastOperationErrors

Quando uma operação de atualização falha, o erro subjacente do plano de controle do GKE é exibido na saída de gcloud container clusters update.

As mensagens de erro das duas operações de atualização com falha mais recentes também estão disponíveis em Cluster.DatabaseEncryption.LastOperationErrors.

Campo DecryptionKeys

A chave do Cloud KMS usada para novas operações de criptografia é mostrada em DatabaseEncryption.KeyName. Normalmente, essa é a única chave usada pelo cluster.

No entanto, DatabaseEncryption.DecryptionKeys contém outras chaves que também são usadas pelo cluster quando uma atualização está em andamento ou após uma falha.

Recuperar-se de uma falha na atualização

Para se recuperar de uma falha na atualização, faça isto:

  1. Analise a mensagem de erro e resolva os problemas indicados.
  2. Repita a solicitação de atualização executando o comando que falhou, como gcloud container clusters update ... --database-encryption-key. Recomendamos que você repita com a mesma solicitação de atualização emitida originalmente ou atualize o cluster para o estado anterior. O GKE talvez não consiga fazer a transição para um estado diferente de chave ou criptografia se não puder ler um ou mais Secrets.

As seções a seguir listam os motivos comuns para os erros.

Erro de chave do Cloud KMS

Se a mensagem de erro contiver uma referência a uma ou mais chaves do Cloud KMS, examine a configuração da respectiva chave para garantir que as versões relevantes dela sejam utilizáveis.

Por exemplo, se o erro indicar que uma chave do Cloud KMS foi desativada ou destruída, reative a chave ou a versão dela.

Não foi possível atualizar o Secret

O seguinte erro poderá ocorrer se a API Kubernetes recusar a solicitação de atualização devido a um webhook de admissão:

error admission webhook WEBHOOK_NAME denied the request

Para resolver esse erro, remova ou modifique o webhook para que o GKE possa atualizar os Secrets em todos os namespaces durante atualizações de chave.