Como ajudar a proteger recursos usando 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.

Você tem duas opções de chaves de criptografia de chaves no Compute Engine:

Depois de criar um recurso do Compute Engine que o Cloud KMS ajuda a proteger, não é necessário especificar a chave, porque o Compute Engine sabe qual chave KMS foi usada. Isso é diferente de como o Compute Engine acessa recursos que as chaves fornecidas pelo cliente ajudam a proteger. Para esse acesso, você precisa especificar a chave fornecida pelo cliente.

Saiba mais sobre opções de criptografia no Google Cloud.

Antes de começar

  1. Entenda discos, imagens, snapshots de disco permanente e instâncias de máquina virtual (VM, na sigla em inglês).

  2. Decida se você executará o Compute Engine e o Cloud KMS no mesmo projeto do Google Cloud ou em projetos diferentes.

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

  3. Para o projeto do Google Cloud que executa o Compute Engine, configure o acesso à API para o Compute Engine.

  4. Para o projeto do Cloud que executa o Cloud KMS, faça o seguinte:

    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 Criptografador/Descriptografador de CryptoKey do Cloud KMS ao agente de serviço do Compute Engine. Essa conta tem o seguinte formato:

    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: ID do projeto do Cloud que executa o Cloud KMS, ainda que seja o mesmo projeto que executa o Compute Engine.
    • PROJECT_NUMBER: o número (e não o ID) do projeto do Cloud que executa os recursos do Compute Engine.

Especificações

Nesta seção, descrevemos a especificação de criptografia e as limitações de uso das chaves do Cloud KMS.

Encryption

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

Restrições

  • Só é possível criptografar novos discos permanentes, imagens e instantâneos 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 recebem proteção por uma chave de criptografia efêmera que o Google não reté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 VM ou disco.

Console

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

    Acessar "Discos"

  2. Clique em Novo disco e insira as propriedades do novo disco.
  3. Em Criptografia, selecione Chave gerenciada pelo cliente.
  4. No menu suspenso, selecione a chave do Cloud KMS que você quer usar para criptografar o disco.
  5. Para criar o disco, clique em Criar.

gcloud

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

Substitua:

  • REGION: a região onde o disco está localizado.
  • KEY_RING: o nome do keyring que inclui a chave.
  • KEY: o nome da chave usada para criptografar o disco.

API

Criptografe um disco usando a propriedade diskEncryptionKey com kmsKeyName. Por exemplo, é possível criptografar um novo disco durante a criação da VM com sua chave do Cloud KMS usando:

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

{
"machineType": "zones/ZONE/machineTypes/e2-standard-2",
"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
 }
],
...
}

Substitua:

  • PROJECT_ID: o ID do projeto do Cloud em execução no Compute Engine.
  • ZONE: a zona em que a VM será criada
  • REGION: a região onde o disco está localizado.
  • KEY_RING: o nome do keyring que inclui a chave.
  • KEY: o nome da chave usada para criptografar o disco.

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%2Fprojects%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

Para proteger um snapshot criado a partir de um disco criptografado com a CMEK, use a mesma chave de criptografia usada para criptografar o disco.

Os snapshots de discos criptografados com CMEK são incrementais.

Console

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

    Acesse Snapshots

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

gcloud

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

Substitua ZONE pela zona em que o snapshot será criado.

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"
}

Substitua SNAPSHOT_KEY pelo nome da chave usada para criptografar o disco de origem.

Não é possível criar um snapshot que usa uma CMEK, a menos que o disco de origem também use CMEK. Além disso, não é possível converter discos ou snapshots criptografados para usar a criptografia padrão do Compute Engine, a menos que você crie 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 para o Cloud Storage.

Console

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

    Acessar "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. No menu suspenso, selecione a chave do Cloud KMS que você quer usar para criptografar essa imagem.
  6. Continue com o processo de criação da imagem.

gcloud

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"
  }
}

Substitua IMAGE_KEY pelo nome da chave que você quer usar para criptografar a imagem.

Criar um disco permanente a partir de um recurso criptografado

Criar um disco a partir de um snapshot criptografado

Para criar um novo disco permanente independente usando um snapshot criptografado, faça o seguinte:

Console

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

    Acessar "Discos"

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

gcloud

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 VM

Console

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

    Acessar instâncias de VM

  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.

gcloud

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. Por padrão, o Compute Engine criptografa todos os dados em repouso.

  1. Crie um snapshot do disco de inicialização.
  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 snapshots criados a partir desse disco também precisarão usar a criptografia padrão.

Fazer a rotação da chave de criptografia do Cloud KMS para um disco permanente

Faça a rotação da chave utilizada para criptografar o disco criando um novo disco que use uma nova versão de chave do Cloud KMS. A rotação de chaves é uma prática recomendada para cumprir as práticas de segurança padronizadas. Para fazer a rotação das chaves:

  1. Faça a rotação da chave do Cloud KMS.
  2. Crie um snapshot do disco de inicialização.
  3. Use o novo snapshot para criar um novo disco permanente com a chave rotacionada na etapa 1.

Quando você cria o novo disco permanente, ele usa a nova versão de chave para criptografia. Todos os snapshots criados a partir desse disco também usarão a mesma versão de chave.

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

Desativar ou excluir uma chave de criptografia tem os seguintes efeitos nestes recursos que são protegidos pela chave:

  • VMs com discos anexados não podem ser inicializadas. Se você tiver ativado o encerramento da VM na revogação de chaves, as VMs com discos anexados que a chave ajuda a proteger serão desativadas.
  • Os discos não podem ser anexados a VMs, nem podem ser criados snapshots para elas.
  • Não é possível usar snapshots para criar um disco.
  • Não é possível usar imagens para criar um disco.

Se você desativar a chave, poderá reverter os efeitos anteriores ativando-a. Se você excluir a chave, não poderá reverter os efeitos anteriores.

Configurar o encerramento da VM na revogação de chave do Cloud KMS

Você pode configurar sua VM para ser encerrada automaticamente quando revogar a chave do Cloud KMS que está ajudando a proteger um disco permanente anexado à VM. É possível revogar uma chave desativando-a ou excluindo-a. Com essa configuração ativada, a VM é encerrada dentro de três horas após a revogação da chave.

Se você ativar a chave novamente, reinicie a VM com o disco anexado que ela ajuda a proteger. A VM não é reiniciada automaticamente depois que você ativa a chave.

É possível configurar uma VM para encerrar a revogação da chave ao criar a VM usando a ferramenta gcloud ou a API Compute Engine.

gcloud

Use o comando gcloud beta compute instances create para criar uma VM e defina o campo --post-key-revocation-action-type=shutdown.

gcloud beta compute instances create VM_NAME
    --image IMAGE
    --post-key-revocation-action-type=shutdown

API

Use o método instances.insert para criar uma VM e defina o campo "postKeyRevocationActionType": "SHUTDOWN". O exemplo a seguir cria a VM a partir de uma imagem pública.

 POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances

{ "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot": true } ], "postKeyRevocationActionType": "SHUTDOWN" }

Como alternativa, é possível configurar um modelo de instância para criar VMs que são encerradas na revogação de chaves usando a ferramenta gcloud ou a API Compute Engine.

gcloud

Crie um modelo de instância usando o comando instance-templates create e defina o campo --post-key-revocation-action-type=shutdown.

gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --post-key-revocation-action-type=shutdown

API

Crie um modelo de instância usando o método instanceTemplates().insert. Na API do modelo de instância, defina explicitamente todos os campos de configuração obrigatórios. Se você quiser que as VMs criadas a partir deste modelo sejam encerradas na revogação da chave, especifique "postKeyRevocationActionType": "SHUTDOWN". Por exemplo, um modelo de instância com o mínimo de campos obrigatórios que criará VMs que encerram na revogação da chave é semelhante ao seguinte:

  {
  "name": "example-template",
  "properties": {
    "machineType": "e2-standard-4",
    "networkInterfaces": [
      {
        "network": "global/networks/default",
        "accessConfigs":
        [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ]
      }
    ],
    "disks":
    [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "projects/debian-cloud/global/images/family/debian-9"
        }
      }
    ],
    "postKeyRevocationActionType": "SHUTDOWN"
    }
  }
  

Depois de criar uma VM configurada para encerrar com a revogação do Cloud KMS, crie e anexe um disco permanente criptografado com uma chave do Cloud KMS.

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.

  • A criptografia de discos, snapshots ou imagens com uma chave é permanente. Não é possível remover a criptografia do recurso ou alterar a chave usada. A única maneira de remover as chaves de criptografia ou de alteração é criar uma cópia do recurso ao especificar uma nova opção de criptografia.