Como proteger recursos com chaves do Cloud KMS

Por padrão, o Compute Engine criptografa o conteúdo do cliente em repouso. O Compute Engine processa e gerencia essa criptografia automaticamente para você. No entanto, se você mesmo quiser controlar e gerenciar essa criptografia, use as chaves de criptografia de chaves. As chaves de criptografia de chaves não criptografam diretamente seus dados, mas são usadas para criptografar as chaves de criptografia de dados que criptografam seus dados.

Há duas opções de chaves de criptografia de chaves no Compute Engine:

Depois de criar um recurso do Compute Engine, protegido pelo Cloud KMS, não é necessário especificar a chave, porque o Compute Engine sabe a chave KMS que foi usada. Isso é diferente da maneira como é feito, no Compute Engine, o acesso aos recursos de chaves fornecidas pelo cliente. Para esse acesso, você precisa especificar a chave fornecida pelo cliente.

Saiba mais sobre as opções de criptografia do Google Cloud Platform.

Antes de começar

  1. Aprenda sobre discos, imagens, snapshots de disco permanente e instâncias.

  2. Decida se você executará o Compute Engine e o Cloud KMS no mesmo projeto do Google Cloud Platform ou em projetos diferentes. Para fins de exemplo de documentação, é usada a convenção a seguir:

    • [PROJECT_ID] é o ID do projeto que executa o Compute Engine.
    • [PROJECT_NUMBER] é o número do projeto que executa o Compute Engine.
    • [KMS_PROJECT_ID] é o ID do projeto que executa o Cloud KMS, ainda que seja o mesmo que executa o Compute Engine.

    Para informações sobre IDs e números de projetos do GCP, consulte Como identificar projetos.

  3. Para o projeto do GCP que executa o Compute Engine, configure o acesso da API para o Compute Engine.

  4. No projeto do GCP que executa o Cloud KMS:

    1. Ative a API Cloud KMS.
    2. Crie um keyring e uma chave, conforme descrito em Como criar keyrings e chaves.
  5. Atribua o papel Cloud KMS CryptoKey Encrypter/Decrypter ao Agente de serviço do Compute Engine. O formato da conta é:

    service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com
    

    Use a ferramenta de linha de comando gcloud para atribuir o papel:

    gcloud projects add-iam-policy-binding [KMS_PROJECT_ID] \
    --member serviceAccount:service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Substitua [KMS_PROJECT_ID] pelo ID do projeto do GCP que executa o Cloud KMS, e [PROJECT_NUMBER] pelo número (não o ID) do projeto do GCP que executa os recursos do Compute Engine.

Especificações

Criptografia

As chaves do Cloud KMS usadas para proteger os dados no Compute Engine são chaves AES-256. Elas são chaves de criptografia de chaves que criptografam as chaves de criptografia de dados usadas nos seus dados.

Restrições

  • Somente é possível criptografar novos discos permanentes, imagens e snapshots com sua própria chave. Não é possível usá-la para criptografar recursos atuais.

  • Não é possível usar as próprias chaves com SSDs locais porque eles não permanecem além da duração de uma máquina virtual. Os SSDs locais já estão protegidos com uma chave de criptografia temporária que o Google não mantém.

Criptografar um novo disco permanente com as próprias chaves

É possível criptografar um novo disco permanente fornecendo uma chave durante a criação de uma instância ou disco.

Console

  1. No Console do Google Cloud Platform, acesse a página Discos.

    Acessar a página "Discos"

  2. Clique em Novo disco e insira as propriedades do novo disco.
  3. Em Criptografia, selecione Chave gerenciada pelo cliente.
  4. Use o menu suspenso para selecionar a chave do Cloud KMS a ser usada para criptografar o disco.
  5. Clique em Criar para criar o disco.

Linha de comando

gcloud compute disks \
create encrypted-disk \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

API

Criptografe um disco usando a propriedade diskEncryptionKey com kmsKeyName. Por exemplo, para criptografar um novo disco durante a criação de instância com sua chave do Cloud KMS:

POST
https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances

{
"machineType": "zones/[ZONE]/machineTypes/n1-standard-1",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]"
  },
  "initializeParams": {
   "sourceImage": "projects/debian-cloud/global/images/debian-8-jessie-v20160301"
  },
  "boot": true
 }
],
...
}

De maneira similar, também é possível usar a API para criar um novo disco permanente independente e criptografá-lo com sua chave do Cloud KMS:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/
[ZONE]/disks?sourceImage=https%3A%2F%2Fwww.googleapis.com%2Fcompute%2F
projects%2Fdebian-cloud%2Fglobal%2Fimages%2Fdebian-8-jessie-v20160301

{
 "name": "new-encrypted-disk-key",
 "diskEncryptionKey": {
   "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]"
  },
 "type": "zones/[ZONE]/diskTypes/pd-standard"
}

Criar um snapshot de um disco criptografado

Quando você cria um snapshot de um disco criptografado com a CMEK, o snapshot precisa ser protegido pela mesma chave de criptografia usada para criptografar o disco.

Console

  1. No Console do Google Cloud Platform, acesse a página Snapshots.

    Acessar a página "Snapshots"

  2. Clique em Criar instantâneo.
  3. Em disco de origem, escolha o disco de origem para o instantâneo. O snapshot será criptografado automaticamente com a mesma chave usada pelo disco de origem.

Linha de comando

gcloud compute \
disks snapshot encrypted-disk \
--zone [ZONE]

API

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/example-disk/createSnapshot

{
 "snapshotEncryptionKey":  {
   "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[SNAPSHOT_KEY]"
 },
 "name": "snapshot-encrypted-disk"
}

Não é possível criar um snapshot protegido pela CMEK, a não ser que o próprio disco já esteja protegido por ela. Além disso, não é possível converter discos ou snapshots criptografados para usar a criptografia padrão do Compute Engine, exceto quando você cria uma imagem de disco completamente nova e um novo disco permanente.

Criptografar uma imagem importada

É possível criptografar uma nova imagem ao importar uma imagem personalizada para o Compute Engine. Antes de importar uma imagem, é necessário criar e compactar um arquivo de imagem de disco e fazer upload desse arquivo compactado para o Google Cloud Storage.

Console

  1. No Console do Google Cloud Platform, acesse a página Imagens.

    Acessar a página "Imagens"

  2. Clique em Criar imagem.
  3. Em disco de origem, selecione o disco do qual quer criar uma imagem.
  4. Em Criptografia, selecione Chave gerenciada pelo cliente.
  5. Use o menu suspenso para selecionar a chave do Cloud KMS a ser usada para criptografar essa imagem.
  6. Continue com o processo de criação da imagem.

Linha de comando

gcloud compute \
images create [...] \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

API

Para criptografar uma imagem importada, especifique o URI do arquivo compactado, adicione a propriedade imageEncryptionKey à solicitação de criação de imagem e especifique a chave para criptografar a imagem na propriedade kmsKeyName:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images

{
"rawDisk": {
 "source": "http://storage.googleapis.com/example-image/example-image.tar.gz"
},
"name": "new-encrypted-image",
"sourceType": "RAW",
"imageEncryptionKey": {
  "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[IMAGE_KEY]"
  }
}

Criar um disco permanente a partir de um recurso criptografado

Criar um disco a partir de um instantâneo criptografado

Para criar um novo disco permanente independente usando um snapshot criptografado:

Console

  1. No Console do Google Cloud Platform, acesse a página Discos.

    Acessar a página "Discos"

  2. Clique em Novo disco e insira as propriedades do novo disco.
  3. Em Tipo de origem, selecione o instantâneo ou a imagem que você quer.
  4. Continue com o processo de criação do disco permanente.

Linha de comando

gcloud compute \
disks create [...] \
--source-snapshot example-snapshot \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

Para usar uma imagem em vez de um snapshot, substitua --source-snapshot example-snapshot por --image example-image.

API

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks

{
"name": "disk-from-encrypted-snapshot",
"sourceSnapshot": "global/snapshots/encrypted-snapshot"
}

Como anexar um disco criptografado a uma nova instância

Console

  1. No Console do Google Cloud Platform, acesse a página Instâncias de VMs.

    Acessar a página "Instâncias de VMs" (em inglês)

  2. Clique em Criar instância.
  3. Em disco de inicialização, clique em Alterar.
  4. Clique em discos existentes.
  5. Escolha um disco existente para anexar à instância.
  6. Continue com o processo de criação da instância.

Linha de comando

gcloud compute instances \
create example-instance \
--disk name=encrypted-disk,boot=yes

API

"disks": [
{
  "deviceName": "encrypted-disk",
  "source": "projects/[PROJECT_ID]/zones/[ZONE]/disks/encrypted-disk"
  }
 }
]

Remover a chave de criptografia do Cloud KMS de um disco permanente

É possível descriptografar o conteúdo de um disco criptografado e criar um novo disco que use a criptografia padrão do Compute Engine.

  1. Crie uma imagem do disco criptografado e especifique a criptografia automática nela.
  2. Use a nova imagem para criar um novo disco permanente.

Depois de criar o novo disco permanente, a criptografia padrão do Compute Engine será usada para proteger o conteúdo do disco. Todos os instantâneos criados com base nesse disco precisarão usar a criptografia padrão.

Impacto da desativação ou ativação das chaves de criptografia

A desativação ou exclusão de uma chave de criptografia terá os seguintes efeitos no conteúdo protegido por ela:

  • VMs com discos anexados protegidos pela chave não podem ser inicializadas.
  • Os discos protegidos pela chave não podem ser anexados a máquinas virtuais, nem podem ser criados snapshots para eles.
  • Instantâneos protegidos pela chave não podem ser usados para criar um disco
  • Imagens protegidas pela chave não podem ser usadas para criar um disco.

Se a chave for desabilitada, os efeitos acima poderão ser revertidos com a ativação da chave. Se você excluir a chave, os efeitos acima serão irreversíveis.

Limitações

  • Os recursos regionais (discos) podem ser criptografados por chaves no mesmo local ou em global. Por exemplo, um disco na zona us-west1-a pode ser criptografado por uma chave em us-west1 ou global. Recursos globais (imagens, snapshots) podem ser criptografados por chaves em qualquer local.
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine