Ative as chaves de encriptação geridas pelo cliente (CMEK) para conjuntos de dados da Cloud Healthcare API

Por predefinição, Google Cloud encripta automaticamente os dados quando estão em repouso através de chaves de encriptação geridas pela Google. Se tiver requisitos de conformidade ou regulamentares específicos relacionados com as chaves que protegem os seus dados, pode usar chaves de encriptação geridas pelo cliente (CMEK) para os seus conjuntos de dados da Cloud Healthcare API. Em vez de a Google possuir e gerir as chaves de encriptação que protegem os seus dados, os conjuntos de dados da Cloud Healthcare API são encriptados com uma chave que controla e gere no Cloud Key Management Service (Cloud KMS).

Para mais informações sobre as CMEK em geral, incluindo quando e por que motivo as ativar, consulte o artigo Chaves de encriptação geridas pelo cliente (CMEK).

Antes de começar

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

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

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

Para obter informações sobre os Google Cloud IDs e os números dos projetos, consulte o artigo Identificar projetos.

Limitações

  • Só pode usar chaves do Cloud KMS quando cria um conjunto de dados da Cloud Healthcare API. Não pode ativar, alterar nem desativar chaves do Cloud KMS num conjunto de dados da Cloud Healthcare API existente.
  • Apenas os armazenamentos FHIR, DICOM e HL7v2 são suportados em conjuntos de dados encriptados com CMEK. A proteção CMEK aplica-se aos armazenamentos DICOM, FHIR e HL7v2 no conjunto de dados e aos respetivos recursos.
  • Não é possível remover a identificação de recursos encriptados com CMEK.

Operações de CMEK

As chaves do Cloud KMS são usadas quando um recurso encriptado com CMEK é criado, lido, atualizado ou eliminado, e para tarefas operacionais, como faturação ou garantir que a chave está disponível.

Considerações sobre chaves externas

Para obter informações sobre a utilização de chaves que gere num sistema de gestão de chaves externo suportado de um parceiro para proteger dados no Google Cloud, consulte o Cloud External Key Manager.

Se perder chaves que gere fora do Google Cloud, a Google não pode recuperar os seus dados.

Indisponibilidade de chaves e perda de dados

Se um conjunto de dados for encriptado por uma chave, e essa chave ficar indisponível e permanecer indisponível, a Cloud Healthcare API desativa e, eventualmente, elimina o conjunto de dados. Por vezes, uma chave fica indisponível se estiver desativada ou destruída, ou se estiver inacessível devido a autorizações revogadas, mas este comportamento ocorre se a chave estiver indisponível por qualquer motivo. O nível de proteção da chave ou se é uma chave externa não afeta este comportamento. As chaves externas também podem ficar indisponíveis de forma imprevisível. Por exemplo, podem surgir problemas de conetividade entre os seus Google Cloud recursos e o seu GCE.

O processo seguinte descreve como a disponibilidade das chaves é verificada e como um conjunto de dados pode ser desativado e eliminado:

  1. Depois de criar um conjunto de dados da Cloud Healthcare API encriptado com CMEK, a Cloud Healthcare API verifica o estado da chave a cada cinco minutos para garantir que a chave está disponível. Se a chave estiver indisponível, a Cloud Healthcare API continua a suportar pedidos ao conjunto de dados durante um máximo de uma hora.

  2. Após uma hora, se a Cloud Healthcare API ainda não conseguir estabelecer ligação ao Cloud KMS, o conjunto de dados da Cloud Healthcare API é desativado como medida de proteção. Para reativar o conjunto de dados da Cloud Healthcare API, contacte o seu representante do apoio técnico.

    Quando está desativada, só pode enviar pedidos datasets.get e datasets.delete para o conjunto de dados da Cloud Healthcare API. Outros pedidos falham com um erro 400 FAILED_PRECONDITION.

  3. Se o conjunto de dados da Cloud Healthcare API permanecer indisponível durante mais de 30 dias, é eliminado permanentemente. Todos os armazenamentos DICOM, FHIR e HL7v2 no conjunto de dados e os respetivos dados associados também são eliminados. Se forem eliminados, não é possível recuperar estes dados.

Criação de chaves

As secções seguintes descrevem como criar um conjunto de chaves do Cloud KMS e uma chave. Apenas são suportadas chaves de encriptação simétricas do Cloud KMS.

Localizações suportadas

As chaves do Cloud KMS estão disponíveis nas localizações da Cloud Healthcare API. Crie o conjunto de chaves numa localização que corresponda à região ou à multirregião do seu conjunto de dados da Cloud Healthcare API.

  • Qualquer conjunto de dados da Cloud Healthcare API multirregional tem de usar um anel de chaves multirregional de uma localização correspondente. Por exemplo, um conjunto de dados da Cloud Healthcare API na região us tem de ser protegido com um conjunto de chaves da região us, e um conjunto de dados da Cloud Healthcare API na região eu tem de ser protegido com um conjunto de chaves da região europe.

  • Os conjuntos de dados da API Cloud Healthcare regionais têm de usar chaves regionais correspondentes. Por exemplo, um conjunto de dados da Cloud Healthcare API na região asia-northeast1 tem de ser protegido com um anel de chaves da região asia-northeast1.

  • Não pode usar a região global quando configurar a CMEK para um conjunto de dados da Cloud Healthcare API.

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

Crie um conjunto de chaves e uma chave

Conclua os seguintes passos no Google Cloud projeto que executa o Cloud KMS:

  1. Crie um conjunto de chaves.
  2. Crie uma chave.

Conceda autorizações de encriptação e desencriptação

Para proteger os seus dados da Cloud Healthcare API com uma chave do Cloud KMS, conceda à conta de serviço do agente de serviço da Cloud Healthcare a função de encriptar/desencriptar do CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) nessa chave. Para ver instruções, consulte o artigo Autorizações de CMEK do conjunto de dados.

Depois de conceder a função à conta de serviço, a Cloud Healthcare API pode encriptar e desencriptar recursos encriptados com CMEK. As suas aplicações não precisam de especificar chaves ao ler ou escrever dados. A Cloud Healthcare API processa a encriptação.

Quando um requerente lê ou escreve um objeto encriptado com uma chave do Cloud KMS, acede ao objeto normalmente. Durante o pedido, o agente de serviço encripta ou desencripta automaticamente o objeto pedido, desde que sejam cumpridas as seguintes condições:

  • O agente do serviço continua a ter as autorizações necessárias.
  • A chave está disponível e ativada.

Crie um conjunto de dados da Cloud Healthcare API encriptado com CMEK

Os exemplos seguintes mostram como criar um conjunto de dados encriptado com CMEK.

Tem de especificar um ID do recurso da chave do Cloud KMS quando cria o conjunto de dados. Esta chave é sensível a maiúsculas e minúsculas e tem o seguinte formato:

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

Para ver os IDs de recursos das chaves do Cloud KMS, consulte o artigo Obter um ID de recurso do Cloud KMS.

Consola

  1. Na Google Cloud consola, aceda à página Navegador.

    Aceda ao navegador

  2. Clique em Criar conjunto de dados. É apresentada a página Criar conjunto de dados.

  3. No campo Nome, introduza um identificador para o conjunto de dados sujeito aos requisitos de tamanho e carateres permitidos do conjunto de dados.

  4. Selecione um dos seguintes tipos de localização:

    • Região. O conjunto de dados reside permanentemente numa Google Cloud região. Depois de selecionar esta opção, escreva ou selecione uma localização no campo Região.

    • Multirregião. O conjunto de dados reside permanentemente numa localização que abrange várias Google Cloud regiões. Depois de selecionar esta opção, escreva ou selecione uma localização de várias regiões no campo Várias regiões.

  5. Na secção Encriptação, selecione um dos seguintes tipos de encriptação:

    • Google-managed encryption key: o método de encriptação predefinido. Use este método se quiser que a Google faça a gestão das chaves de encriptação que protegem os seus dados neste conjunto de dados da Cloud Healthcare API.

    • Chave do Cloud KMS: use uma chave de encriptação gerida pelo cliente (CMEK).

  6. Clique em Criar. É apresentada a página Navegador. O novo conjunto de dados é apresentado na lista de conjuntos de dados.

gcloud

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

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes 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

Deve receber uma resposta semelhante à seguinte:

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 com o método datasets.create.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    Corpo JSON do pedido:

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

    Para enviar o seu pedido, escolha uma destas opções:

    curl

    Guarde o corpo do pedido num ficheiro denominado request.json. Execute o seguinte comando no terminal para criar ou substituir este ficheiro no diretório atual:

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

    Em seguida, execute o seguinte comando para enviar o seu pedido 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

    Guarde o corpo do pedido num ficheiro denominado request.json. Execute o seguinte comando no terminal para criar ou substituir este ficheiro no diretório atual:

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

    Em seguida, execute o seguinte comando para enviar o seu pedido 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

    Explorador de APIs

    Copie o corpo do pedido e abra a página de referência do método. O painel APIs Explorer é aberto no lado direito da página. Pode interagir com esta ferramenta para enviar pedidos. Cole o corpo do pedido nesta ferramenta, preencha todos os outros campos obrigatórios e clique em Executar.

    O resultado é o seguinte. A resposta contém um identificador para uma operação de longa duração (LRO). As operações de longa duração são devolvidas quando as chamadas de métodos podem demorar mais tempo a serem concluídas. Repare no valor de OPERATION_ID. Precisa deste valor no passo seguinte.

  2. Obtenha o estado da operação de execução longa através do método projects.locations.datasets.operations.get.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: o ID do seu Google Cloud projeto
    • LOCATION: a localização do conjunto de dados
    • DATASET_ID: o ID do conjunto de dados
    • OPERATION_ID: o ID devolvido pela operação de longa duração

    Para enviar o seu pedido, 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

    Explorador de APIs

    Abra a página de referência do método. O painel APIs Explorer é aberto no lado direito da página. Pode interagir com esta ferramenta para enviar pedidos. Preencha todos os campos obrigatórios e clique em Executar.

    O resultado é o seguinte. Quando a resposta contém "done": true, a operação de longa duração terminou.

Determine se um conjunto de dados está protegido pelo Cloud KMS

Para cada uma das chaves que criou ou que protegem os conjuntos de dados da Cloud Healthcare API, pode ver que recursos essa chave protege com a monitorização da utilização de chaves. Para mais informações, consulte o artigo Veja a utilização de chaves.

Rotação de chaves

O Cloud KMS suporta a rotação de chaves automática e manual para uma nova versão.

A alternância de uma chave resulta no seguinte:

  • Os conjuntos de dados da Cloud Healthcare API criados após a rotação usam a nova versão da chave para encriptação e todas as operações.
  • Os recursos num conjunto de dados existente que estão encriptados com a chave não são reenviados automaticamente com a nova versão da chave principal.

Para que a encriptação funcione, todas as versões das chaves têm de estar disponíveis. Caso contrário, o conjunto de dados da Cloud Healthcare API é desativado e todos os pedidos enviados para o conjunto de dados falham. Para mais informações, consulte as Considerações sobre chaves externas e os Conjuntos de dados desativados e eliminação permanente de conjuntos de dados.

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

Tem controlo sobre as suas chaves e pode desativar, destruir ou revogar autorizações na chave para que a Cloud Healthcare API não possa aceder a dados encriptados com CMEK. Depois de destruir uma chave ou uma versão da chave associada a um conjunto de dados da Cloud Healthcare API, todos os dados encriptados com essa chave ou versão da chave são perdidos permanentemente.

Existe um atraso entre o momento em que desativa uma chave ou uma versão da chave e o momento em que deixa de poder ser usada. Também existe um atraso entre o momento em que revoga as autorizações da conta de serviço do agente do serviço Cloud Healthcare na chave e o momento em que deixa de ser possível aceder à mesma. Para mais informações, consulte o artigo Consistência dos recursos do Cloud KMS.

Exporte e importe dados para uma instância com CMEK ativada

Para manter os seus dados encriptados com uma chave gerida pelo cliente durante uma operação de exportação, tem de definir uma CMEK no destino de armazenamento antes de iniciar a exportação. Não existem requisitos especiais nem restrições para importar dados para um conjunto de dados encriptado com CMEK quando importa dados de armazenamento não encriptado com CMEK ou encriptado com CMEK.

Restrições

Preços

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

A faturação é feita pelo Cloud KMS para o custo da chave e quaisquer operações criptográficas nessa chave. Estas operações ocorrem quando a Cloud Healthcare API usa a chave para encriptação ou desencriptação. Pode esperar que estes custos sejam mínimos, com base no número esperado de operações criptográficas geradas pela Cloud Healthcare API. Para mais informações, consulte os preços do Cloud KMS.

Quotas do Cloud KMS e da Cloud Healthcare API

Quando usa CMEK na Cloud Healthcare API, os seus projetos podem consumir quotas de pedidos criptográficos do Cloud KMS. Os conjuntos de dados da Cloud Healthcare API encriptados com CMEK e os respetivos arquivos DICOM, FHIR e HL7v2 consomem estas quotas para todas as operações, exceto datasets.get. As operações de encriptação e desencriptação que usam chaves CMEK afetam as quotas do Cloud KMS apenas se usar hardware (Cloud HSM) ou chaves externas (Cloud EKM). Para mais informações, consulte as cotas do Cloud KMS.

O que se segue?