Como usar chaves de criptografia gerenciadas pelo cliente (CMEK)

Nesta página, você verá como configurar uma conta de serviço e chaves de criptografia gerenciadas pelo cliente e como criar uma instância que usa esse tipo de chave. Para saber mais sobre como usar chaves de criptografia gerenciadas pelo cliente com o Cloud SQL, consulte Visão geral das chaves de criptografia gerenciadas pelo cliente.

Antes de começar

  1. Faça login na sua conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar a página do seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Instale e inicialize o SDK do Cloud..
  5. Verifique se você tem o papel Administrador do Cloud SQL em sua conta de usuário.

    Acessar a página IAM

  6. Ative a Cloud Key Management Service API.

    Ative a API

  7. Ative a API Cloud SQL Admin.

    Ative a API

Fluxo de trabalho para criar uma instância do Cloud SQL com CMEK

  1. Somente usuários da gcloud e da API: crie uma conta de serviço para cada projeto que exige chaves de criptografia gerenciadas pelo cliente.
  2. Crie um keyring e uma chave e defina o local de cada chave.
  3. Somente usuários da gcloud e da API: conceda o acesso de chave à conta de serviço.
  4. Copie ou anote o ID da chave (KMS_RESOURCE_ID), o local da chave e o ID (KMS_RESOURCE_ID) do keyring. Você precisa dessas informações para conceder o acesso de chave à conta de serviço.
  5. Acesse um projeto e crie uma instância do Cloud SQL com as seguintes opções:
    1. O mesmo local da chave de criptografia gerenciada pelo cliente
    2. A configuração de chave gerenciada pelo cliente
    3. O ID da chave de criptografia gerenciada pelo cliente

Sua instância do Cloud SQL agora está ativada com CMEK.

Como criar uma conta de serviço

Você precisa criar uma conta de serviço para cada projeto que exige chaves de criptografia gerenciadas pelo cliente.

Para permitir que um usuário gerencie contas de serviço, conceda um dos seguintes papéis:

  • Usuário da conta de serviço (roles/iam.serviceAccountUser): inclui permissões para listar contas de serviço, receber detalhes sobre uma conta de serviço e representar uma conta de serviço.
  • Administrador da conta de serviço (roles/iam.serviceAccountAdmin): inclui permissões para listar contas de serviço e acessar detalhes sobre uma conta de serviço. Também inclui permissões para criar, atualizar e excluir contas de serviço, e para visualizar ou alterar a política do Cloud SQL para PostgreSQL em uma conta de serviço.

No momento, só é possível usar comandos da ferramenta de linha de comando gcloud para criar o tipo e conta de serviço necessário para chaves de criptografia gerenciadas pelo cliente. Se você estiver usando o Console, o Cloud SQL criará automaticamente essa conta de serviço para você.

Para criar uma conta de serviço com a ferramenta de linha de comando gcloud, execute o seguinte comando:

gcloud beta services identity create --service=sqladmin.googleapis.com \
             --project=[USER_PROJECT]

O comando anterior retorna um nome de conta de serviço usando o seguinte formato:

service-[PROJECT_NUMBER]@gcp-sa-cloud-sql.iam.gserviceaccount.com

Exemplo:

service-534582264470@gcp-sa-cloud-sql.iam.gserviceaccount.com

Você usa esse nome de conta de serviço durante o procedimento em Concessão do acesso da chave à conta de serviço.

Como criar uma chave

É possível criar a chave no mesmo projeto do Google Cloud que a instância do Cloud SQL ou em um projeto diferente do usuário. O local do keyring do Cloud KMS precisa corresponder à região em que você quer criar a instância do Cloud SQL. Uma chave de região global ou de várias regiões não funcionará. A solicitação de criação de instância do Cloud SQL falhará se as regiões não corresponderem.

Para criar uma chave do Cloud KMS:

Console

  1. Acesse a página Chaves criptográficas.
    Acessar a página "Chaves criptográficas"
  2. Clique em CRIAR KEYRING.
  3. Adicione um nome do keyring. Anote esse nome porque você precisa dele para conceder o acesso de chave à conta de serviço.
  4. Adicione um local de keyring.
  5. Clique em CRIAR. A página Criar chave é aberta.
  6. Adicione um nome de chave.
  7. Selecione uma Finalidade (simétrica ou assimétrica).
  8. Selecione um Período de rotação e A partir da data.
  9. Clique em CRIAR.
  10. Na tabela Chaves, clique nos três pontos na última coluna e selecione Copiar ID do recurso. Se preferir, anote o ID. Trata-se do KMS_RESOURCE_ID. Você precisa do KMS_RESOURCE_ID para conceder o acesso de chave à conta de serviço.

gcloud

  1. Crie um novo keyring.
         gcloud kms keyrings create [KEYRING_NAME] --location [LOCATION]
      
    Anote esse nome porque você precisa dele para conceder o acesso de chave à conta de serviço.
  2. Crie uma chave no keyring.
         gcloud kms keys create [KEY_NAME] --location [LOCATION] \
               --keyring [KEYRING_NAME] --purpose encryption
         
    Anote esse nome porque você precisa dele para conceder o acesso de chave à conta de serviço.

Como conceder o acesso da chave à conta de serviço

Você só precisará executar este procedimento se estiver usando a gcloud ou a API.

Para conceder acesso à conta de serviço:

  gcloud kms keys add-iam-policy-binding 
[KEY_NAME] --location [LOCATION] --keyring [KEY_RING_NAME]
--member serviceAccount:service-[PROJECT_NUMBER]@gcp-sa-cloud-sql.iam.gserviceaccount.com
--role roles/cloudkms.cryptoKeyEncrypterDecrypter

Como criar uma instância do Cloud SQL com CMEK

Para criar uma instância com chaves de criptografia gerenciadas pelo cliente:

Console

  1. Acesse a página Instâncias do Cloud SQL no Console do Google Cloud.

    Acessar a página "Instâncias" do Cloud SQL

  2. Clique em Criar instância.
  3. Escolha o mecanismo do banco de dados.
  4. Digite um nome para a instância. Não inclua informações confidenciais ou de identificação pessoal no nome da sua instância. Ela é visível externamente. Não é necessário incluir o ID do projeto no nome da instância. Isso é feito automaticamente quando necessário, como nos arquivos de registro.
  5. Digite a senha do usuário 'root'@'%'.
  6. Configure a região para a instância. Coloque a instância na mesma região que os recursos que a acessam. Na maioria dos casos, você não precisa especificar uma zona.
  7. Em Opções de configuração, selecione todas as opções até chegar a Tipo de máquina e armazenamento.
  8. Expanda Tipo de máquina e armazenamento.
  9. Em Criptografia, escolha Chave gerenciada pelo cliente.
  10. Selecione a chave KMS no menu suspenso ou insira manualmente o KMS_RESOURCE_ID. São exibidas somente as chaves do KMS no mesmo projeto e na mesma região que a instância. Para escolher uma chave KMS pertencente a um projeto diferente, mas na mesma região, selecione Não encontra sua chave? Insira o ID de recurso da chave e o KMS_RESOURCE_ID registrado anteriormente.
  11. Uma mensagem será exibida se a conta de serviço não tiver permissão para criptografar/descriptografar com a chave selecionada. Se isso acontecer, clique em Conceder para conceder à conta de serviço o IAM role on the selected KMS key.
  12. Depois de selecionar as opções de configuração, clique em Criar.
  13. Você verá uma mensagem explicando as implicações do uso da chave de criptografia gerenciada pelo cliente. Leia e confirme para prosseguir com a criação da instância.

gcloud

  gcloud sql instances create [INSTANCE_NAME] \
  --project [PROJECT_ID] \
  --disk-encryption-key [KMS_RESOURCE_ID] \
  --database-version=[VERSION] \
  --cpu=[NUMBER_CPUS] \
  --memory=[MEMORY_SIZE]
  --region=[REGION] \
  --root-password=[INSERT-PASSWORD-HERE]
  

cURL

Para criar uma instância com chaves de criptografia gerenciadas pelo cliente, insira diskEncryptionConfiguration no comando. O valor desse parâmetro é o KMS_RESOURCE_ID que você recebeu do procedimento Como criar uma chave.
  gcloud auth login
  ACCESS_TOKEN="$(gcloud auth print-access-token)"
  curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
       --header 'Content-Type: application/json' \
       --data '{"name":"[INSTANCE_NAME]", "region":"[REGION]",
                "databaseVersion": "POSTGRES_9_6",
                "diskEncryptionConfiguration" : {"kmsKeyName" : "[KMS_RESOURCE_ID]"},
                "settings": {"tier": "[TIER_STRING]",
                "backupConfiguration": {"enabled":true}}}' \
       -X POST \
       https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances
  
Esse comando cURL usa Instances:Insert.

Como criar um backup para uma instância ativada para CMEK

Quando você cria um backup de uma instância do Cloud SQL, o backup é criptografado com a mesma versão de chave primária que a chave gerenciada pelo cliente da instância principal.

Consulte Como criar e gerenciar backups automáticos e sob demanda.

Você verá uma mensagem no formulário Criar um backup que diz: "Seu backup será criptografado com a versão principal da chave de criptografia gerenciada pelo cliente desta instância. Se esta versão da chave for destruída ou desativada, todos os dados de backup criptografados com ela serão perdidos permanentemente. É possível verificar a versão principal da chave no Cloud KMS."

Na página de backups, a lista de backups ativados com chaves de criptografia gerenciadas pelo cliente tem duas colunas extras. Uma coluna mostra que o backup é de uma instância ativada para CMEK. Outra coluna exibe a versão da chave usada para criptografar o backup.

Como criar uma réplica para uma instância ativada para CMEK

Quando você cria uma réplica de leitura de uma instância do Cloud SQL na mesma região, ela herda a mesma chave de criptografia gerenciada pelo cliente que a instância pai. Se você criar uma réplica de leitura em uma região diferente, receberá uma nova lista de chaves de criptografia gerenciadas pelo cliente. Cada região usa seu próprio conjunto de chaves.

Consulte Como criar réplicas de leitura.

Na página Criar réplica de leitura, você verá as seguintes informações:

  1. A Criptografia mostra gerenciado pelo cliente.
  2. A chave de criptografia da réplica é exibida.
  3. A mensagem "Sua réplica será criptografada com a chave gerenciada pelo cliente da instância principal" será exibida. Se alguém destruir essa chave, todos os dados criptografados com ela serão permanentemente perdidos."

Para uma réplica entre regiões, você verá a seguinte mensagem:

"Sua réplica entre regiões será criptografada com a chave gerenciada pelo cliente selecionada. Se alguém destruir essa chave, todos os dados criptografados com ela serão permanentemente perdidos."

Como criar um clone de uma instância ativada para CMEK

Quando você cria um clone da instância do Cloud SQL, ele herda a mesma chave de criptografia gerenciada pelo cliente que foi usada para criptografar a instância de origem.

Veja Como clonar instâncias.

Na página Criar clone, você verá as seguintes informações:

  1. A Criptografia mostra gerenciado pelo cliente.
  2. A chave de criptografia do clone é exibida.
  3. Há uma mensagem dizendo "Seu clone será criptografado com a chave gerenciada pelo cliente da instância de origem. Se alguém destruir essa chave, todos os dados criptografados com ela serão permanentemente perdidos."

Como visualizar informações importantes da chave em uma instância ativada para CMEK

Depois de criar uma instância do Cloud SQL, consulte a lista de instâncias ou a página de visão geral da instância para ver se ela foi criada por meio de uma chave de criptografia gerenciada pelo cliente. Os detalhes também mostram a chave usada para criar a instância.

  1. Acesse a página "Instâncias do Cloud SQL".

    Acessar a página "Instâncias do Cloud SQL"

  2. Na lista "Instâncias", role a tela para a direita até ver a coluna Criptografia. Nessa coluna, você verá Gerenciado pelo Google e Gerenciado pelo cliente.

  3. Clique no nome de uma instância para abrir a página Visão geral. A chave de criptografia gerenciada pelo cliente é listada no painel Configuração.

Como desativar e reativar versões de chave

Veja os seguintes tópicos:

Solução de problemas

Nesta seção, descrevemos as ações possíveis quando você receber uma mensagem de erro ao configurar ou usar instâncias ativadas para CMEK.

As operações de administrador do Cloud SQL (como criação, clonagem ou atualização) podem falhar devido a erros do Cloud KMS e ausência de papéis ou permissões. Motivos comuns de falha incluem uma versão ausente da chave do Cloud KMS, uma versão da chave do Cloud KMS desativada ou destruída, permissões de IAM insuficientes para acessar a versão da chave do Cloud KMS ou a versão da chave do Cloud KMS está em uma região diferente da instância do Cloud SQL. Use a seguinte tabela de solução de problemas para diagnosticar e resolver problemas comuns.

Tabela de solução de problemas de chaves de criptografia gerenciadas pelo cliente

Para este erro... O problema pode ser... Tente o seguinte...
Conta de serviço por produto, por projeto não encontrada O nome da conta de serviço está incorreto. Certifique-se de ter criado uma conta de serviço para o projeto de usuário correto.

ACESSAR A PÁGINA "CONTAS DE SERVIÇO"

Não é possível conceder acesso à conta de serviço A conta de usuário não tem permissão para conceder acesso a esta versão de chave. Adicione o papel Administrador da organização à sua conta de usuário ou serviço.

ACESSAR A PÁGINA "CONTAS DE IAM"

A versão da chave do Cloud KMS foi destruída A versão da chave foi destruída. Se a versão da chave for destruída, você não poderá usá-la para criptografar ou descriptografar dados.
A versão da chave do Cloud KMS está desativada A versão da chave está desativada. Reative a versão da chave do Cloud KMS.

ACESSAR A PÁGINA "CHAVES DE CRIPTOGRAFIA"

Permissão insuficiente para usar a chave do Cloud KMS O papel cloudkms.cryptoKeyEncrypterDecrypter está ausente na conta de usuário ou serviço que você está usando para executar operações em instâncias do Cloud SQL ou a versão da chave do Cloud KMS não existe. Adicione o papel cloudkms.cryptoKeyEncrypterDecrypter à conta de usuário ou serviço.

ACESSAR A PÁGINA "CONTAS DE IAM"


Se o papel já estiver na sua conta, consulte Como criar uma chave para saber como criar uma nova versão de chave. Consulte a observação.
A chave do Cloud KMS não foi encontrada A versão da chave não existe. Crie uma nova versão de chave. Consulte Como criar uma chave. Consulte a observação.
A instância do Cloud SQL e a versão da chave do Cloud KMS estão em diferentes regiões A versão da chave do Cloud KMS e a instância do Cloud SQL precisam estar na mesma região. Ela não funcionará se a versão da chave do Cloud KMS estiver em uma região global ou em várias regiões. Crie uma versão de chave na mesma região em que você quer criar instâncias. Consulte Como criar uma chave. Consulte a observação.

A seguir