Cloud HSM

Neste tópico, você tem uma visão geral do Google Cloud HSM e aprende a criar e usar chaves de criptografia no Cloud HSM com o Cloud Key Management Service.

O que é Cloud HSM?

Com o Cloud HSM, um serviço HSM (Hardware Security Module) 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 cluster HSM é gerenciado pelo Google, e você não precisa se preocupar com o cluster, escala ou patch. Como o Cloud HSM usa o Cloud KMS como front-end, você aproveita todas as conveniências e recursos do Cloud KMS.

Antes de começar

  1. Escreva para cloudhsm-feedback@google.com com o endereço de e-mail da conta que será usada para criar seus projetos de teste. Faça isso com pelo menos 24 horas de antecedência para garantir o tempo adequado para colocar sua conta na lista de permissões.
  2. No Console do Google Cloud Platform, acesse a página Projetos e selecione ou crie um novo projeto. Para reduzir a latência, recomendamos selecionar a região us-central1 para seu projeto.

    Acessar a página Projetos

    Posteriormente, o projeto criado será mencionado neste tópico como [PROJECT_ID].
  3. Ative o faturamento do projeto. Apesar dessa ativação ser um requisito, você não será cobrado pelo uso das chaves HSM durante o Programa de acesso antecipado e, após a conclusão do programa, elas não estarão mais disponíveis.

    Ativar faturamento

Usar uma versão privada para gcloud

Esta versão requer uma criação privada da ferramenta de linha de comando gcloud para enviar solicitações para a API do Cloud KMS. Siga estas instruções para receber a versão privada do gcloud e ativá-lo para uso com seu projeto na região de Testlab, (us-central1-testlab). A Testlab é uma região especial que hospeda o cluster HSM usado no Programa de acesso antecipado.

  1. Ative a API no seu projeto:
    1. Abra https://console.cloud.google.com/apis/api/testlab-cloudkms.googleapis.com/overview?project=[PROJECT_ID].
    2. Próximo à parte superior da página, clique em Ativar.
  2. Usando sua conta incluída na lista de permissões, crie uma conta de serviço no novo projeto e faça o download das credenciais dela. Você usará essas credenciais quando se autenticar na ferramenta de linha de comando gcloud, em vez de usar o fluxo comum de gcloud auth login.
    1. Acesse https://console.cloud.google.com/apis/credentials/serviceaccountkey?project=[PROJECT_ID].
    2. Na lista suspensa de Conta de serviço, selecione Nova conta de serviço.
    3. Em Nome da conta do serviço, insira um nome para sua conta de serviço.
    4. Em Papel, conceda à sua conta de serviço pelo menos os papéis Administrador do Cloud KMS e Criptografador/descriptografador da CryptoKey do Cloud KMS:
      1. Selecione Cloud KMS e clique em Administrador do Cloud KMS.
      2. Selecione Cloud KMS e clique em Criptografador/Descriptografador da CryptoKey do Cloud KMS.
      Para informações sobre como conceder um papel à conta de serviço, consulte Como conceder papéis às contas de serviço.
    5. Quando solicitado, selecione Fornecer uma nova chave privada.
    6. Clique em Criar Será feito o download de um arquivo .json contendo a chave da conta de serviço. Posteriormente, este arquivo será mencionado neste tópico como [JSON_KEY_FILE]. Para saber mais sobre como gerenciar com segurança as chaves da conta de serviço, consulte Práticas recomendadas para gerenciar credenciais.
  3. Instale a versão pública do gcloud em uma pasta dedicada para manter a instalação existente:
    pushd /tmp
    curl -o installer.sh https://sdk.cloud.google.com
    chmod +x installer.sh
    ./installer.sh --disable-prompts --install-dir ~/testlab
    rm installer.sh
    popd
    alias hsmgcloud=~/testlab/google-cloud-sdk/bin/gcloud
    hsmgcloud auth login
    
  4. Atualize sua instalação para que ela seja direcionada para o repo testlab
    hsmgcloud components repositories add  \
    https://storage.googleapis.com/cloud-kms-testlab/components-2.json
    hsmgcloud components update
    hsmgcloud components install alpha
    
  5. Configure o gcloud para uso com o ponto de extremidade Testlab.
    hsmgcloud config configurations create --activate testlab
    hsmgcloud config set project [PROJECT_ID]
    hsmgcloud config set api_endpoint_overrides/cloudkms "https://testlab-cloudkms.googleapis.com/"
    hsmgcloud auth activate-service-account --key-file [JSON_KEY_FILE]
    

Keyrings e chaves

Para criptografar e descriptografar o conteúdo, você precisa de uma chave do Cloud KMS, que faz parte de um keyring.

Crie um keyring chamado hsm-ring e uma chave com o nome de hsm-key. Consulte a visão geral da hierarquia de objetos para saber mais sobre esses objetos e como eles se relacionam.

hsmgcloud kms keyrings create hsm-ring --location us-central1-testlab
hsmgcloud alpha kms keys create hsm-key --location us-central1-testlab --keyring hsm-ring --purpose encryption --protection-level hsm

Use a opção list para ver o nome e metadados da chave que você acabou de criar.

hsmgcloud kms keys list --location us-central1-testlab --keyring hsm-ring

Você verá:

NAME                              PURPOSE                PROTECTION_LEVEL           PRIMARY_ID              PRIMARY_STATE
projects/[PROJECT_ID]/locations/us-central1-testlab/keyRings/hsm-ring/cryptoKeys/hsm-key  ENCRYPT_DECRYPT  HSM   1   ENABLED

Criptografar dados

Agora que você tem uma chave, basta usá-la para criptografar um texto ou conteúdo binário. Crie algum texto para ser criptografado e o salve em um arquivo chamado /tmp/secret.

echo "Some text to be encrypted" > /tmp/secret
hsmgcloud kms encrypt --location us-central1-testlab --keyring hsm-ring --key hsm-key --plaintext-file /tmp/secret --ciphertext-file /tmp/secret.enc

Descriptografar texto

Para fazer isso, use a mesma chave com que o conteúdo foi criptografado. Emita o comando a seguir para descriptografar o arquivo /tmp/secret:

hsmgcloud kms decrypt --location us-central1-testlab --keyring hsm-ring --key hsm-key --ciphertext-file /tmp/secret.enc --plaintext-file /tmp/secret.dec

O conteúdo do /tmp/secret.dec e o arquivo original de texto simples /tmp/secret são idênticos.

cat /tmp/secret.dec
Some text to be encrypted

Limpar

A limpeza consiste em destruir as versões de chave usadas neste tópico.

Liste as versões disponíveis para sua chave:

hsmgcloud kms keys versions list --location us-central1-testlab --keyring hsm-ring --key hsm-key

Para destruir uma versão, execute o comando a seguir, substituindo [VERSION_NUMBER] pelo número da versão a ser destruída:

hsmgcloud kms keys versions destroy [VERSION_NUMBER] --location us-central1-testlab --keyring hsm-ring --key hsm-key

Próximas etapas

Referência da API

Com as seguintes atualizações da API, você cria e usa chaves de criptografia no Cloud KMS com o Cloud KMS.

Recurso: CryptoKey

JSON representation
{
 "name": string,
  "primary": {
    object(CryptoKeyVersion)
  },
  "purpose": enum(CryptoKeyPurpose),
  "createTime": string,
  "nextRotationTime": string,
  "rotationPeriod": string,
  "protectionLevel": enum(ProtectionLevel),
}
Campos Descrição
name string

Apenas saída. O nome do recurso para esta CryptoKey no formato projects/*/locations/*/keyRings/*/cryptoKeys/*.

primary object(CryptoKeyVersion)

Apenas saída. Uma cópia da CryptoKeyVersion "principal" a ser usada pelo cryptoKeys.encrypt quando esta CryptoKey é fornecida em EncryptRequest.name.

A versão principal da CryptoKey's é atualizada pela cryptoKeys.updatePrimaryVersion.

propósito enum(CryptoKeyPurpose)

O propósito imutável desta CryptoKey. Atualmente, o único propósito aceitável é ENCRYPT_DECRYPT.

createTime string (Timestamp format)

Apenas saída. O horário em que esta CryptoKey foi criada.

Um carimbo de data/hora no formato UTC "Zulu" RFC3339 é medido com precisão de nanossegundos. Exemplo: "2014-10-02T15:01:23.045123456Z".

nextRotationTime string (Timestamp format)

No nextRotationTime, o Serviço de Gerenciamento de Chaves automaticamente:

  1. criará uma nova versão desta CryptoKey;
  2. marcará a nova versão como principal.

As rotações de chaves realizadas manualmente via cryptoKeyVersions.create e cryptoKeys.updatePrimaryVersion não afetam o nextRotationTime.

Um carimbo de data/hora no formato UTC "Zulu" RFC3339 é medido com precisão de nanossegundos. Exemplo: "2014-10-02T15:01:23.045123456Z".

rotationPeriod string (Duration format)

O nextRotationTime será adiantado por este período quando o serviço fizer automaticamente a rotação da chave. O período mínimo é de um dia.

Tanto o rotationPeriod quanto o nextRotationTime precisam estar configurados.

Duração em segundos com até nove dígitos fracionais, terminando com ''s''. Exemplo: "3.5s".

protectionLevel enum(ProtectionLevel)

O estado atual do ProtectionLevel.

Recurso: ProtectionLevel

O estado de um ProtectionLevel, indicando se é possível utilizá-lo.

Enums Descrição
PROTECTION_LEVEL_UNSPECIFIED Não especificado
SOFTWARE O material da chave está seguro, e as operações de criptografia ocorrem no software, ou seja, a opção padrão no Cloud KMS
HSM O material da chave está seguro, e as operações de criptografia ocorrem no HSMs

Como solucionar problemas

  • Quando você tenta adicionar o repo, e é exibida uma mensagem sobre as permissões do repositório, isso significa que as alterações da lista de permissões ainda não se propagaram pelo sistema. Aguarde um pouco mais e tente novamente.

  • Caso seja exibida uma mensagem sobre permissões do sistema de arquivos local, verifique se você não está usando uma instalação gerenciada da ferramenta de linha de comando gcloud.

Ao se deparar com algum outro erro, entre em contato conosco pelo cloudhsm-feedback@google.com para fornecer feedback.

Limitações conhecidas

  • O tamanho do bloco é limitado a 16.384 bytes, em oposição a 64 KiB para chaves de software do Cloud KMS, para texto simples e texto cifrado fornecido pelo usuário, incluindo os dados autenticados adicionais

  • Não há suporte para IU. As chaves HSM precisam ser criadas e gerenciadas usando a API ou a ferramenta de linha de comando gcloud

  • O Cloud KMS está disponível apenas na região Testlab (us-central1-testlab).

  • A ferramenta de linha de comando gcloud liberada publicamente não funciona com o Cloud KMS. Por isso, será necessário usar a versão privada da gcloud

  • Atualmente, as operações principais para as chaves armazenadas no Cloud KMS resultam em uma latência significativamente maior em comparação com o uso de chaves do software Cloud KMS

  • Todas as chaves criadas serão destruídas após a conclusão do Programa de acesso antecipado

Esta página foi útil? Conte sua opinião sobre: