Este documento oferece uma visão geral do Cloud HSM e mostra como criar e usar chaves de criptografia protegidas por HSM no Cloud Key Management Service.
O que é Cloud HSM?
O Cloud HSM é um serviço de módulo de segurança de hardware (HSM) hospedado na nuvem que permite hospedar chaves de criptografia e executar operações criptográficas em um cluster de HSMs certificados pelo FIPS 140-2 nível 3. O Google gerencia o cluster de HSM para você, então não é preciso se preocupar com clustering, escalonamento ou aplicação de patches. Como o Cloud HSM usa o Cloud KMS como front-end, você aproveita todas as conveniências e recursos do Cloud KMS.
Criar um keyring
Ao criar uma chave, você a adiciona a um keyring em um determinado local Google Cloud. Você pode criar um novo keyring ou usar um atual. Neste tópico, você cria um novo keyring e adiciona uma nova chave a ele.
Crie um keyring em um Google Cloud local compatível com o Cloud HSM.
Console
No console do Google Cloud , acesse a página Gerenciamento de chaves.
Clique em Criar keyring.
Em Nome do keyring, insira um nome para o keyring.
Em Local do keyring, selecione um local como
"us-east1".Clique em Criar.
gcloud
-
No console do Google Cloud , ative o Cloud Shell.
-
No seu ambiente, execute o comando
gcloud kms keyrings create:gcloud kms keyrings create KEY_RING \ --location LOCATIONSubstitua:
KEY_RING: o nome do keyring que contém a chave.LOCATION: o local do Cloud KMS do keyring.
Para informações sobre todas as sinalizações e valores possíveis, execute o comando com a sinalização
--help.
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK do Cloud KMS para C#.
Go
Para executar esse código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK do Cloud KMS para Go.
Java
Para executar esse código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK do Cloud KMS para Java.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Cloud KMS para Node.js.
PHP
Para executar esse código, primeiro saiba como usar o PHP no Google Cloud e instale o SDK do PHP do Cloud KMS.
Python
Para executar esse código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK do Cloud KMS para Python.
Ruby
Para executar esse código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK do Cloud KMS para Ruby.
API
Estes exemplos usam curl como um cliente HTTP para demonstrar o uso da API. Para mais informações sobre controle de acesso, consulte Como acessar a 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:
PROJECT_ID: o ID do projeto que contém o keyring.KEY_RING: o nome do keyring que contém a chave.LOCATION: o local do Cloud KMS do keyring.
Consulte a documentação da API KeyRing.create para mais informações.
Crie uma chave
Siga estas etapas para criar uma chave do Cloud HSM no keyring e no local de keying especificados.
Console
No console do Google Cloud , acesse a página Gerenciamento de chaves.
Clique no nome do keyring em que a chave será criada.
Clique em Criar chave.
Em Que tipo de chave você quer criar?, escolha Chave gerada.
No campo Nome da chave, insira o nome da chave.
Clique no menu suspenso Nível de proteção e selecione HSM ou HSM de locatário único.
Se você selecionou HSM de locatário único, escolha a instância de HSM de locatário único em que quer criar a chave.
Clique no menu suspenso Finalidade e selecione Criptografar/descriptografar simétrico.
Aceite os valores padrão para Período de rotação e A partir de.
Clique em Criar.
gcloud
Para usar o Cloud KMS na linha de comando, primeiro instale ou faça upgrade para a versão mais recente da Google Cloud CLI.
Para criar uma chave do Cloud HSM multitenant, execute o comando kms keys create
com o nível de proteção hsm.
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "encryption" \
--protection-level "hsm"
Substitua:
KEY_NAME: o nome que você quer usar para a chave.KEY_RING: o nome do keyring em que você quer criar a chave.LOCATION: a localização do keyring.
Para informações sobre todas as flags e valores possíveis, execute o comando com a flag --help.
Para criar uma chave do Cloud HSM de locatário único, execute o comando kms keys create
com o nível de proteção hsm-single-tenant e especifique a
instância do Cloud HSM de locatário único em que você quer criar a chave. A instância do Cloud HSM de locatário único precisa estar no mesmo local que o keyring.
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "encryption" \
--protection-level "hsm-single-tenant" \
--crypto-key-backend="projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"
Substitua:
KEY_NAME: o nome que você quer usar para a chave.KEY_RING: o nome do keyring em que você quer criar a chave.LOCATION: a localização do keyring.PROTECTION_LEVEL: o nível de proteção da chave que você quer criar.INSTANCE_PROJECT: o identificador do projeto em que sua instância do Cloud HSM de locatário único está localizada.INSTANCE_NAME: o nome da instância do Cloud HSM de locatário único em que você quer criar a chave. Para mais informações sobre instâncias de HSM de locatário único do Cloud, consulte Criar e gerenciar uma instância de HSM de locatário único do Cloud.
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK do Cloud KMS para C#.
Go
Para executar esse código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK do Cloud KMS para Go.
Java
Para executar esse código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK do Cloud KMS para Java.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Cloud KMS para Node.js.
PHP
Para executar esse código, primeiro saiba como usar o PHP em Google Cloud e instale o SDK do Cloud KMS para PHP.
Python
Para executar esse código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK do Cloud KMS para Python.
Ruby
Para executar esse código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK do Cloud KMS para Ruby.
API
Estes exemplos usam curl como um cliente HTTP para demonstrar o uso da API. Para mais informações sobre controle de acesso, consulte Como acessar a API Cloud KMS.
Para criar uma chave do Cloud HSM multilocatário, use o método
CryptoKey.create
com o nível de proteção HSM:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ENCRYPT_DECRYPT", "versionTemplate": {
"protectionLevel": "HSM", "algorithm": "ALGORITHM" }}'
Substitua:
PROJECT_ID: o ID do projeto que contém o keyring.LOCATION: o local do Cloud KMS do keyring.KEY_RING: o nome do keyring que contém a chave.KEY_NAME: o nome da chave;ALGORITHM: o algoritmo que você quer usar, por exemplo,GOOGLE_SYMMETRIC_ENCRYPTION. Para conferir todos os algoritmos compatíveis, consulte Finalidades de chave e algoritmos.
Para criar uma chave do Cloud HSM de locatário único, use o método
CryptoKey.create
com o nível de proteção HSM_SINGLE_TENANT:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ENCRYPT_DECRYPT", "versionTemplate": {
"protectionLevel": "HSM_SINGLE_TENANT", "algorithm": "ALGORITHM",
"cryptoKeyBackend": "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME" }}'
Substitua:
PROJECT_ID: o ID do projeto que contém o keyring.LOCATION: o local do Cloud KMS do keyring.KEY_RING: o nome do keyring que contém a chave.KEY_NAME: o nome da chave;ALGORITHM: o algoritmo que você quer usar, por exemplo,GOOGLE_SYMMETRIC_ENCRYPTION. Para conferir todos os algoritmos compatíveis, consulte Finalidades de chave e algoritmos.INSTANCE_PROJECT: o identificador do projeto em que sua instância de locatário único do Cloud HSM está localizada.INSTANCE_NAME: o nome da instância do Cloud HSM de locatário único em que você quer criar a chave. Para mais informações sobre instâncias de HSM do Cloud de locatário único, consulte Criar e gerenciar uma instância de HSM do Cloud de locatário único.
Criptografar dados
Agora que você tem uma chave, basta usá-la para criptografar um texto ou conteúdo binário.
gcloud
Para usar o Cloud KMS na linha de comando, primeiro instale ou faça upgrade para a versão mais recente da Google Cloud CLI.
gcloud kms encrypt \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--plaintext-file FILE_TO_ENCRYPT \
--ciphertext-file ENCRYPTED_OUTPUT
Substitua:
KEY_NAME: o nome da chave que você quer usar para criptografia.KEY_RING: o nome do keyring que contém a chave.LOCATION: o local do Cloud KMS que contém o keyring.FILE_TO_ENCRYPT: o caminho para o arquivo que você quer criptografar.ENCRYPTED_OUTPUT: o caminho em que você quer salvar a saída criptografada.
Para informações sobre todas as sinalizações e valores possíveis, execute o comando com a sinalização --help.
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK do Cloud KMS para C#.
Go
Para executar esse código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK do Cloud KMS para Go.
Java
Para executar esse código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK do Cloud KMS para Java.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Cloud KMS para Node.js.
PHP
Para executar esse código, primeiro saiba como usar o PHP no Google Cloud e instale o SDK do PHP do Cloud KMS.
Python
Para executar esse código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK do Cloud KMS para Python.
Ruby
Para executar esse código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK do Cloud KMS para Ruby.
API
Estes exemplos usam curl como um cliente HTTP para demonstrar o uso da API. Para mais informações sobre controle de acesso, consulte Como acessar a API Cloud KMS.
Ao usar JSON e a API REST, o conteúdo precisa ser codificado em Base64 antes de ser criptografado pelo Cloud KMS.
Para criptografar dados, faça uma solicitação POST e forneça as informações apropriadas do projeto e da chave. Especifique o texto codificado em base64 a ser criptografado no campo plaintext do corpo da solicitação.
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:
PROJECT_ID: o ID do projeto que contém o keyring e a chave que você quer usar para criptografia.LOCATION: o local do Cloud KMS que contém o keyring.KEY_RING: o keyring que contém a chave que você quer usar para criptografia.KEY_NAME: o nome da chave que você quer usar para criptografia.PLAINTEXT_TO_ENCRYPT: os dados de texto simples que você quer criptografar. O texto simples precisa ser codificado em base64 antes de chamar o métodoencrypt.
Veja um exemplo de payload com dados codificados em Base64:
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
Descriptografar texto
Para fazer isso, use a mesma chave com que o conteúdo foi criptografado.
gcloud
Para usar o Cloud KMS na linha de comando, primeiro instale ou faça upgrade para a versão mais recente da Google Cloud CLI.
gcloud kms decrypt \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--ciphertext-file FILE_TO_DECRYPT \
--plaintext-file DECRYPTED_OUTPUT
Substitua:
KEY_NAME: o nome da chave que você quer usar para descriptografia.KEY_RING: o nome do keyring que contém a chave.LOCATION: o local do Cloud KMS que contém o keyring.FILE_TO_DECRYPT: o caminho para o arquivo que você quer descriptografar.DECRYPTED_OUTPUT: o caminho em que você quer salvar a saída descriptografada.
Para informações sobre todas as sinalizações e valores possíveis, execute o comando com a sinalização --help.
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK do Cloud KMS para C#.
Go
Para executar esse código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK do Cloud KMS para Go.
Java
Para executar esse código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK do Cloud KMS para Java.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Cloud KMS para Node.js.
PHP
Para executar esse código, primeiro saiba como usar o PHP no Google Cloud e instale o SDK do PHP do Cloud KMS.
Python
Para executar esse código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK do Cloud KMS para Python.
Ruby
Para executar esse código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK do Cloud KMS para Ruby.
API
Estes exemplos usam curl como um cliente HTTP para demonstrar o uso da API. Para mais informações sobre controle de acesso, consulte Como acessar a API Cloud KMS.
O texto descriptografado retornado no JSON do Cloud KMS é codificado em base64.
Para descriptografar dados criptografados, faça uma solicitação POST e forneça as informações
apropriadas do projeto e da chave e especifique o texto criptografado (também conhecido como
texto criptografado) a ser descriptografado no campo ciphertext do corpo da solicitação.
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:
PROJECT_ID: o ID do projeto que contém o keyring e a chave que você quer usar para descriptografia.LOCATION: o local do Cloud KMS que contém o keyring.KEY_RING: o keyring que contém a chave que você quer usar para descriptografia.KEY_NAME: o nome da chave que você quer usar para descriptografia.ENCRYPTED_DATA: os dados criptografados que você quer descriptografar.
Confira um exemplo de payload com dados codificados em base64:
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
Próximas etapas
O exemplo de criptografia neste tópico usou uma chave simétrica com o nível de proteção do HSM. Para criptografar usando uma chave assimétrica com o nível de proteção do HSM, siga as etapas em Como criptografar e descriptografar dados com uma chave assimétrica com estas alterações:
- Crie o keyring em uma das regiões compatíveis com o Cloud HSM.
- Crie a chave com o nível de proteção do HSM.
Para usar uma chave assimétrica com o nível de proteção do HSM para assinatura de curva elíptica ou RSA, siga as etapas em Criar e validar assinaturas com estas mudanças:
- Crie o keyring em uma das regiões compatíveis com o Cloud HSM.
- Crie a chave com o nível de proteção do HSM.
Comece a usar a API.
Dê uma olhada na Referência da API do Cloud KMS.
Leia os Guias de instruções para começar a criar, alternar e definir permissões em chaves.
Leia Conceitos para entender melhor a hierarquia de objetos, os estados principais e a rotação de chaves.
Saiba mais sobre a geração de registros no Cloud KMS. A geração de registros é baseada em operações e se aplica a chaves com níveis de proteção de HSM e de software.
Saiba mais sobre como o Cloud HSM protege seus dados no artigo sobre a arquitetura do Cloud HSM.
Limitações conhecidas
O tamanho da mensagem é limitado a 8 KiB (em vez de 64 KiB para chaves de software do Cloud KMS) para texto simples e texto criptografado fornecidos pelo usuário, incluindo os dados autenticados adicionais.
O Cloud HSM não está disponível em todas as multirregiões. Para conferir uma lista de todos os locais que oferecem suporte ao Cloud HSM multilocatário, consulte Locais do Cloud KMS e selecione Oferece suporte a HSM multilocatário no filtro Suporte a HSM.
O Cloud HSM de locatário único está disponível em um subconjunto de locais em que o Cloud HSM multilocatário está disponível. Para conferir uma lista de todos os locais que aceitam o HSM de locatário único do Cloud, consulte Locais do Cloud KMS e selecione Aceita HSM de locatário único no filtro Suporte a HSM.
Se você usar chaves do Cloud HSM com integrações de chaves de criptografia gerenciadas pelo cliente (CMEK) em outros serviços do Google Cloud , os locais usados para os serviços precisarão corresponder exatamente aos locais das chaves do Cloud HSM. Isso se aplica a locais regionais, birregionais e multirregionais.
Para mais informações sobre integrações do CMEK, consulte a seção relevante de Criptografia em repouso.
As operações de chaves assimétricas armazenadas no Cloud HSM podem ter uma latência consideravelmente maior em comparação com o uso de chaves de software do Cloud KMS.
Rack Bare Metal HSM
OGoogle Cloud oferece outras opções de HSM, como locatário único. O Bare Metal Rack HSM está disponível para que os clientes hospedem os próprios HSMs em um espaço fornecido pelo Google. Pergunte ao representante da sua conta para mais informações.