Este tópico oferece uma vista geral do Cloud HSM e mostra como criar e usar chaves de encriptação protegidas por HSM no Cloud Key Management Service.
O que é o Cloud HSM?
O Cloud HSM é um serviço de Hardware Security Module (HSM) alojado na nuvem que lhe permite alojar chaves de encriptação e realizar operações criptográficas num cluster de HSMs certificados FIPS 140-2 Nível 3. A Google gere o cluster de HSM por si, pelo que não tem de se preocupar com o clustering, o escalonamento nem a aplicação de patches. Uma vez que o Cloud HSM usa o Cloud KMS como front-end, pode tirar partido de todas as conveniências e funcionalidades que o Cloud KMS oferece.
Crie um conjunto de chaves
Quando cria uma chave, adiciona-a a um conjunto de chaves numa determinada Google Cloud localização. Pode criar um novo conjunto de chaves ou usar um existente. Neste tópico, cria um novo conjunto de chaves e adiciona-lhe uma nova chave.
Crie um conjunto de chaves numa Google Cloud localização que suporte o Cloud HSM.
Consola
Aceda à página Gestão de chaves na Google Cloud consola.
Clique em Criar conjunto de chaves.
Em Nome do conjunto de chaves, introduza um nome para o conjunto de chaves.
Para Localização do porta-chaves, selecione uma localização, como
"us-east1"
.Clique em Criar.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
-
No seu ambiente, execute o comando
gcloud kms keyrings create
:gcloud kms keyrings create KEY_RING \ --location LOCATION
Substitua o seguinte:
KEY_RING
: o nome do conjunto de chaves que contém a chave.LOCATION
: a localização do Cloud KMS do conjunto de chaves.
Para ver informações sobre todas as flags e valores possíveis, execute o comando com a flag
--help
. PROJECT_ID
: o ID do projeto que contém o conjunto de chaves.KEY_RING
: o nome do conjunto de chaves que contém a chave.LOCATION
: a localização do Cloud KMS do conjunto de chaves.
C#
Para executar este código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK C# do Cloud KMS.
Go
Para executar este código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK Go do Cloud KMS.
Java
Para executar este código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK Java do Cloud KMS.
Node.js
Para executar este código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Node.js do Cloud KMS.
PHP
Para executar este código, saiba primeiro como usar o PHP no Google Cloud e instale o SDK PHP do Cloud KMS.
Python
Para executar este código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK Python do Cloud KMS.
Ruby
Para executar este código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK Ruby do Cloud KMS.
API
Estes exemplos usam o curl como cliente HTTP para demonstrar a utilização da API. Para mais informações sobre o controlo de acesso, consulte o artigo Aceder à API Cloud KMS.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING" \ --request "POST" \ --header "authorization: Bearer TOKEN"
Substitua o seguinte:
Consulte a KeyRing.create
documentação da API
para mais informações.
Crie uma chave
Siga estes passos para criar uma chave do Cloud HSM no conjunto de chaves especificado e na localização.
Consola
Aceda à página Gestão de chaves na Google Cloud consola.
Clique no nome do conjunto de chaves para o qual vai criar uma chave.
Clique em Criar chave.
Em Que tipo de chave quer criar?, escolha Chave gerada.
No campo Nome da chave, introduza o nome da chave.
Clique no menu pendente Nível de proteção e selecione HSM.
Clique no menu pendente Finalidade e selecione Encriptar/desencriptar simetricamente.
Aceite os valores predefinidos para Período de rotação e Início a.
Clique em Criar.
gcloud
Para usar o Cloud KMS na linha de comandos, primeiro instale ou atualize para a versão mais recente da CLI do Google Cloud.
gcloud kms keys create key \ --keyring key-ring \ --location location \ --purpose "encryption" \ --protection-level "hsm"
Substitua key por um nome para a nova chave. Substitua key-ring pelo nome do conjunto de chaves existente onde a chave vai estar localizada. Substitua location pela localização do Cloud KMS do conjunto de chaves.
Para ver informações sobre todas as flags e valores possíveis, execute o comando com a flag --help
.
C#
Para executar este código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK C# do Cloud KMS.
Go
Para executar este código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK Go do Cloud KMS.
Java
Para executar este código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK Java do Cloud KMS.
Node.js
Para executar este código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Node.js do Cloud KMS.
PHP
Para executar este código, saiba primeiro como usar o PHP no Google Cloud e instale o SDK PHP do Cloud KMS.
Python
Para executar este código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK Python do Cloud KMS.
Ruby
Para executar este código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK Ruby do Cloud KMS.
Encripte dados
Agora que tem uma chave, pode usá-la para encriptar texto ou conteúdo binário.
gcloud
Para usar o Cloud KMS na linha de comandos, primeiro instale ou atualize para a versão mais recente da CLI do Google Cloud.
gcloud kms encrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --plaintext-file FILE_TO_ENCRYPT \ --ciphertext-file ENCRYPTED_OUTPUT
Substitua o seguinte:
KEY_NAME
: o nome da chave que quer usar para a encriptação.KEY_RING
: o nome do conjunto de chaves que contém a chave.LOCATION
: a localização do Cloud KMS que contém o conjunto de chaves.FILE_TO_ENCRYPT
: o caminho para o ficheiro que quer encriptar.ENCRYPTED_OUTPUT
: o caminho onde quer guardar o resultado encriptado.
Para ver informações sobre todas as flags e valores possíveis, execute o comando com a flag --help
.
C#
Para executar este código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK C# do Cloud KMS.
Go
Para executar este código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK Go do Cloud KMS.
Java
Para executar este código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK Java do Cloud KMS.
Node.js
Para executar este código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Node.js do Cloud KMS.
PHP
Para executar este código, saiba primeiro como usar o PHP no Google Cloud e instale o SDK PHP do Cloud KMS.
Python
Para executar este código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK Python do Cloud KMS.
Ruby
Para executar este código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK Ruby do Cloud KMS.
API
Estes exemplos usam o curl como cliente HTTP para demonstrar a utilização da API. Para mais informações sobre o controlo de acesso, consulte o artigo Aceder à API Cloud KMS.
Quando usa JSON e a API REST, o conteúdo tem de ser codificado em base64 antes de poder ser encriptado pelo Cloud KMS.
Para encriptar dados, faça um pedido POST
e faculte as informações do projeto e da chave adequadas, bem como especifique o texto codificado em base64 a encriptar no campo plaintext
do corpo do pedido.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:encrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"plaintext\": \"PLAINTEXT_TO_ENCRYPT\"}"
Substitua o seguinte:
PROJECT_ID
: o ID do projeto que contém o conjunto de chaves e a chave que quer usar para a encriptação.LOCATION
: a localização do Cloud KMS que contém o conjunto de chaves.KEY_RING
: o conjunto de chaves que contém a chave que quer usar para encriptação.KEY_NAME
: o nome da chave que quer usar para a encriptação.PLAINTEXT_TO_ENCRYPT
: os dados de texto simples que quer encriptar. O texto simples tem de estar codificado em Base64 antes de chamar o métodoencrypt
.
Segue-se um exemplo de payload com dados codificados em base64:
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
Desencripte texto encriptado
Para desencriptar conteúdo encriptado, tem de usar a mesma chave que foi usada para encriptar o conteúdo.
gcloud
Para usar o Cloud KMS na linha de comandos, primeiro instale ou atualize para a versão mais recente da CLI do Google Cloud.
gcloud kms decrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ciphertext-file FILE_TO_DECRYPT \ --plaintext-file DECRYPTED_OUTPUT
Substitua o seguinte:
KEY_NAME
: o nome da chave que quer usar para a desencriptação.KEY_RING
: o nome do conjunto de chaves que contém a chave.LOCATION
: a localização do Cloud KMS que contém o conjunto de chaves.FILE_TO_DECRYPT
: o caminho para o ficheiro que quer descifrar.DECRYPTED_OUTPUT
: o caminho onde quer guardar o resultado descifrado.
Para ver informações sobre todas as flags e valores possíveis, execute o comando com a flag --help
.
C#
Para executar este código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK C# do Cloud KMS.
Go
Para executar este código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK Go do Cloud KMS.
Java
Para executar este código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK Java do Cloud KMS.
Node.js
Para executar este código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Node.js do Cloud KMS.
PHP
Para executar este código, saiba primeiro como usar o PHP no Google Cloud e instale o SDK PHP do Cloud KMS.
Python
Para executar este código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK Python do Cloud KMS.
Ruby
Para executar este código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK Ruby do Cloud KMS.
API
Estes exemplos usam o curl como cliente HTTP para demonstrar a utilização da API. Para mais informações sobre o controlo de acesso, consulte o artigo Aceder à API Cloud KMS.
O texto descifrado devolvido no JSON do Cloud KMS está codificado em base64.
Para desencriptar dados encriptados, faça um pedido POST
e faculte as informações do projeto e da chave adequadas, bem como especifique o texto encriptado (também conhecido como texto cifrado) a desencriptar no campo ciphertext
do corpo do pedido.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:decrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"ciphertext\": \"ENCRYPTED_DATA\"}"
Substitua o seguinte:
PROJECT_ID
: o ID do projeto que contém o conjunto de chaves e a chave que quer usar para a desencriptação.LOCATION
: a localização do Cloud KMS que contém o conjunto de chaves.KEY_RING
: o conjunto de chaves que contém a chave que quer usar para a desencriptação.KEY_NAME
: o nome da chave que quer usar para a desencriptação.ENCRYPTED_DATA
: os dados encriptados que quer desencriptar.
Segue-se um exemplo de payload com dados codificados em base64:
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
Passos seguintes
O exemplo de encriptação neste tópico usou uma chave simétrica com o nível de proteção do HSM. Para encriptar com uma chave assimétrica com o nível de proteção do HSM, siga os passos em Encriptar e desencriptar dados com uma chave assimétrica com estas alterações:
- Crie o conjunto de chaves numa das regiões suportadas para o Cloud HSM.
- Crie a chave com o nível de proteção HSM.
Para usar uma chave assimétrica com o nível de proteção do HSM para assinatura de curva elíptica ou assinatura RSA, siga os passos em Criar e validar assinaturas com estas alterações:
- Crie o conjunto de chaves numa das regiões suportadas para o Cloud HSM.
- Crie a chave com o nível de proteção HSM.
Comece a usar a API.
Consulte a referência da API Cloud KMS.
Leia os guias de instruções para começar a criar, rodar e definir autorizações nas chaves.
Leia os conceitos para compreender melhor a hierarquia de objetos, os estados principais e a rotação de chaves.
Saiba mais sobre o registo no Cloud KMS. Tenha em atenção que o registo é baseado em operações e aplica-se a chaves com níveis de proteção de HSM e software.
Saiba como o Cloud HSM protege os seus dados no documento técnico sobre a arquitetura do Cloud HSM.
Limitações conhecidas
O tamanho da mensagem está limitado a 8 KiB (em comparação com 64 KiB para chaves de software do Cloud KMS) para texto simples e texto cifrado fornecidos pelo utilizador, incluindo os dados autenticados adicionais.
O Cloud HSM pode não estar disponível em determinadas regiões duplas ou múltiplas. Para ver detalhes, consulte o artigo Regiões suportadas para o Cloud HSM.
Se usar chaves do Cloud HSM com integrações de chaves de encriptação geridas pelo cliente (CMEK) noutros Google Cloud serviços, as localizações que usar para os serviços têm de corresponder exatamente às localizações das suas chaves do Cloud HSM. Isto aplica-se a localizações regionais, de duas regiões e de várias regiões.
Para mais informações sobre as integrações de CMEK, consulte a secção relevante do artigo Encriptação em repouso.
Atualmente, as operações de chaves assimétricas armazenadas no Cloud HSM podem incorrer numa latência significativamente maior em comparação com a utilização de chaves de software do Cloud KMS.
HSM de rack bare metal
Google Cloud oferece opções de HSM adicionais, como a posse exclusiva. O HSM de rack de metal puro está disponível para os clientes alojarem os seus próprios HSMs no espaço fornecido pela Google. Contacte o representante da sua conta para obter informações adicionais.