Chaves de criptografia gerenciadas pelo cliente (CMEK)

Nesta página, descrevemos como as chaves de criptografia gerenciadas pelo cliente (CMEK) funcionam com o Memorystore para Redis. Para usar imediatamente esse recurso, consulte Como usar chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês).

Uma CMEK é ideal para mim?

As chaves de criptografia gerenciadas pelo cliente são destinadas a organizações com dados confidenciais ou regulamentados que exigem o gerenciamento das próprias chaves de criptografia.

Criptografia gerenciada pelo Google e criptografia gerenciada pelo cliente

O recurso CMEK permite que você use suas próprias chaves criptográficas nos dados em repouso no Memorystore para Redis. Depois de adicionar chaves de criptografia gerenciadas pelo cliente, sempre que uma chamada de API é feita, o Memorystore usa sua chave para acessar os dados.

O Memorystore usa chaves de criptografia de dados (DEK) gerenciadas pelo Google e chaves de criptografia de chaves (KEK) para criptografar o Memorystore para Redis. Há dois níveis de criptografia:

  • A DEK criptografa os dados.
  • A KEK criptografa a DEK.

A instância do Memorystore armazena a DEK criptografada com os dados criptografados no DP e o Google gerencia a KEK do Google. Com as chaves de criptografia gerenciadas pelo cliente, você cria uma chave que encapsula a KEK do Google. As chaves de criptografia gerenciadas pelo cliente permitem criar, revogar e excluir a KEK.

As chaves de criptografia gerenciadas pelo cliente são gerenciadas por meio da API Cloud Key Management Service.

Os diagramas abaixo mostram como a criptografia de dados em repouso funciona dentro de uma instância do Memorystore ao usar a criptografia padrão do Google em comparação com as chaves de criptografia gerenciadas pelo cliente.

Sem CMEK

Os dados são enviados ao Google e divididos em blocos. Cada bloco é criptografado com a própria chave de criptografia de dados. As chaves de criptografia de dados são encapsuladas por uma chave de criptografia de chaves. Com a criptografia padrão do Google, a chave de criptografia de chaves é recuperada do keystore interno do Google. Os blocos criptografados e as chaves de criptografia unidas são distribuídos pela infraestrutura de armazenamento do Google.

Com a CMEK

Os dados são enviados ao Google e divididos em blocos. Cada bloco é criptografado com a própria chave de criptografia de dados. As chaves de criptografia de dados são encapsuladas por uma chave de criptografia de chaves. Com a CMEK e o Cloud KMS, a chave de criptografia de chaves é recuperada do Cloud KMS. Os blocos criptografados e as chaves de criptografia unidas são distribuídos pela infraestrutura de armazenamento do Google.

Ao descriptografar dados encapsulados com chaves de criptografia gerenciadas pelo cliente, o Memorystore usa a KEK para descriptografar a DEK e a DEK não criptografada para descriptografar dados em repouso.

Bloco de dados criptografado com a DEK e armazenado com a DEK unida. Uma solicitação para desencapsular a DEK é enviada ao armazenamento do KMS, que armazena a KEK não exportável. O armazenamento do KMS retorna a DEK separada.

Quando o Memorystore interage com chaves CMEK?

Operação Descrição
criação de instância Durante a criação da instância, você a configura para usar chaves de criptografia gerenciadas pelo cliente.
Atualização da instância O Memorystore verifica a chave CMEK durante atualizações para uma instância ativada para CMEK.

Quais dados são criptografados com o CMEK?

A CMEK criptografa os seguintes tipos de dados:

Sobre as contas de serviço

Ao criar uma instância com o CMEK, é necessário conceder o papel cloudkms.cryptoKeyEncrypterDecrypter à conta de serviço do Memorystore com o seguinte formato:

  • service-[PROJECT_NUMBER]@cloud-redis.iam.gserviceaccount.com

A concessão dessa permissão permite que a conta de serviço solicite acesso à chave do Cloud KMS.

Para instruções sobre como conceder essa permissão à conta de serviço, consulte Como conceder acesso à conta de serviço à chave.

Sobre as chaves

No Cloud KMS, você precisa criar um keyring com uma chave criptográfica que use um algoritmo de criptografia/descriptografia simétrica. Ao criar uma nova instância do Memorystore, você seleciona essa chave para criptografar a instância. É possível criar um projeto para as chaves e as instâncias do Memorystore ou projetos diferentes para cada um deles.

A CMEK está disponível em todos os locais de instâncias do Memorystore. A região da chave e do keyring precisa ser definida para a mesma região da instância do Memorystore para Redis. Uma chave de região multirregional ou global não funciona. Uma solicitação para criar uma instância do Memorystore falhará se as regiões não corresponderem.

No momento, a CMEK para Memorystore não é compatível com o Gerenciador de chaves externas do Cloud (Cloud EKM).

As chaves de criptografia gerenciadas pelo cliente têm o formato a seguir:

projects/[CMEK_ENABLED_PROJECT]/locations/[REGION]/keyRings/[RING_NAME]/cryptoKeys/[KEYNAME]

Se o Memorystore não conseguir acessar qualquer versão de chave atualmente em uso (por exemplo, se você desativar a versão da chave), o Memorystore encerrará a instância sem atraso indevido. No console do Google Cloud, uma instância suspensa mostra uma dica de ponto de exclamação vermelha na página Instâncias. Ao passar o cursor sobre a dica, "estado" não será exibido. Quando a chave se torna acessível novamente, o Memorystore retoma automaticamente a instância.

Como tornar os dados criptografados com CMEK permanentemente inacessíveis?

Pode haver casos em que você precise destruir permanentemente os dados criptografados com CMEK. Para isso, destrua a versão da chave de criptografia gerenciada pelo cliente. Não é possível destruir o keyring ou a chave, mas você pode destruir versões da chave.

Como exportar e importar dados de/para uma instância ativada para CMEK?

Se você quiser que os dados permaneçam criptografados com uma chave gerenciada pelo cliente durante uma importação ou exportação, será necessário definir uma chave de criptografia gerenciada pelo cliente no bucket do Cloud Storage antes de exportar dados para eles.

Não há requisitos ou restrições especiais para importar dados para uma nova instância do Memorystore quando os dados foram armazenados anteriormente em uma instância do Memorystore ativada para CMEK.

Comportamento de destruir/desativar uma versão da chave CMEK

Se você quiser garantir que sua instância não tenha acesso a dados, desative a versão da chave primária da sua chave de criptografia gerenciada pelo cliente. Isso encerrará sua instância sem atraso indevido. Além disso, o Memorystore encerrará uma instância sem atraso indevido se qualquer chave de criptografia gerenciada pelo cliente em uso for desativada/destruída. Isso inclui qualquer versão de chave mais antiga que ainda esteja sendo usada por uma instância do Memorystore. É possível usar o gcloud ou o Console do Google Cloud para ver se a instância está suspensa:

No console do Google Cloud, se a instância estiver suspensa, você verá uma notificação de dica vermelha ao lado da instância na página Instâncias do Memorystore para Redis. A dica exibe "No estado" quando o cursor passa sobre ela.

Para a gcloud, se você executar gcloud beta redis instances describe e não ver state: READY, state: REPAIRING ou qualquer outro estado nos metadados da instância, sua instância está suspensa.

Como reativar/restaurar uma versão de chave CMEK em uso

Uma instância fica visível após reativar/restaurar uma versão da chave CMEK em uso.

Restrições

As restrições a seguir se aplicam ao uso de chaves de criptografia gerenciadas pelo cliente com o Memorystore: