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

Por padrão, o Google Cloud criptografa automaticamente os dados quando em repouso usando chaves de criptografia gerenciadas pelo Google. Se você tiver requisitos regulatórios ou de conformidade específicos relacionados às chaves que protegem seus dados, será possível usar chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês) para seus conjuntos de dados da API Cloud Healthcare. Em vez de o Google ser proprietário 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 a CMEK em geral, incluindo quando e por que ativá-la, 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 estarão no mesmo projeto do Google Cloud ou em projetos diferentes. Para mais orientações, consulte Separação de tarefas.

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

  • 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 igual a 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 as chaves do Cloud KMS ao criar um conjunto de dados da API Cloud Healthcare. Não é possível ativar, alterar ou desativar as chaves do Cloud KMS em um conjunto de dados atual da API Cloud Healthcare.
  • Somente armazenamentos FHIR, DICOM e HL7v2 são compatíveis com conjuntos de dados criptografados por CMEK. A proteção de CMEK se aplica aos armazenamentos DICOM, FHIR e HL7v2 no conjunto de dados e nos recursos deles.
  • Não é possível desidentificar recursos criptografados por CMEK.

Operações 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 garantia de disponibilidade da chave.

Considerações sobre chaves externas

Para informações sobre como usar chaves que você gerencia em um sistema de parceiro de gerenciamento de chaves externo com suporte para proteger dados no Google Cloud, consulte Gerenciador de chaves externo do Cloud.

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

Indisponibilidade de chaves e perda de dados

Se um conjunto de dados for criptografado por uma chave e essa chave ficar indisponível e permanecer assim, a API Cloud Healthcare desativará e excluirá o conjunto de dados. Às vezes, uma chave fica indisponível se estiver desativada ou destruída ou se estiver inacessível devido a permissões revogadas. No entanto, esse comportamento ocorre quando a chave não está disponível por algum 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 maneira imprevisível. Por exemplo, problemas de conectividade podem surgir entre os recursos do Google Cloud e o EKM.

O processo a seguir descreve como a disponibilidade de chaves é 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 CMEKs é 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 continuará aceitando solicitações para o conjunto de dados por até uma hora.

  2. Depois de 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 o representante do suporte.

    Quando desativada, só será 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 permanecer 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 forem excluídos, esses dados não poderão ser recuperados.

Criação de chaves

As seções a seguir descrevem como criar um keyring e uma chave do Cloud KMS. Somente as chaves de criptografia simétrica 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 seu 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 Criptografador/Descriptografador do CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) nessa chave. Para instruções, consulte Permissões da CMEK do conjunto de dados.

Depois de conceder o papel à conta de serviço, a API Cloud Healthcare pode criptografar e descriptografar recursos criptografados por CMEK. Os aplicativos não precisam especificar chaves ao ler ou gravar dados. A API Cloud Healthcare lida com 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 criptografado pela CMEK API Cloud Healthcare

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

Você precisa 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 ver os códigos de recurso da chave do Cloud KMS, consulte Como conseguir um código 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 do conjunto de dados.

  4. Selecione um dos seguintes tipos de local:

    • Region. O conjunto de dados reside 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 reside 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 Multirregional.

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

    • 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.

REST

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

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

    Solicitar corpo JSON:

    {
      "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, na sigla em inglês). Operações de longa duração são retornadas quando as chamadas de método podem levar mais tempo para serem concluídas. Anote 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, 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 criadas ou que protegem seus conjuntos de dados da API Cloud Healthcare, é possível ver quais recursos são protegidos com o rastreamento de uso de chaves. Para mais informações, consulte Ver o uso da chave.

Rotação de chaves

O Cloud KMS oferece suporte à rotação de chaves automática e manual para uma nova versão.

A rotação de uma chave resulta no seguinte:

  • 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 existente que são criptografados com a chave não são automaticamente recriptografados com a nova versão da chave primária.

Para que a criptografia funcione, todas as versões de chaves 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 falharão. Para mais informações, consulte Considerações importantes externas e Conjuntos de dados desativados e exclusão permanente de conjuntos de dados.

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

Você tem controle sobre suas chaves e pode desativar, destruir ou revogar permissões na chave para que a API Cloud Healthcare não possa acessar dados criptografados pela CMEK. Depois de 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 a desativação de uma chave ou versão de chave e o momento em que ela não pode mais ser usada. Também há um atraso entre a revogação das 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 seus dados criptografados com uma chave gerenciada pelo cliente durante uma operação de exportação, defina uma CMEK no destino do 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, quer não sejam criptografados por CMEK. Para mais informações, consulte Preços da API Cloud Healthcare.

Você é cobrado pelo Cloud KMS pelo custo da chave e de todas as operações criptográficas nela. Essas operações ocorrem quando a API Cloud Healthcare usa a chave para criptografia ou descriptografia. Espera-se que esses custos sejam 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 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 por 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