Encripte discos com chaves de encriptação fornecidas pelos clientes


Este documento aborda a forma de encriptar discos com chaves de encriptação fornecidas pelo cliente.

Para obter informações sobre a encriptação de disco, consulte o artigo Acerca da encriptação de disco.

Para ver informações sobre a encriptação de discos com chaves de encriptação geridas pelo cliente (CMEK), consulte Proteja os recursos através de chaves do Cloud KMS.

A utilização de CSEKs significa que fornece as suas próprias chaves de encriptação e o Compute Engine usa as suas chaves para proteger os dados usados para encriptar e desencriptar os seus dados. Google-owned and Google-managed encryption keys Apenas os utilizadores que podem fornecer a chave correta podem usar recursos protegidos por uma chave de encriptação fornecida pelo cliente (CSEK).

A Google não armazena as suas chaves nos respetivos servidores e não pode aceder aos seus dados protegidos, a menos que faculte a chave. Isto também significa que, se se esquecer ou perder a chave, não existe forma de a Google recuperar a chave ou recuperar quaisquer dados encriptados com a chave perdida.

Quando elimina um volume do disco persistente, a Google rejeita as chaves de cifragem, o que torna os dados irrecuperáveis. Este processo é irreversível.

Antes de começar

  • Leia acerca dos discos, imagens e instantâneos de discos.
  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-se no Compute Engine selecionando uma das seguintes opções:

    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. Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

    Python

    Para usar os Python exemplos nesta página num ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure as Credenciais predefinidas da aplicação com as suas credenciais de utilizador.

      Instale a CLI Google Cloud.

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para mais informações, consulte Set up authentication for a local development environment.

    REST

    Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

      Instale a CLI Google Cloud.

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

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

Restrições

Para CSEK, aplicam-se as seguintes restrições:

Restrições gerais

A disponibilidade das chaves de encriptação fornecidas pelo cliente depende da localização da sua conta de faturação e não da localização do recurso.

As chaves de encriptação fornecidas pelos clientes não estão disponíveis para contas de faturação que se encontram nos seguintes países:

  • Brasil
  • Índia

Restrições técnicas

  • Só pode encriptar novos discos persistentes com a sua própria chave. Não pode encriptar discos persistentes existentes com a sua própria chave.

  • Não pode usar as suas próprias chaves com discos SSD locais porque os discos SSD locais usam Google-owned and Google-managed encryption keys. As chaves são eliminadas quando a VM é terminada.

  • O Compute Engine não armazena chaves de encriptação com modelos de instâncias, pelo que tem de armazenar as suas próprias chaves no KMS para encriptar discos num grupo de instâncias gerido.

  • Não é possível suspender instâncias com discos protegidos por CSEK anexados.

Especificações

Esta secção descreve a especificação de encriptação e o formato da CSEK.

Encriptação

O Compute Engine usa a sua chave de encriptação para proteger as chaves de encriptação da Google com a encriptação AES-256.

Formato de chave obrigatório

A geração e a gestão da chave são da sua responsabilidade. Tem de fornecer uma chave que seja uma string de 256 bits codificada na base64 padrão RFC 4648 para o Compute Engine.

Segue-se um exemplo de uma chave codificada em base64, gerada com a string "Hello from Google Cloud Platform"

SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=

Pode ser gerado através do seguinte script:

read -sp "String:" ; \
    [[ ${#REPLY} == 32 ]] && \
        echo "$(echo -n "$REPLY" | base64)" || \
        (>&2 echo -e "\nERROR:Wrong Size"; false)

Encriptação de chaves RSA

Além de codificar a chave em base64, pode, opcionalmente, encapsular a chave com um certificado de chave pública RSA fornecido pela Google, codificar a chave em base64 e, em seguida, usar essa chave nos seus pedidos.

A união RSA é um processo no qual usa uma chave pública para encriptar os seus dados. Depois de os dados serem encriptados com a chave pública, só podem ser desencriptados com a chave privada respetiva. Neste caso, a chave privada é conhecida apenas pelos serviços Google Cloud . Ao encapsular a sua chave através do certificado RSA, garante que apenas os serviços Google Cloud podem desencapsular a sua chave e usá-la para proteger os seus dados.

Para mais informações, consulte o artigo Encriptação RSA.

Para criar uma chave envolvida em RSA para o Compute Engine, faça o seguinte:

  1. Encapsule a sua chave com a chave pública fornecida num certificado que o Compute Engine gere. Certifique-se de que envolve a chave com o preenchimento OAEP e não com o preenchimento PKCS #1 v1.5.
  2. Codifique a chave envolvida em RSA através da codificação base64 padrão.

Transfira o certificado público mantido pelo Compute Engine a partir de:

https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem

Existem várias formas de gerar e aplicar o wrapper RSA à sua chave. Use um método que lhe seja familiar. Seguem-se dois exemplos de encapsulamento RSA da chave que pode usar.

Exemplo 1

As instruções seguintes usam o utilitário de linha de comandos openssl para aplicar o RSA-wrap e codificar uma chave.

  1. Opcional: gere uma chave aleatória de 256 bits (32 bytes). Se já tiver uma chave que quer usar, pode ignorar este passo. Existem várias formas de gerar uma chave. Por exemplo:

    $ head -c 32 /dev/urandom | LC_CTYPE=C tr '\n' = > mykey.txt
    
  2. Transfira o certificado de chave pública:

    $  curl -s -O -L https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem
  3. Extraia a chave pública do certificado:

    $ openssl x509 -pubkey -noout -in google-cloud-csek-ingress.pem > pubkey.pem
    
  4. Aplique o wrapper RSA à sua chave, certificando-se de que substitui mykey.txt pelo seu próprio ficheiro de chave.

    $ openssl rsautl -oaep -encrypt -pubin -inkey pubkey.pem -in mykey.txt -out rsawrappedkey.txt
    
  5. Codifique a chave envolvida em RSA em base64.

    $ openssl enc -base64 -in rsawrappedkey.txt | tr -d '\n' | sed -e '$a\' > rsawrapencodedkey.txt
    

Exemplo 2

Segue-se um exemplo de script Python que gera uma string aleatória de 256 bits (32 bytes) e cria uma chave envolvida em RSA codificada em base64 através da biblioteca cryptography:

import argparse
import base64
import os
from typing import Optional

from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicKey
import requests


GOOGLE_PUBLIC_CERT_URL = (
    "https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem"
)


def get_google_public_cert_key() -> RSAPublicKey:
    """
    Downloads the Google public certificate.

    Returns:
        RSAPublicKey object with the Google public certificate.
    """
    r = requests.get(GOOGLE_PUBLIC_CERT_URL)
    r.raise_for_status()

    # Load the certificate.
    certificate = x509.load_pem_x509_certificate(r.content, default_backend())

    # Get the certicate's public key.
    public_key = certificate.public_key()

    return public_key


def wrap_rsa_key(public_key: RSAPublicKey, private_key_bytes: bytes) -> bytes:
    """
    Use the Google public key to encrypt the customer private key.

    This means that only the Google private key is capable of decrypting
    the customer private key.

    Args:
        public_key: The public key to use for encrypting.
        private_key_bytes: The private key to be encrypted.

    Returns:
        private_key_bytes encrypted using the public_key. Encoded using
        base64.
    """
    wrapped_key = public_key.encrypt(
        private_key_bytes,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA1()),
            algorithm=hashes.SHA1(),
            label=None,
        ),
    )
    encoded_wrapped_key = base64.b64encode(wrapped_key)
    return encoded_wrapped_key


def main(key_file: Optional[str]) -> None:
    """
    This script will encrypt a private key with Google public key.

    Args:
        key_file: path to a file containing your private key. If not
            provided, a new key will be generated (256 bit).
    """
    # Generate a new 256-bit private key if no key is specified.
    if not key_file:
        customer_key_bytes = os.urandom(32)
    else:
        with open(key_file, "rb") as f:
            customer_key_bytes = f.read()

    google_public_key = get_google_public_cert_key()
    wrapped_rsa_key = wrap_rsa_key(google_public_key, customer_key_bytes)

    b64_key = base64.b64encode(customer_key_bytes).decode("utf-8")

    print(f"Base-64 encoded private key: {b64_key}")
    print(f"Wrapped RSA key: {wrapped_rsa_key.decode('utf-8')}")


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter
    )
    parser.add_argument("--key_file", help="File containing your binary private key.")

    args = parser.parse_args()

    main(args.key_file)

A sua chave já está pronta a usar!

Use uma chave envolvida em RSA

Através da CLI do Google Cloud, pode fornecer uma chave normal e uma chave envolvida em RSA da mesma forma.

Na API, use a propriedade sha256 em vez de rawKey se quiser usar uma chave envolvida em RSA.

Encriptar recursos com CSEK através da ferramenta de linha de comandos

Configuração

As chaves de encriptação podem ser usadas através da CLI do Google Cloud.

Transfira e instale o gcloud.

Ficheiro de chave

Quando usa a ferramenta de linha de comandos gcloud compute para definir as chaves, fornece chaves codificadas através de um ficheiro de chaves que contém as chaves codificadas como uma lista JSON. Um ficheiro de chaves pode conter várias chaves, o que lhe permite gerir muitas chaves num único local. Em alternativa, pode criar ficheiros de chave únicos para processar cada chave separadamente. Um ficheiro de chave só é utilizável com a CLI gcloud. Quando usar REST, tem de fornecer a chave diretamente no seu pedido.

Cada entrada no ficheiro de chaves tem de fornecer:

  • O URI totalmente qualificado para o recurso que a chave protege
  • A chave correspondente
  • O tipo de chave, raw ou rsa-encrypted

Quando usa o ficheiro de chave nos seus pedidos, a ferramenta procura recursos correspondentes e usa as chaves respetivas. Se não forem encontrados recursos correspondentes, o pedido falha.

Um ficheiro de chave de exemplo tem o seguinte aspeto:

[
  {
  "uri": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks/example-disk",
  "key": "acXTX3rxrKAFTF0tYVLvydU1riRZTvUNC4g5I11NY+c=",
  "key-type": "raw"
  },
  {
  "uri": "https://www.googleapis.com/compute/v1/projects/myproject/global/snapshots/my-private-snapshot",
  "key": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==",
  "key-type": "rsa-encrypted"
  }
]

Práticas recomendadas para gerir o ficheiro de chave

Se usar um ficheiro de chave, restrinja o acesso ao ficheiro apenas às pessoas que precisam dele. Certifique-se de que define as autorizações adequadas nestes ficheiros e considere encriptá-los com ferramentas adicionais:

Encriptar um novo disco persistente com CSEK

Pode encriptar um novo disco persistente fornecendo uma chave durante a criação da VM ou do disco.

Consola

  1. Aceda à página Discos.

    Aceda a Discos

  2. Clique em Criar disco e introduza as propriedades do novo disco.

  3. Em Encriptação, selecione Chave fornecida pelo cliente.

  4. Indique a chave de encriptação do disco na caixa de texto e selecione Chave envolvida se a chave tiver sido envolvida com a chave RSA pública.

gcloud

Na ferramenta gcloud compute, encripte um disco com a flag --csek-key-file durante a criação da VM. Se estiver a usar uma chave envolvida em RSA, use o componente gcloud beta:

gcloud (beta) compute instances create example-instance --csek-key-file example-file.json

Para encriptar um disco persistente autónomo:

gcloud (beta) compute disks create example-disk --csek-key-file example-file.json

REST

Pode encriptar um disco através da propriedade diskEncryptionKey e fazendo um pedido à API v1 para uma chave não processada (não envolvida em RSA) ou à API beta para uma chave envolvida em RSA. Indique uma das seguintes propriedades no seu pedido:

  • rawKey: se a chave estiver codificada em base64
  • rsaEncryptedKey: se a sua chave estiver envolvida em RSA e codificada em base64

Por exemplo, para encriptar um novo disco durante a criação da VM com uma chave com wrapper RSA:

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/instances

{
"machineType": "zones/us-central1-a/machineTypes/e2-standard-2",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
  "initializeParams": {
   "sourceImage": "projects/debian-cloud/global/images/debian-9-stretch-v20170619"
  },
  "boot": true
 }
],
...
}

Da mesma forma, também pode usar a API REST para criar um novo disco persistente autónomo e encriptá-lo com a sua própria chave:

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/
us-central1-a/disks?sourceImage=https%3A%2F%2Fwww.googleapis.com%2Fcompute%2F
alpha%2Fprojects%2Fdebian-cloud%2Fglobal%2Fimages%2Fdebian-9-stretch-v20170619

{
 "name": "new-encrypted-disk-key",
 "diskEncryptionKey": {
   "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
 "type": "zones/us-central1-a/diskTypes/pd-standard"
}

Crie um instantâneo a partir de um disco encriptado com CSEK

Se criar um instantâneo a partir de um disco encriptado, o instantâneo também tem de ser encriptado. Tem de especificar uma chave para encriptar a captura de ecrã. Não pode converter discos encriptados nem instantâneos encriptados para usar a encriptação predefinida do Compute Engine, a menos que crie uma nova imagem de disco e um novo disco persistente.

Os instantâneos de discos encriptados com CSEK são sempre instantâneos completos. Isto difere das instantâneas de discos encriptados com chaves de encriptação geridas pelo cliente (CMEK), que são incrementais. Os instantâneos têm preços baseados no tamanho total do instantâneo, pelo que um instantâneo completo pode custar mais do que um instantâneo incremental.

Para criar um instantâneo de disco persistente a partir de um disco encriptado, o seu pedido de criação de instantâneo tem de fornecer a chave de encriptação que usou para encriptar o disco persistente.

Reveja as práticas recomendadas para instantâneos de discos persistentes antes de criar o seu instantâneo.

Consola

  1. Aceda à página Instantâneos.

    Aceder a Resumos

  2. Clique em Criar instantâneo.

  3. Em Disco de origem, escolha o disco encriptado do qual quer criar uma captura de ecrã.

  4. Indique a chave de encriptação do disco na caixa de texto e selecione Chave envolvida se a chave tiver sido envolvida com a chave RSA pública.

  5. Encriptar a nova imagem instantânea fornecendo uma chave de encriptação adicional na secção Encriptação.

REST

Para fazer o pedido, indique a propriedade sourceDiskEncryptionKey para aceder ao disco persistente de origem. Tem de encriptar a nova imagem instantânea através da propriedade snapshotEncryptionKey.

Faça um pedido à API v1 para uma chave não processada (não envolvida em RSA) ou à API Beta para uma chave envolvida em RSA.

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks/example-disk/createSnapshot

{
 "snapshotEncryptionKey":  {
   "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
 },
  "sourceDiskEncryptionKey": {
   "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
 "name": "snapshot-encrypted-disk"
}

A propriedade sourceDiskEncryptionKey tem de corresponder à chave usada para encriptar o disco persistente. Caso contrário, o pedido falha.

O elemento snapshotEncryptionKey permite-lhe fornecer uma chave para encriptar o instantâneo, de modo que, se o instantâneo for usado para criar novos discos persistentes, tem de ser fornecida uma chave correspondente. Esta chave tem de seguir o formato de chave anterior. Também pode optar por deixar esta propriedade indefinida e a captura de ecrã pode ser usada para criar novos discos persistentes sem precisar de uma chave.

Crie uma nova imagem a partir de um disco ou de uma imagem personalizada encriptada com CSEK

Pode criar imagens personalizadas a partir de discos persistentes encriptados ou copiar imagens encriptadas. Não pode usar a consola para copiar imagens. Use a CLI do Google Cloud ou a API REST para copiar imagens.

Consola

  1. Aceda à página Imagens.

    Aceder a Imagens

  2. Clique em Criar imagem.

  3. Em Disco de origem, escolha o disco encriptado do qual quer criar uma imagem.

  4. Em Encriptação, selecione uma solução de gestão de chaves de encriptação.

  5. Se a chave tiver sido envolvida com a chave RSA pública, selecione Chave envolvida.

gcloud

Siga as instruções para criar uma imagem e adicione a flag --csek-key-file com um caminho para o ficheiro de chave de encriptação para o objeto de origem encriptado. Use o componente gcloud beta se estiver a usar uma chave envolvida em RSA:

gcloud (beta) compute images create .... --csek-key-file example-file.json

Se quiser encriptar a nova imagem com a sua chave, adicione a chave ao ficheiro de chaves:

[
  {
  "uri": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks/source-disk",
  "key": "acX3RqzxrKAFTF0tYVLvydU1riRZTvUNC4g5I11NY-c=",
  "key-type": "raw"
  },
  {
  "uri": "https://www.googleapis.com/compute/v1/projects/myproject/global/snapshots/the-new-image",
  "key": "TF0t-cSfl7CT7xRF1LTbAgi7U6XXUNC4zU_dNgx0nQc=",
  "key-type": "raw"
  }
]

REST

O seu pedido de criação da API tem de conter a propriedade da chave de encriptação para o objeto de origem. Por exemplo, inclua uma das seguintes propriedades, dependendo do tipo de objeto de origem:

  • Disco persistente: sourceDiskEncryptionKey
  • Imagem: sourceImageEncryptionKey

Inclua também as propriedades rawKey ou rsaEncryptedKey, consoante o tipo de chave. Faça um pedido à API v1 para uma chave não processada (não envolvida em RSA) ou à API beta para uma chave envolvida em RSA. O exemplo seguinte converte um disco persistente encriptado e envolvido em RSA numa imagem que usa a mesma chave de encriptação.

POST https://compute.googleapis.com/compute/beta/projects/myproject/global/images

{
 "name": "image-encrypted-disk",
 "sourceDiskEncryptionKey": {
    "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  }
 "imageEncryptionKey": {
    "rsaEncryptedKey":  "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
    },
 "sourceDisk": "projects/myproject/zones/us-central1-a/disks/source-disks"
}

A propriedade imageEncryptionKey opcional permite-lhe fornecer uma chave para encriptar a imagem. Assim, quando a imagem é usada para criar novos discos persistentes, tem de ser fornecida uma chave correspondente. Esta chave tem de seguir o mesmo formato de chave descrito acima. Também pode optar por deixar esta propriedade indefinida e a imagem pode ser usada para criar novos discos persistentes sem precisar de uma chave.

Criptografe uma imagem importada com CSEK

Pode encriptar uma nova imagem quando importa manualmente uma imagem personalizada para o Compute Engine. Antes de poder importar uma imagem, tem de criar e comprimir um ficheiro de imagem de disco e carregar esse ficheiro comprimido para o Cloud Storage.

Importe a imagem personalizada do Compute Engine que quer encriptar. Especifique o URI do ficheiro comprimido e também um caminho para o ficheiro da chave de encriptação.

Consola

  1. Aceda à página Imagens.

    Aceder a Imagens

  2. Clique em Criar imagem.

  3. Em Origem, escolha Ficheiro do Cloud Storage.

  4. Em Ficheiro do Cloud Storage, introduza o URI do Cloud Storage.

  5. Em Encriptação, escolha Chave fornecida pelo cliente e indique a chave de encriptação para encriptar a imagem na caixa de texto.

gcloud

Use o comando compute images create para criar uma nova imagem e especifique a flag --csek-key-file com um ficheiro de chave de encriptação. Se estiver a usar uma chave envolvida em RSA, use o componente gcloud beta:

gcloud (beta) compute images create [IMAGE_NAME] \
    --source-uri gs://[BUCKET_NAME]/[COMPRESSED_FILE] \
    --csek-key-file [KEY_FILE]

Substitua o seguinte:

  • [IMAGE_NAME]: o nome da nova imagem personalizada.
  • [BUCKET_NAME]: o nome do contentor do Cloud Storage que contém o ficheiro de imagem comprimido.
  • [COMPRESSED_FILE]: o nome do ficheiro de imagem comprimido.
  • [KEY_FILE]: o caminho para um ficheiro de chave de encriptação na sua estação de trabalho local.

REST

Para encriptar uma nova imagem criada a partir de um ficheiro RAW, adicione a nova propriedade imageEncryptionKey à solicitação de criação de imagens, seguida de rawKey ou rsaEncryptedKey. Faça um pedido à API v1 para uma chave não processada (não envolvida em RSA) ou à API Beta para uma chave envolvida em RSA.

POST https://compute.googleapis.com/compute/beta/projects/myproject/global/images

{
"rawDisk": {
 "source": "http://storage.googleapis.com/example-image/example-image.tar.gz"
},
"name": "new-encrypted-image",
"sourceType": "RAW",
"imageEncryptionKey": {
  "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  }
}

Crie um disco persistente a partir de um recurso encriptado com CSEK

Crie um disco a partir de um instantâneo encriptado com CSEK

Consola

  1. Aceda à página Discos.

    Aceda a Discos

  2. Clique em Criar disco.

  3. Em Tipo de origem, selecione Snapshot.

  4. Em Encriptação, selecione uma solução de gestão de chaves de encriptação.

  5. Se a chave tiver sido envolvida com a chave RSA pública, selecione Chave envolvida.

gcloud

Na ferramenta gcloud compute, forneça a chave de encriptação para a captura de ecrã usando a flag --csek-key-file quando criar o disco. Se estiver a usar uma chave envolvida em RSA, use o componente gcloud beta:

gcloud (beta) compute disks create ... --source-snapshot example-snapshot --csek-key-file example-file.json

REST

Para usar uma captura de ecrã encriptada, indique o sourceSnapshotEncryptionKey no seu pedido, seguido de rawKey ou rsaEncryptedKey. Faça um pedido à API v1 para uma chave não processada (não envolvida em RSA) ou à API Beta para uma chave envolvida em RSA. Por exemplo, para um novo disco persistente autónomo com um instantâneo encriptado:

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks

{
"name": "disk-from-encrypted-snapshot",
"sourceSnapshot": "global/snapshots/encrypted-snapshot",
"sourceSnapshotEncryptionKey": {
  "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  }
}

Crie um disco a partir de uma imagem encriptada com CSEK

Consola

  1. Aceda à página Discos.

    Aceda a Discos

  2. Clique em Criar disco.

  3. Em Tipo de origem, selecione Imagem.

  4. Em Encriptação, selecione uma solução de gestão de chaves de encriptação.

  5. Se a chave tiver sido envolvida com a chave RSA pública, selecione Chave envolvida.

gcloud

Na ferramenta gcloud compute, forneça a chave de encriptação para a imagem através da flag --csek-key-file quando criar o disco. Se estiver a usar uma chave envolvida em RSA, use o componente gcloud beta:

gcloud (beta) compute disks create ... --image example-image --csek-key-file example-file.json

REST

Para usar uma imagem encriptada, forneça o elemento sourceImageEncryptionKey, seguido de rawKey ou rsaEncryptedKey. Faça um pedido à API v1 para uma chave não processada (não envolvida em RSA) ou à API Beta para uma chave envolvida em RSA.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks

{
"name": "disk-from-encrypted-image",
"sourceImageEncryptionKey": {
  "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
"sourceImage": "global/images/encrypted-image"
}

Anexar um disco encriptado com CSEK a uma nova VM

Consola

  1. Aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Na secção Disco de arranque, clique em Alterar e faça o seguinte:

    1. Na página Disco de arranque, clique no separador Discos existentes.
    2. Na lista Disco, escolha um disco encriptado existente para anexar à VM.
    3. Introduza a chave de encriptação na caixa de texto e selecione Chave envolvida se a chave tiver sido envolvida com a chave RSA pública.

    4. Clique em Selecionar.

  3. Continue com o processo de criação da VM.

gcloud

Para criar uma VM e anexar um disco encriptado, crie um ficheiro de chave e faculte a chave através da flag --csek-key-file quando criar a VM. Se estiver a usar uma chave envolvida em RSA, use o componente gcloud beta:

gcloud (beta) compute instances create example-instance \
    --disk name=example-disk,boot=yes \
    --csek-key-file example-file.json

REST

Crie uma VM com a API Compute Engine e forneça o rawKey ou o rsaEncryptedKey com a especificação do disco. Faça um pedido à API v1 para uma chave não processada (não envolvida em RSA) ou à API Beta para uma chave envolvida em RSA.

Segue-se um fragmento de um exemplo de especificação de disco:

"disks": [
{
  "deviceName": "encrypted-disk",
  "source": "projects/myproject/zones/us-central1-f/disks/encrypted-disk",
  "diskEncryptionKey": {
    "rawKey": "SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0="
  }
 }
]

Iniciar ou reiniciar VMs com discos encriptados com CSEK

Para obter detalhes sobre como parar ou iniciar uma VM com discos encriptados, leia o artigo Reiniciar uma VM com um disco encriptado.

Usar a linha de comandos para criar recursos mistos

Se quiser criar uma combinação de recursos encriptados pelo cliente e encriptados de forma padrão num único pedido com a Google Cloud CLI, pode usar a flag --csek-key-file com um ficheiro de chave e a flag --no-require-csek-key-create no seu pedido. Ao fornecer ambas as flags, o CLI gcloud cria todos os recursos encriptados pelo cliente que estão explicitamente definidos no seu ficheiro de chaves e também cria todos os recursos padrão que especificar.

Por exemplo, suponha que um ficheiro de chave contém o seguinte:

[
  {
  "uri": "https://www.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks/example-disk",
  "key": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==",
  "key-type": "rsa-encrypted"
  }
]

Se quiser criar uma VM com um disco encriptado pelo cliente usando o ficheiro de chave e, em simultâneo, criar uma VM com um disco encriptado de forma padrão no mesmo pedido, pode fazê-lo da seguinte forma:

gcloud beta compute instances create example-disk example-disk-2 \
    --csek-key-file mykeyfile.json --no-require-csek-key-create

Normalmente, não seria possível criar example-disk-2 se especificasse a flag --csek-key-file, porque o disco não está explicitamente definido no ficheiro de chaves. Ao adicionar --no-require-csek-key-create, são criados ambos os discos, um encriptado com o ficheiro de chave e o outro encriptado comGoogle-owned and managed keys.

Remova a CSEK de um disco persistente

Pode desencriptar o conteúdo de um disco encriptado pelo cliente e criar um novo disco que use a encriptação do lado do servidor. Google-owned and managed keys

  1. Crie uma imagem do disco encriptado e especifique a encriptação automática para a nova imagem.
  2. Use a nova imagem para criar um novo disco persistente.

Depois de criar o novo disco persistente, o Compute Engine usa o Google-owned and managed keys para proteger o conteúdo do disco. Todos os instantâneos que criar a partir desse disco também têm de usar Google-owned and managed keys