Resolva problemas de encriptação de segredos da camada de aplicação


Esta página mostra como resolver problemas relacionados com a encriptação de segredos da camada de aplicação no Google Kubernetes Engine (GKE).

Falha na atualização

Quando atualiza a configuração de encriptação de segredos da camada de aplicação, o GKE tem de reescrever todos os objetos Secret no cluster do Kubernetes. O GKE faz isto para garantir que todos os segredos são encriptados pela nova chave do Cloud KMS ou são escritos sem encriptação, se for essa a configuração.

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

  • O plano de controlo do Kubernetes está temporariamente indisponível enquanto a atualização está em curso.
  • Um AdmissionWebhook definido pelo utilizador impede que o GKE consiga atualizar objetos Secret.
  • A chave do Cloud KMS atualizada ou anterior está desativada antes da conclusão da operação de atualização.

Até que a operação de atualização seja bem-sucedida, não interaja com as chaves do Cloud KMS atualizadas nem anteriores.

Campos de depuração

Os clusters do GKE novos com a versão 1.29 e posteriores contêm campos adicionais que ajudam a monitorizar as atualizações de Cluster.DatabaseEncryption e a recuperar de falhas.

Os passos seguintes aplicam-se apenas a clusters em que o campo DatabaseEncryption.CurrentState não está vazio. Se o campo CurrentState estiver vazio, a funcionalidade ainda não está ativada nesta versão do cluster.

Os seguintes limites aplicam-se a estes campos:

  • São apenas de saída, o que significa que não os pode definir durante os pedidos de criação ou atualização de clusters.

CurrentState campo

Pode inspecionar o estado atual de uma DatabaseEncryptionoperação de atualização 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 bem-sucedida. Não é necessária nenhuma ação adicional. Pode eliminar todas as chaves usadas anteriormente.

CURRENT_STATE_ENCRYPTION_PENDING

CURRENT_STATE_DECRYPTION_PENDING

A atualização está em curso.

CURRENT_STATE_ENCRYPTION_ERROR

CURRENT_STATE_DECRYPTION_ERROR

Ocorreu um erro com a atualização mais recente. Não desative nem destrua nenhuma chave do Cloud KMS usada anteriormente, uma vez que podem ainda estar a ser usadas pelo GKE.

Consulte o campo LastOperationErrors para mais informações.

LastOperationErrors campo

Quando uma operação de atualização falha, o erro subjacente do plano de controlo do GKE é apresentado no resultado de gcloud container clusters update.

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

DecryptionKeys campo

A chave do Cloud KMS usada para novas operações de encriptação é apresentada em DatabaseEncryption.KeyName. Normalmente, esta é a única chave usada pelo cluster.

No entanto, DatabaseEncryption.DecryptionKeys contém chaves adicionais que também são usadas pelo cluster se uma atualização estiver em curso ou após uma falha.

Recupere-se de uma atualização com falha

Para recuperar de uma atualização com falha, faça o seguinte:

  1. Examine a mensagem de erro e resolva os problemas indicados.
  2. Volte a tentar o pedido de atualização executando o comando com falha, como gcloud container clusters update ... --database-encryption-key. Recomendamos que tente novamente com o mesmo pedido de atualização que emitiu originalmente ou atualize o cluster para o estado anterior. O GKE pode não conseguir fazer a transição para uma chave ou um estado de encriptação diferente se não conseguir ler um ou mais segredos.

As secções seguintes indicam 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 das chaves do Cloud KMS para se certificar de que as versões das chaves relevantes são utilizáveis.

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

Erro: não é possível usar a chave do CloudKMS configurada para a encriptação ao nível da aplicação

A seguinte mensagem de erro ocorre se a conta de serviço predefinida do GKE não conseguir aceder à chave do Cloud KMS:

Cluster problem detected (Kubernetes Engine Service Agent account unable to use CloudKMS key configured for Application Level encryption).

Para resolver este problema, reative a chave desativada.

Não é possível atualizar o segredo

O seguinte erro pode ocorrer se a API Kubernetes rejeitar o pedido de atualização devido a um webhook de admissão:

error admission webhook WEBHOOK_NAME denied the request

Para resolver este erro, remova o webhook ou modifique-o para que o GKE possa atualizar os segredos em todos os espaços de nomes durante as atualizações de chaves.

Erro: o espaço de nomes é gerido

O seguinte erro ocorre quando tenta voltar a encriptar segredos que estão num espaço de nomes gerido pelo GKE, como kube-system, num cluster do Autopilot. A mensagem de erro é semelhante à seguinte:

Error from server (Forbidden): secrets "alertmanager" is
forbidden: User cannot patch resource "secrets" in API group "" in the namespace "gke-gmp-system":
GKE Warden authz [denied by managed-namespaces-limitation]: the namespace "gke-gmp-system"
is managed and the request's verb "patch" is denied'

Os clusters do GKE Autopilot não lhe permitem modificar os recursos do Kubernetes, incluindo os segredos, nos espaços de nomes geridos.

Para resolver este erro, faça o seguinte:

  • Se usar comandos kubectl para voltar a encriptar segredos, use a flag --namespace para restringir o comando aos espaços de nomes que gere.
  • Se usar um CronJob para voltar a encriptar segredos, implemente-o apenas nos espaços de nomes que gere.

O que se segue?