Ativar chaves de criptografia gerenciadas pelo cliente (CMEK) para conjuntos de dados da API Cloud Healthcare

Por padrão, o Google Cloud automaticamente criptografa os dados quando em repouso usando chaves de criptografia gerenciadas pelo Google. Se você tiver requisitos regulatórios ou de compliance específicos relacionados às chaves que protegem seus dados, use chaves de criptografia gerenciadas pelo cliente (CMEKs, na sigla em inglês) para seus conjuntos de dados da API Cloud Healthcare. Em vez de o Google ter e gerenciar as chaves de criptografia que protegem seus dados, os conjuntos de dados da API Cloud Healthcare são criptografados usando uma chave que você controla e gerencia no Cloud Key Management Service (Cloud KMS).

Para mais informações sobre CMEK em geral, como quando e por que ativar, consulte Chaves de criptografia gerenciadas pelo cliente (CMEK).

Antes de começar

Decida se o conjunto de dados da API Cloud Healthcare e o Cloud KMS vão estar no mesmo projeto do Google Cloud ou em projetos diferentes. Para orientações, consulte Separação de deveres.

Para fins de documentação, as seguintes convenções são usadas:

  • PROJECT_ID: o ID do projeto da API Cloud Healthcare
  • KMS_PROJECT_ID: o ID do projeto em que o Cloud KMS é executado, que pode ser o mesmo que PROJECT_ID

Para informações sobre os códigos de projeto e os números de projeto do Google Cloud, consulte Como identificar projetos.

Limitações

  • Só é possível usar chaves do Cloud KMS ao criar um conjunto de dados da API Cloud Healthcare. Não é possível ativar, mudar ou desativar chaves do Cloud KMS em um conjunto de dados da API Cloud Healthcare.
  • Somente os armazenamentos FHIR, DICOM e HL7v2 têm suporte em conjuntos de dados criptografados com CMEK. A proteção CMEK se aplica aos armazenamentos DICOM, FHIR e HL7v2 no conjunto de dados e aos recursos deles.
  • Não é possível desidentificar recursos criptografados com CMEK.

Operações de CMEK

As chaves do Cloud KMS são usadas quando um recurso criptografado por CMEK é criado, lido, atualizado ou excluído, e para tarefas operacionais, como faturamento ou garantir que a chave esteja disponível.

Considerações sobre chaves externas

Para saber como usar chaves gerenciadas em um sistema de parceiro externo de gerenciamento de chaves com suporte para proteger dados no Google Cloud, consulte Gerenciador de chaves externo do Cloud.

Se você perder chaves gerenciadas fora do Google Cloud, o Google não vai poder recuperar seus dados.

Perda de dados e indisponibilidade de chaves

Se um conjunto de dados for criptografado por uma chave e essa chave ficar indisponível e permanecer indisponível, a API Cloud Healthcare vai desativar e, eventualmente, excluir o conjunto de dados. Às vezes, uma chave fica indisponível se for desativada ou destruída ou se não puder ser acessada devido a permissões revogadas. Esse comportamento ocorre se a chave estiver indisponível por qualquer motivo. O nível de proteção da chave ou se ela é externa não afeta esse comportamento. As chaves externas também podem ficar indisponíveis de forma imprevisível. Por exemplo, podem surgir problemas de conectividade entre os recursos do Google Cloud e o EKM.

O processo a seguir descreve como a disponibilidade da chave é verificada e como um conjunto de dados pode ser desativado e excluído:

  1. Depois que um conjunto de dados da API Cloud Healthcare criptografado por CMEK é criado, a API Cloud Healthcare verifica o status da chave a cada cinco minutos para garantir que ela esteja disponível. Se a chave não estiver disponível, a API Cloud Healthcare vai continuar oferecendo suporte a solicitações para o conjunto de dados por até uma hora.

  2. Após uma hora, se a API Cloud Healthcare ainda não conseguir se conectar ao Cloud KMS, o conjunto de dados da API Cloud Healthcare será desativado como uma medida de proteção. Para reativar o conjunto de dados da API Cloud Healthcare, entre em contato com seu representante de suporte.

    Quando desativado, só é possível enviar solicitações datasets.get e datasets.delete para o conjunto de dados da API Cloud Healthcare. Outras solicitações falham com um erro 400 FAILED_PRECONDITION.

  3. Se o conjunto de dados da API Cloud Healthcare ficar indisponível por mais de 30 dias, ele será excluído permanentemente. Todos os armazenamentos DICOM, FHIR e HL7v2 no conjunto de dados e os dados associados também são excluídos. Se excluídos, esses dados não poderão ser recuperados.

Criação de chave

As seções a seguir descrevem como criar um keyring e uma chave do Cloud KMS. Somente as chaves de criptografia simétricas do Cloud KMS são compatíveis.

Locais suportados

As chaves do Cloud KMS estão disponíveis nos locais da API Cloud Healthcare. Crie o keyring em um local que corresponda à região ou multirregião do conjunto de dados da API Cloud Healthcare.

  • Qualquer conjunto de dados multirregional da API Cloud Healthcare precisa usar um keyring multirregional de um local correspondente. Por exemplo, um conjunto de dados da API Cloud Healthcare na região us precisa ser protegido com um keyring da região us, e um conjunto de dados da API Cloud Healthcare na região eu precisa ser protegido com um keyring da região europe.

  • Os conjuntos de dados regionais da API Cloud Healthcare precisam usar chaves regionais correspondentes. Por exemplo, um conjunto de dados da API Cloud Healthcare na região asia-northeast1 precisa ser protegido com um keyring da região asia-northeast1.

  • Não é possível usar a região global ao configurar a CMEK para um conjunto de dados da API Cloud Healthcare.

Para mais informações, consulte Locais da API Cloud Healthcare e Locais do Cloud KMS.

Crie um keyring e uma chave.

Conclua as etapas a seguir no projeto do Google Cloud que executa o Cloud KMS:

  1. Crie um keyring.
  2. Criar uma chave.

Conceder permissões de criptografia e descriptografia

Para proteger os dados da API Cloud Healthcare com uma chave do Cloud KMS, conceda à conta de serviço do agente de serviço do Cloud Healthcare o papel de Criptografador/Descriptografador de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) nesta chave. Para instruções, consulte Permissões de CMEK do conjunto de dados.

Depois de conceder o papel à conta de serviço, a API Cloud Healthcare pode criptografar e descriptografar recursos criptografados com o CMEK. Seus aplicativos não precisam especificar chaves ao ler ou gravar dados. A API Cloud Healthcare processa a criptografia.

Quando um solicitante lê ou grava um objeto criptografado com uma chave do Cloud KMS, ele acessa o objeto normalmente. Durante a solicitação, o agente de serviço criptografa ou descriptografa automaticamente o objeto solicitado, desde que as duas condições a seguir sejam atendidas:

  • O agente de serviço ainda tem as permissões necessárias.
  • A chave está disponível e ativada.

Criar um conjunto de dados da API Cloud Healthcare criptografado com CMEK

Os exemplos a seguir mostram como criar um conjunto de dados criptografado com CMEK.

É necessário especificar um ID de recurso de chave do Cloud KMS ao criar o conjunto de dados. Essa chave diferencia maiúsculas de minúsculas e está no seguinte formato:

projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME

Para conferir os IDs de recurso de chave do Cloud KMS, consulte Como conseguir um ID de recurso do Cloud KMS.

Console

  1. No console do Google Cloud, acesse a página Navegador.

    Acessar o navegador

  2. Clique em Criar conjunto de dados. A página Criar conjunto de dados é exibida.

  3. No campo Nome, insira um identificador para o conjunto de dados sujeito aos requisitos de tamanho e caracteres permitidos.

  4. Selecione um dos seguintes tipos de local:

    • Region. O conjunto de dados fica permanentemente em uma região do Google Cloud. Depois de selecionar essa opção, digite ou selecione um local no campo Região.

    • Multirregional. O conjunto de dados fica permanentemente em um local que abrange várias regiões do Google Cloud. Depois de selecionar essa opção, digite ou selecione um local multirregional no campo Multirregião.

  5. Na seção Criptografia, selecione um dos seguintes tipos de criptografia:

    • Chave de criptografia gerenciada pelo Google: o método de criptografia padrão. Use esse método se quiser que o Google gerencie as chaves de criptografia que protegem seus dados neste conjunto de dados da API Cloud Healthcare.

    • Chave do Cloud KMS: use uma chave de criptografia gerenciada pelo cliente (CMEK).

  6. Clique em Criar. A página Navegador é exibida. O novo conjunto de dados será exibido na lista.

gcloud

Crie o conjunto de dados usando o comando gcloud healthcare datasets create.

Antes de usar os dados do comando abaixo, faça estas substituições:

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud healthcare datasets create DATASET_ID \
  --location=LOCATION \
  --encryption-key=KEY_RESOURCE_ID

Windows (PowerShell)

gcloud healthcare datasets create DATASET_ID `
  --location=LOCATION `
  --encryption-key=KEY_RESOURCE_ID

Windows (cmd.exe)

gcloud healthcare datasets create DATASET_ID ^
  --location=LOCATION ^
  --encryption-key=KEY_RESOURCE_ID

Você receberá uma resposta semelhante a esta

Create request issued for: [DATASET_ID]
Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete...
Created dataset [DATASET_ID].

REST

  1. Crie o conjunto de dados usando o método datasets.create.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    Corpo JSON da solicitação:

    {
      "encryptionSpec": {
        "kmsKeyName": "KEY_RESOURCE_ID"
      }
    }
    

    Para enviar a solicitação, escolha uma destas opções:

    curl

    Salve o corpo da solicitação em um arquivo chamado request.json. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:

    cat > request.json << 'EOF'
    {
      "encryptionSpec": {
        "kmsKeyName": "KEY_RESOURCE_ID"
      }
    }
    EOF

    Depois execute o comando a seguir para enviar a solicitação REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets?datasetId=DATASET_ID"

    PowerShell

    Salve o corpo da solicitação em um arquivo chamado request.json. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:

    @'
    {
      "encryptionSpec": {
        "kmsKeyName": "KEY_RESOURCE_ID"
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Depois execute o comando a seguir para enviar a solicitação REST:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets?datasetId=DATASET_ID" | Select-Object -Expand Content

    APIs Explorer

    Copie o corpo da solicitação e abra a página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Cole o corpo da solicitação nessa ferramenta, preencha todos os outros campos obrigatórios e clique em Executar.

    A saída é esta: A resposta contém um identificador para uma operação de longa duração (LRO). Operações de longa duração são retornadas quando as chamadas de método podem demorar mais para serem concluídas. Observe o valor de OPERATION_ID. Você vai precisar desse valor na próxima etapa.

  2. Confira o status da operação de longa duração usando o método projects.locations.datasets.operations.get.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do seu projeto do Google Cloud;
    • LOCATION: o local do conjunto de dados;
    • DATASET_ID: o ID do conjunto de dados;
    • OPERATION_ID: o ID retornado da operação de longa duração.

    Para enviar a solicitação, escolha uma destas opções:

    curl

    execute o seguinte comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Execute o seguinte comando:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    APIs Explorer

    Abra a página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Preencha todos os campos obrigatórios e clique em Executar.

    A saída é esta: Quando a resposta contém "done": true, a operação de longa duração foi concluída.

Determinar se um conjunto de dados é protegido pelo Cloud KMS

Para cada uma das chaves que você criou ou que protege seus conjuntos de dados da API Cloud Healthcare, é possível ver quais recursos essa chave protege com o rastreamento de uso da chave. Para mais informações, consulte Conferir o uso da chave.

Rotação de chaves

O Cloud KMS é compatível com a rotação de chaves automática e manual para uma nova versão.

A rotação de uma chave resulta em:

  • Os conjuntos de dados da API Cloud Healthcare criados após a rotação usam a nova versão da chave para criptografia e todas as operações.
  • Os recursos em um conjunto de dados criptografados com a chave não são recriptografados automaticamente com a nova versão da chave primária.

Para que a criptografia funcione, todas as versões da chave precisam estar disponíveis. Caso contrário, o conjunto de dados da API Cloud Healthcare será desativado, e todas as solicitações para o conjunto de dados vão falhar. Para mais informações, consulte Considerações sobre chaves externas e Excluir conjuntos de dados desativados e permanentes.

Remover o acesso da API Cloud Healthcare à chave do Cloud KMS

Você tem controle sobre as chaves e pode desativar, destruir ou revogar permissões na chave para que a API Cloud Healthcare não acessa dados criptografados com CMEK. Depois que você destruir uma chave ou versão de chave associada a um conjunto de dados da API Cloud Healthcare, todos os dados criptografados com essa chave ou versão de chave serão perdidos permanentemente.

Há um atraso entre o momento em que você desativa uma chave ou versão de chave e quando ela não pode mais ser usada. Há também um atraso entre o momento em que você revoga as permissões da conta de serviço do Agente de serviço do Cloud Healthcare na chave e o momento em que ela não pode mais ser acessada. Para mais informações, consulte Consistência de recursos do Cloud KMS.

Exportar e importar dados para uma instância ativada para CMEK

Para manter os dados criptografados com uma chave gerenciada pelo cliente durante uma operação de exportação, é necessário definir uma CMEK no destino de armazenamento antes de iniciar a exportação. Não há requisitos ou restrições especiais para importar dados para um conjunto de dados criptografado por CMEK ao importar de armazenamento não CMEK ou criptografado por CMEK.

Restrições

Preços

Os conjuntos de dados são faturados da mesma forma, independentemente de serem criptografados com CMEK. Para mais informações, consulte Preços da API Cloud Healthcare.

Você vai receber cobranças do Cloud KMS pelo custo da chave e por qualquer operação criptográfica nesta chave. Essas operações ocorrem quando a API Cloud Healthcare usa a chave para criptografia ou descriptografia. Esses custos serão mínimos com base no número esperado de operações criptográficas geradas pela API Cloud Healthcare. Para mais informações, consulte Preços do Cloud KMS.

Cotas do Cloud KMS e API Cloud Healthcare

Quando você usa a CMEK na API Cloud Healthcare, seus projetos podem consumir cotas de solicitações criptográficas do Cloud KMS. Os conjuntos de dados da API Cloud Healthcare criptografados com CMEK e os armazenamentos DICOM, FHIR e HL7v2 consomem essas cotas para todas as operações, exceto datasets.get. As operações de criptografia e descriptografia que usam chaves CMEK só afetam as cotas do Cloud KMS se você usar chaves de hardware (Cloud HSM) ou externas (Cloud EKM). Para mais informações, consulte Cotas do Cloud KMS.

A seguir