Proteger os recursos usando chaves do Cloud KMS


Neste documento, fornecemos informações sobre como usar chaves do Cloud Key Management Service Cloud KMS criadas manualmente para criptografar discos e outros recursos relacionados ao armazenamento. As chaves gerenciadas no Cloud KMS são conhecidas como chaves de criptografia gerenciadas pelo cliente (CMEKs).

É possível usar as CMEKs para criptografar recursos do Compute Engine, como discos, imagens de máquina, snapshots instantâneos e snapshots padrão.

Para saber mais sobre o uso de chaves de criptografia fornecidas pelo cliente (CSEKs) para criptografar discos e outros recursos de armazenamento, consulte Como criptografar discos com chaves de criptografia fornecidas pelo cliente.

Saiba mais sobre a criptografia de disco.

Antes de começar

  • Entenda discos, imagens, snapshots de disco permanente e instâncias de máquina virtual (VM, na sigla em inglês).
  • 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 Google Cloud, consulte Como identificar projetos.
  • Para o projeto do Google Cloud que executa o Cloud KMS, faça o seguinte:
    1. Enable the Cloud KMS API.

      Enable the API

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine da seguinte maneira.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.

Funções exigidas

Para garantir que o agente de serviço do Compute Engine tenha as permissões necessárias para proteger recursos usando as chaves do Cloud KMS, peça ao administrador para conceder ao agente de serviço do Compute Engine o Papel do IAM de criptografador/descriptografador de CryptoKey do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) no seu projeto. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

O administrador também pode conceder ao agente de serviço do Compute Engine as permissões necessárias por meio de papéis personalizados ou outros papéis predefinidos.

O agente de serviço do Compute Engine tem o seguinte formato:

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

Use Google Cloud CLI para atribuir a função:

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 do projeto do Google Cloud (não o ID do projeto do Google Cloud) que executa os recursos do Compute Engine.

Especificações de criptografia

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 que criptografam as chaves de criptografia de dados que criptografam seus dados, não os dados em si.

Os dados nos discos são criptografados com chaves de propriedade e gerenciadas pelo Google. Para conferir especificações relacionadas à criptografia padrão no Google Cloud, consulte Criptografia padrão em repouso na documentação de segurança.

Com o modo confidencial para Hyperdisk Balanced e Cloud HSM, a chave de criptografia de dados (DEK) tem propriedades de segurança adicionais com enclaves com suporte de hardware.

Limitações

  • Não é possível criptografar recursos atuais com CMEKs. Só é possível criptografar discos, imagens e snapshots com CMEKs quando você os cria.

  • Ao criar um disco a partir de um snapshot instantâneo criptografado por CMEK, é necessário especificar a chave usada para criptografar o disco de origem. Não é necessário especificar a chave ao trabalhar com outros recursos criptografados por CMEK, como clones de disco e snapshots padrão.

  • Não é possível usar suas próprias chaves com discos SSD locais porque elas são gerenciadas pela infraestrutura do Google Cloud e excluídas quando a VM é encerrada.

  • Os recursos regionais (discos) só podem ser criptografados por uma chave em um dos seguintes locais do Cloud KMS:

    • Uma chave na mesma região do disco
    • Uma chave multirregional no mesmo local geográfico do disco
    • Uma chave no local global.

    Por exemplo, um disco na zona us-west1-a pode ser criptografado por uma chave no local global, na região us-west1 ou na multirregião us.

    Os recursos globais (como imagens e snapshots) podem ser criptografados por chaves em qualquer local. Para mais informações, consulte Tipos de locais do Cloud KMS.

  • 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.

  • O modo confidencial para Hyperdisk Balanced herda as limitações atuais do hiperdisco e tem as seguintes limitações:

    • Só é possível anexar discos do Hyperdisk Balanced no modo confidencial a VMs N2D com VMs confidenciais ou nós confidenciais do Google Kubernetes Engine nas seguintes regiões:
      • europe-west4
      • us-central1
      • us-east4
      • us-east5
      • us-south1
      • us-west4
    • Não é possível suspender ou retomar uma instância de máquina virtual (VM) com o modo Confidencial anexado para discos Hyperdisk Balanced.
    • Não é possível usar pools de armazenamento de hiperdisco com o modo confidencial para o Hyperdisk Balanced.
    • Não é possível criar imagens personalizadas no modo confidencial para discos Hyperdisk Balanced.

Criação manual ou automatizada de chaves

É possível criar chaves do Cloud KMS manualmente ou usar a chave automática do Cloud KMS (pré-lançamento). O Autokey simplifica a criação e o gerenciamento de chaves do Cloud KMS automatizando o provisionamento e a atribuição. Com ele, não é preciso provisionar keyrings, chaves e contas de serviço com antecedência. Em vez disso, eles são gerados sob demanda como parte da criação de recursos do Compute Engine. Para ver mais informações, consulte a Visão geral das chaves automáticas.

Criar um keyring e uma chave manualmente

Para o projeto do Google Cloud que executa o Cloud KMS, crie um keyring e uma chave, conforme descrito em Como criar keyrings e chaves.

Criptografar um novo disco permanente com a CMEK

É 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, 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

Crie um disco criptografado usando o comando gcloud compute disks create e especifique a chave usando a flag --kms-key.

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

Substitua:

  • DISK_NAME: o nome do novo disco
  • KMS_PROJECT_ID: o projeto proprietário da chave do Cloud KMS.
  • REGION: a região em que a chave está localizada.
  • KEY_RING: o nome do keyring que inclui a chave
  • KEY: o nome da chave usada para criptografar o disco

REST

Crie uma solicitação POST para o método instances.insert. Para criptografar um disco, use a propriedade diskEncryptionKey com a propriedade 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/MACHINE_TYPE",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
  "initializeParams": {
   "sourceImage": "SOURCE_IMAGE"
  },
  "boot": true
 }
],
...
}

Substitua:

  • PROJECT_ID: o ID do projeto do Google Cloud que executa o Compute Engine
  • ZONE: a zona em que a VM será criada
  • MACHINE_TYPE: o tipo de máquina, por exemplo, c3-standard-4.
  • KMS_PROJECT_ID: o projeto proprietário da chave do Cloud KMS.
  • 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.
  • SOURCE_IMAGE: a imagem a ser usada ao criar a VM, por exemplo, projects/debian-cloud/global/images/debian-11-bullseye-v20231115.

Da mesma forma, use o método disks.insert para criar um novo Persistent Disk independente e criptografá-lo com a chave do Cloud KMS:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks?sourceImage=SOURCE_IMAGE
{
 "name": "DISK_NAME",
 "diskEncryptionKey": {
   "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
 "type": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE"
}

Substitua:

  • PROJECT_ID: o ID do projeto do Google Cloud que executa o Compute Engine
  • ZONE: a zona em que o disco será criado
  • SOURCE_IMAGE: a imagem a ser usada ao criar o disco, por exemplo, projects/debian-cloud/global/images/debian-11-bullseye-v20231115
  • DISK_NAME: um nome para o novo disco
  • KMS_PROJECT_ID: o projeto proprietário da chave do Cloud KMS.
  • 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.
  • DISK_TYPE: o tipo de disco a ser criado

Criar um volume do Hyperdisk Balanced no modo confidencial

Para criar um novo hiperdisco no modo confidencial com o console do Google Cloud, a CLI do Google Cloud ou o REST.

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. Na seção Configurações de disco, escolha Hyperdisk Balanced como o tipo de disco.
  4. Opcional. Altere as configurações de Tamanho, IOPS provisionadas e Capacidade de processamento provisionada do disco padrão.
  5. Na seção Criptografia, selecione Chave do Cloud KMS.
  6. Na lista de chaves, selecione a chave do Cloud HSM que você quer usar para criptografar o disco.
  7. Na seção Computação confidencial, selecione Ativar serviços de Computação confidencial.
  8. Para criar o disco, clique em Criar.

gcloud

Criptografe um novo disco com o modo confidencial para o Hyperdisk Balanced usando o comando gcloud compute disks create. Ative o modo confidencial com a flag --confidential-compute e especifique a chave usando a flag --kms-key.

gcloud compute disks create DISK_NAME \
  --type=hyperdisk-balanced \
  --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY \
  --confidential-compute

Substitua:

  • DISK_NAME: o nome do novo disco.
  • KMS_PROJECT_ID: o projeto proprietário da chave do Cloud HSM.
  • REGION: a região em que a chave está localizada.
  • KEY_RING: o nome do keyring que inclui a chave
  • KEY: o nome da chave usada para criptografar o disco

REST

Crie uma solicitação POST para o método instances.insert. Para criptografar um disco com o modo confidencial para o Hyperdisk Balanced, use a propriedade diskEncryptionKey com a propriedade kmsKeyName e defina a flag enableConfidentialCompute. Por exemplo, é possível criptografar um novo disco durante a criação da VM com sua chave do Cloud HSM usando:

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

{
"machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
"disks": [
 {
  "type": "DISK_TYPE",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
  "initializeParams": {
   "sourceImage": "SOURCE_IMAGE",
   "enableConfidentialCompute": true
  },
  "boot": true
 }
],
"networkInterfaces": [
  {
   "network": "global/networks/default"
  }
]
}

Substitua:

  • DISK_TYPE: o tipo de disco a ser criado, por exemplo, hyperdisk-balanced.
  • PROJECT_ID: o ID do projeto do Google Cloud que executa o Compute Engine
  • ZONE: a zona em que a VM será criada
  • MACHINE_TYPE: o tipo de máquina, por exemplo, n2d-standard-4.
  • KMS_PROJECT_ID: o projeto proprietário da chave do Cloud HSM.
  • 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
  • SOURCE_IMAGE: a imagem que oferece suporte à VM confidencial a ser usada ao criar a VM, por exemplo, projects/debian-cloud/global/images/debian-11-bullseye-v20231115.

Da mesma forma, use o método disks.insert para criar um novo modo confidencial para o Hyperdisk Balanced:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks?sourceImage=SOURCE_IMAGE
{
 "name": "DISK_NAME",
 "diskEncryptionKey": {
   "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
 "type": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE",
 "enableConfidentialCompute": true
}

Substitua:

  • PROJECT_ID: o ID do projeto do Google Cloud que executa o Compute Engine
  • ZONE: a zona em que o disco será criado
  • SOURCE_IMAGE: a imagem que oferece suporte à VM confidencial ao criar o disco, por exemplo, projects/debian-cloud/global/images/debian-11-bullseye-v20231115.
  • DISK_NAME: um nome para o novo disco
  • KMS_PROJECT_ID: o projeto proprietário da chave do Cloud HSM.
  • 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.
  • DISK_TYPE: o tipo de disco a ser criado, por exemplo, hyperdisk-balanced.

Criar um snapshot a partir de um disco criptografado com a CMEK

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.

Não é possível criar um snapshot que use 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 por CMEKs para usar a criptografia padrão do Google Cloud, a menos que você crie uma imagem de disco completamente nova e um novo disco permanente.

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

Para criptografia gerenciada pelo cliente, a chave do Cloud KMS que foi usada para criptografar o disco também é usada para criptografar o snapshot.

Crie o snapshot na política de local de armazenamento definida pelas configurações do snapshot ou usando um local de armazenamento alternativo de sua escolha. Para mais informações, consulte Escolher o local de armazenamento dos snapshots.

  • Para criar um snapshot no local padrão predefinido ou personalizado definido nas configurações do snapshot, use o comando gcloud compute snapshots create.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE
    
  • Como alternativa, para substituir as configurações de snapshot e criar um snapshot em um local de armazenamento personalizado, inclua a flag --storage-location para indicar onde ele deve ser armazenado:

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --storage-location=STORAGE_LOCATION
    

    Substitua:

    • SNAPSHOT_NAME: um nome para o snapshot.
    • SOURCE_ZONE: a zona do disco de origem.
    • SOURCE_DISK_NAME: o nome do volume de disco a partir do qual você quer criar um snapshot.
    • SNAPSHOT_TYPE: o tipo de snapshot, que é STANDARD ou ARCHIVE. Se um tipo de snapshot não for especificado, um snapshot STANDARD será criado.
    • STORAGE_LOCATION (opcional): a multirregião do Cloud Storage ou a região do Cloud Storage onde você quer armazenar o snapshot. É possível especificar apenas um local de armazenamento.

      Use o parâmetro --storage-location somente quando quiser substituir o local de armazenamento padrão predefinido ou personalizado que está definido nas configurações de snapshot.

REST

Crie o snapshot na política de local de armazenamento definida pelas configurações do snapshot ou usando um local de armazenamento alternativo de sua escolha. Para mais informações, consulte Escolher o local de armazenamento dos snapshots.

  • Para criar o snapshot no local padrão predefinido ou personalizado configurado nas configurações de snapshot, faça uma solicitação POST para o método snapshots.insert.

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
        "name": "SNAPSHOT_NAME",
        "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
        "snapshotEncryptionKey":  {
         "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY"
        },
        "snapshotType": "SNAPSHOT_TYPE"
    }
    
  • Como alternativa, para substituir as configurações de snapshot e criar um snapshot em um local de armazenamento personalizado, faça uma solicitação POST ao método snapshots.insert e inclua nela a propriedade storageLocations:

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
        "name": "SNAPSHOT_NAME",
        "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
        "snapshotEncryptionKey":  {
         "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY"
        },
        "snapshotType": "SNAPSHOT_TYPE",
        "storageLocations": [
            "STORAGE_LOCATION"
        ],
    }
    

Substitua:

  • DESTINATION_PROJECT_ID: o ID do projeto em que você quer criar o snapshot.
  • SNAPSHOT_NAME: um nome para o snapshot.
  • SOURCE_PROJECT_ID: o ID do projeto de disco de origem.
  • SOURCE_ZONE: a zona do disco de origem.
  • SOURCE_DISK_NAME: o nome do disco a partir do qual você quer criar um snapshot.
  • KMS_PROJECT_ID: o projeto que contém a chave de criptografia armazenada no Cloud Key Management Service.
  • KEY_REGION: a região onde a chave do Cloud KMS está localizada.
  • KEY_RING: o nome do keyring que contém a chave do Cloud KMS.
  • SNAPSHOT_KEY: o nome da chave do Cloud KMS que você usou para criptografar o disco de origem.
  • SNAPSHOT_TYPE: o tipo de snapshot, que é STANDARD ou ARCHIVE. Se um tipo de snapshot não for especificado, um snapshot STANDARD será criado.
  • STORAGE_LOCATION (opcional): a multirregião do Cloud Storage ou a região do Cloud Storage onde você quer armazenar o snapshot. É possível especificar apenas um local de armazenamento.

    Use o parâmetro storageLocations somente quando quiser substituir o local de armazenamento padrão predefinido ou personalizado que está definido nas configurações de snapshot.

Criptografar uma imagem importada com a CMEK

É 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

Para importar e criptografar uma imagem, use o comando gcloud compute images create. Para criptografia gerenciada pelo cliente, especifique a chave do Cloud KMS para a imagem.

gcloud compute images create IMAGE_NAME \
    --source-disk=SOURCE_DISK  \
    --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

Substitua:

  • IMAGE_NAME: o nome da imagem que você está criando
  • SOURCE_DISK: o nome do disco para criar um snapshot
  • KMS_PROJECT_ID: o projeto que contém a chave do Cloud KMS
  • REGION: a região em que a chave do Cloud KMS está localizada
  • KEY_RING: o keyring que contém a chave do Cloud KMS
  • KEY: o nome da chave a ser usada para criptografar o novo disco

REST

Para criptografar uma imagem importada, crie uma solicitação POST para o método images.insert. 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": "IMAGE_NAME",
 "sourceType": "RAW",
 "imageEncryptionKey": {
   "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
   }
}

Substitua:

  • PROJECT_ID: o projeto em que a imagem criptografada será criada
  • IMAGE_NAME: o nome da imagem que você está criando
  • KMS_PROJECT_ID: o projeto que contém a chave do Cloud KMS
  • REGION: a região em que a chave do Cloud KMS está localizada
  • KEY_RING: o keyring que contém a chave do Cloud KMS
  • KEY: o nome da chave que você usou para criptografar o disco de origem

Criar um disco a partir de um snapshot criptografado com a CMEK

Para criar um novo disco permanente independente de 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 usar.
  4. Opcional: para definir uma nova chave de criptografia, em Criptografia, especifique o tipo de chave a ser usada e forneça as informações da chave.

    Se você quiser remover a chave de criptografia gerenciada ou fornecida pelo cliente, em Criptografar, use o valor padrão Chave de criptografia gerenciada pelo Google.

  5. Continue com o processo de criação do disco permanente.

gcloud

Use o comando gcloud compute disks create para criar um novo disco permanente independente de um snapshot criptografado.

gcloud compute disks create DISK_NAME \
    --source-snapshot SNAPSHOT_NAME \
    --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

Substitua:

  • DISK_NAME: o nome do novo disco
  • SNAPSHOT_NAME: o nome do snapshot criptografado.

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

  • KMS_PROJECT_ID (opcional): o projeto que contém a chave do Cloud KMS.

  • REGION (opcional): a região em que a chave do Cloud KMS está localizada

  • KEY_RING (opcional): o keyring que contém a chave do Cloud KMS

  • KEY (opcional): o nome da chave do Cloud KMS a ser usada para criptografar o novo disco

    Para criptografar o novo disco, siga um destes procedimentos:

    • Para especificar uma nova chave de criptografia gerenciada pelo cliente, use a flag --kms-key.
    • Para usar a chave padrão de propriedade e gerenciada pelo Google, não inclua a flag --kms-key.

REST

Crie uma solicitação POST para o método compute.disks.insert para criar um novo disco permanente independente de um snapshot criptografado. Use a propriedade sourceSnapshot para especificar o snapshot.

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

{
  "name": "DISK_NAME",
  "sourceSnapshot": "projects/SNAPSHOT_PROJECT_ID/global/snapshots/SNAPSHOT_NAME",
  "diskEncryptionKey": {
     "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  }
}

Substitua:

  • PROJECT_ID: o projeto em que o novo disco será criado
  • ZONE: a zona em que o novo disco será criado
  • DISK_NAME: o nome do novo disco
  • SNAPSHOT_PROJECT_ID: o projeto que contém o snapshot
  • SNAPSHOT_NAME: o nome do snapshot criptografado.

    Para usar uma imagem em vez de um snapshot, substitua sourceSnapshot por sourceImage.

  • KMS_PROJECT_ID (opcional): o projeto que contém a chave do Cloud KMS.

  • REGION (opcional): a região em que a chave do Cloud KMS está localizada

  • KEY_RING (opcional): o keyring que contém a chave do Cloud KMS

  • KEY (opcional): o nome da chave do Cloud KMS a ser usada para criptografar o novo disco

    Se você incluir diskEncryptionKey, o disco será criptografado com a chave do Cloud KMS especificada. Se você não incluir diskEncryptionKey, o disco será criptografado usando uma chave de propriedade e gerenciada pelo Google.

Como anexar um disco de inicialização criptografado com a CMEK a uma nova VM

Console

  1. No console do Google Cloud, acesse a página Criar uma instância.

    Acesse "Criar uma instância"

  2. Especifique os detalhes da VM e, na seção Disco de inicialização, clique em Alterar. Em seguida, faça o seguinte:

    1. Clique em discos existentes.
    2. Na lista Disco, selecione um disco existente para anexar à VM.
    3. Clique em Selecionar.
  3. Continue com o processo de criação da VM.

gcloud

Para anexar um disco criptografado ao criar uma nova VM, use o comando gcloud compute instances create. Use a flag --disk para especificar o disco de inicialização criptografado, conforme mostrado no exemplo a seguir:

gcloud compute instances create VM_NAME \
  ...
  --disk name=DISK_NAME,boot=yes

Substitua:

  • VM_NAME: o nome da VM que você está criando
  • DISK_NAME: o nome do disco criptografado

REST

Crie uma solicitação POST para o método compute.instances.insert. Use a propriedade disks para especificar o disco de inicialização criptografado, conforme mostrado no exemplo a seguir:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
  ...
  "disks": [
    {
      "deviceName": "DISK_ALIAS",
      "source": "projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME"
    }
  ]
}

Substitua:

  • PROJECT_ID: o projeto em que a nova VM será criada.
  • ZONE: zona em que a VM será criada
  • DISK_ALIAS: um nome de dispositivo exclusivo a ser usado como o alias de disco no diretório /dev/disk/by-id/google-* da VM que executa um sistema operacional Linux. Esse nome pode ser usado para fazer referência ao disco em operações como montagem ou redimensionamento na instância. Se você não especificar um nome de dispositivo, a VM escolherá um nome de dispositivo padrão para aplicar a esse disco, no formato persistent-disk-x, em que x é um número atribuído pelo no Compute Engine. Esse campo só é aplicável a volumes do Persistent Disk.
  • DISK_NAME: o nome do disco criptografado

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 Google Cloud criptografa todos os dados em repouso.

  1. Crie um snapshot do disco de inicialização.
  2. Use o novo snapshot criptografado para criar um novo disco permanente.

Depois de criar o novo disco permanente, a criptografia padrão do Google Cloud 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

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 revezar suas chaves, faça o seguinte:

  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 com a chave girada na etapa anterior.
  4. Substitua o disco anexado à VM que usa a chave de criptografia antiga.

Quando você cria o novo disco, ele usa a nova versão de chave para criptografia. Todos os snapshots criados com base nesse disco usam a versão mais recente da chave primária.

Quando você faz a rotação de uma chave, os dados que foram criptografados com versões anteriores não são recriptografados automaticamente. Para mais informações, consulte Como recriptografar dados. Girar uma chave não desativa ou destrói automaticamente uma versão atual dela.

Impacto da desativação ou exclusão de CMEKs

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 sete 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.

Console

Para configurar o encerramento da VM quando uma chave do Cloud KMS é revogada, faça o seguinte:

  1. Comece a criar uma VM que inclua um disco protegido por uma chave do Cloud KMS.
  2. Abra a seção Rede, discos, segurança, gerenciamento, locação individual.
  3. Expanda a seção Gerenciamento.
  4. Em Política de revogação da chave de criptografia gerenciada pelo cliente (CMEK), selecione Encerrar.

gcloud

Use o comando gcloud compute instances create para criar uma VM e inclua --key-revocation-action-type=stop.

gcloud compute instances create VM_NAME \
  --image IMAGE \
  --key-revocation-action-type=stop

REST

Use o método instances.insert para criar uma VM e defina a propriedade "keyRevocationActionType" como "STOP". O exemplo a seguir cria a VM a partir de uma imagem pública.

POST https://compute.googleapis.com/compute/v1/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
    }
  ],
  "keyRevocationActionType": "STOP"
}

Também é possível configurar um modelo de instância para criar VMs que são encerradas na revogação de chave usando a CLI do Google Cloud ou REST.

Console

É possível usar um modelo de instância para criar VMs que são encerradas quando uma chave do Cloud KMS é revogada.

  1. Comece a criar um novo modelo de instância que inclua um disco protegido por uma chave do Cloud KMS.
  2. Abra a seção Rede, discos, segurança, gerenciamento, locação individual.
  3. Expanda a seção Gerenciamento.
  4. Em Política de revogação da chave de criptografia gerenciada pelo cliente (CMEK), selecione Encerrar.

gcloud

Crie um modelo de instância usando o comando gcloud compute instance-templates create e inclua --key-revocation-action-type=stop.

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
  --key-revocation-action-type=stop

REST

Envie uma solicitação POST ao método instanceTemplates.insert. No corpo da solicitação, é preciso definir explicitamente todos os campos de configuração necessários. Se você quiser que as VMs criadas a partir deste modelo sejam encerradas na revogação da chave, especifique "keyRevocationActionType":"STOP". 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:

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

{
  "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-11"
      }
    }
  ],
  "keyRevocationActionType": "STOP"
  }
}

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