Neste documento, você terá uma visão geral do Cloud HSM e verá como criar e usar chaves de criptografia protegidas por HSM no Cloud Key Management Service.
O que é Cloud HSM?
Usando o Cloud HSM, um serviço de Hardware Security Module (HSM) hospedado na nuvem, você hospeda chaves de criptografia e executa operações criptográficas em um cluster de HSMs FIPS 140-2 de nível 3 certificados. O Google gerencia o cluster do 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 do 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
Acesse a página Gerenciamento de chaves no console do Google Cloud .
Clique em Criar keyring.
Em Nome do keyring, insira um nome para o keyring.
Em Localização do keyring, selecione um local 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 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. 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.
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 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.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING" \
--request "POST" \
--header "authorization: Bearer TOKEN"
Substitua:
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
Acesse a página Gerenciamento de chaves no console do Google Cloud .
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 sua 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.
To create a Multi-tenant Cloud HSM key, run the `kms keys create` command
with the `hsm` protection level.
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 a 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 no 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 multitenant, 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 a 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.
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 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.
Ao usar o 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. Além disso, 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.
Confira 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 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.
O texto descriptografado retornado no JSON do Cloud KMS é codificado em base64.
Para descriptografar dados criptografados, crie uma solicitação POST e forneça as informações apropriadas do projeto e da chave. Além disso, especifique o texto criptografado (também conhecido como texto cifrado) 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 assinatura 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, fazer rotação e definir permissões nas chaves.
Leia Conceitos para entender melhor a hierarquia de objetos, estados e 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 software.
Saiba mais sobre como o Cloud HSM protege seus dados no artigo técnico sobre a arquitetura do Cloud HSM.
Limitações conhecidas
O tamanho da mensagem é limitado a 8 KiB, em comparação com os 64 KiB para chaves de software do Cloud KMS, para texto simples e texto criptografado fornecido 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 multitenant, consulte Locais do Cloud KMS e selecione Compatível com HSM multitenant no filtro Suporte a HSM.
O Cloud HSM de locatário único está disponível em um subconjunto de locais onde o Cloud HSM de vários locatários está disponível. Para conferir uma lista de todos os locais que oferecem suporte ao HSM de locatário único do Cloud, consulte Locais do Cloud KMS e selecione Compatível com 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 principais para chaves assimétricas armazenadas no Cloud HSM podem resultar em uma latência perceptivelmente maior em comparação com o uso de chaves de software do Cloud KMS.
Rack Bare Metal HSM
OGoogle Cloud oferece mais opções de HSM, como locatário único. O Rack Bare Metal HSM está disponível para que os clientes hospedem os próprios HSMs em um espaço fornecido pelo Google. Entre em contato com seu representante de conta para mais informações.