Criptografar dados usando chaves de criptografia gerenciadas pelo cliente (CMEK)

Esta página descreve como criptografar dados armazenados em instâncias de IA de AML com chaves de criptografia gerenciadas pelo cliente (CMEK).

Visão geral

Todos os dados do cliente em uma instância de IA de AML são criptografados em repouso usando uma chave CMEK. Você gerencia a chave no Cloud Key Management Service (Cloud KMS) e controla o acesso a ela usando o Identity and Access Management. Se você desativar temporariamente ou destruir permanentemente a chave CMEK, não será possível acessar os dados criptografados com ela.

A IA de AML só oferece suporte à CMEK usando o Cloud KMS. Ele não oferece suporte à criptografia padrão do Google.

Com a CMEK, você controla mais aspectos do ciclo de vida e do gerenciamento das chaves, mas também gera outros custos para o serviço do Cloud KMS.

O Cloud KMS pode ser executado no mesmo projeto do Google Cloud que a IA de AML ou em um projeto separado, em que você gerencia centralmente as chaves de vários projetos.

A configuração de criptografia é definida quando você cria uma instância. Depois que uma instância é criada, não é possível atribuir uma chave diferente do Cloud KMS. Ainda é possível trocar a chave.

Para mais informações sobre a CMEK em geral, consulte a documentação do Cloud KMS.

Níveis de proteção

O Cloud KMS permite escolher entre vários níveis de proteção, incluindo:

  • Chaves de software
  • Módulos de segurança de hardware (HSMs) usando o Cloud HSM

Leia como configurar a CMEK na IA antilavagem de dinheiro. Nem todos os níveis de proteção estão disponíveis em todas as regiões. A IA AML não oferece suporte a chaves de criptografia fornecidas pelo cliente (CSEK, na sigla em inglês) ou ao Gerenciador de chaves externas do Cloud.

Dados do cliente

Todos os dados do cliente processados pela IA de AML são criptografados em repouso usando a chave CMEK especificada no recurso Instância pai correspondente. Isso inclui todos os dados do cliente associados a recursos de IA de AML, como conjuntos de dados, configurações do mecanismo, modelos e muito mais. Todo o armazenamento temporário e persistente de dados do cliente, incluindo cópias de entradas e saídas, recursos de ML gerados, hiperparâmetros de modelo, pesos de modelo e resultados de previsão, são criptografados usando a chave CMEK da instância correspondente.

Consulte os termos específicos do serviço para ver a definição de dados do cliente, que não podem incluir identificadores de recursos, atributos ou outros rótulos de dados.

Como criptografar dados de entrada e saída

A configuração de criptografia de IA de AML em uma instância é usada apenas para recursos de IA de AML e os dados deles. A IA de AML não gerencia a criptografia de dados de entrada ou saída no seu projeto do Google Cloud. Se você quiser que esses dados sejam criptografados usando o CMEK, configure uma chave do Cloud KMS para corresponder ao nível de proteção de chave escolhido no conjunto de dados do BigQuery. Você também pode reutilizar a mesma chave usada pela IA de AML.

Leia mais sobre a criptografia no BigQuery.

Rotação de chaves

A rotação periódica e automática de chaves é uma prática de segurança recomendada. Com a CMEK, a rotação de chaves é controlada por você. Quando você alterna uma chave, os dados criptografados com versões anteriores não são recriptografados automaticamente com a nova versão da chave.

Um único recurso de IA de AML pode ser armazenado internamente como várias unidades. Se, durante a vida útil de um recurso de IA de AML, a versão da chave for alternada, nem todas as unidades poderão ser criptografadas com a mesma versão.

Se você rotacionar uma chave, não será possível forçar uma nova criptografia ou determinar se as versões mais antigas da chave podem ser excluídas com segurança.

Saiba mais sobre a rotação de chaves com o Cloud KMS.

Como criar uma chave e conceder permissões

As instruções a seguir explicam como criar uma chave para uma instância e conceder permissões para criptografar e descriptografar dados de instância com a chave. É possível usar uma chave criada diretamente no Cloud KMS ou uma chave gerenciada externamente que você disponibiliza com o Cloud External Key Manager.

  1. No projeto do Google Cloud em que você quer gerenciar suas chaves:

    1. Ative a API Cloud KMS.

    2. Crie um keyring usando o método projects.locations.keyRings.create. O local do keyring do Cloud KMS precisa corresponder ao local da instância criptografada.

      REST

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

      • KMS_PROJECT_ID: o ID do projeto do Google Cloud para o projeto que contém o keyring
      • LOCATION: a localização do keyring. Use uma das regiões compatíveis.
        Mostrar locais
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: um identificador definido pelo usuário para o keyring

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

      curl

      Execute o seguinte comando:

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d "" \
      "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING_ID"

      PowerShell

      Execute o seguinte comando:

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

      Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -Uri "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING_ID" | Select-Object -Expand Content

      Você receberá uma resposta JSON semelhante a esta:

      {
        "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID",
        "createTime": "2023-03-14T15:52:55.358979323Z"
      }
      

      gcloud

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

      • KMS_PROJECT_ID: o ID do projeto do Google Cloud para o projeto que contém o keyring
      • LOCATION: a localização do keyring. Use uma das regiões compatíveis.
        Mostrar locais
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: um identificador definido pelo usuário para o keyring

      Execute o seguinte comando:

      Linux, macOS ou Cloud Shell

      gcloud kms keyrings create KEY_RING_ID \
        --project KMS_PROJECT_ID --location LOCATION

      Windows (PowerShell)

      gcloud kms keyrings create KEY_RING_ID `
        --project KMS_PROJECT_ID --location LOCATION

      Windows (cmd.exe)

      gcloud kms keyrings create KEY_RING_ID ^
        --project KMS_PROJECT_ID --location LOCATION
      Você vai receber uma resposta vazia:
      $

    3. Crie uma chave usando o método projects.locations.keyRings.cryptoKeys.

      REST

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

      • KMS_PROJECT_ID: o ID do projeto do Google Cloud para o projeto que contém o keyring
      • LOCATION: a localização do keyring. Use uma das regiões compatíveis
        Mostrar locais
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: o identificador definido pelo usuário para o keyring
      • KEY_ID: um identificador definido pelo usuário para a chave

      Corpo JSON da solicitação:

      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      

      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'
      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      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://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys?crypto_key_id=KEY_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:

      @'
      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      '@  | 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://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys?crypto_key_id=KEY_ID" | Select-Object -Expand Content

      Você receberá uma resposta JSON semelhante a esta:

      {
        "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys/KEY_ID",
        "primary": {
          "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys/KEY_ID/cryptoKeyVersions/1",
          "state": "ENABLED",
          "createTime": "2023-03-14T15:52:55.358979323Z",
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
          "generateTime": "2023-03-14T15:52:55.358979323Z"
        },
        "purpose": "ENCRYPT_DECRYPT",
        "createTime": "2023-03-14T15:52:55.358979323Z",
        "versionTemplate": {
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
        },
        "destroyScheduledDuration": "86400s"
      }
      

      gcloud

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

      • KMS_PROJECT_ID: o ID do projeto do Google Cloud para o projeto que contém o keyring
      • LOCATION: a localização do keyring. Use uma das regiões compatíveis
        Mostrar locais
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: o identificador definido pelo usuário para o keyring
      • KEY_ID: um identificador definido pelo usuário para a chave

      Execute o seguinte comando:

      Linux, macOS ou Cloud Shell

      gcloud kms keys create KEY_ID \
        --keyring KEY_RING_ID \
        --project KMS_PROJECT_ID \
        --location LOCATION \
        --purpose "encryption"

      Windows (PowerShell)

      gcloud kms keys create KEY_ID `
        --keyring KEY_RING_ID `
        --project KMS_PROJECT_ID `
        --location LOCATION `
        --purpose "encryption"

      Windows (cmd.exe)

      gcloud kms keys create KEY_ID ^
        --keyring KEY_RING_ID ^
        --project KMS_PROJECT_ID ^
        --location LOCATION ^
        --purpose "encryption"
      Você vai receber uma resposta vazia:
      $

  2. Se você não criou uma instância de IA antilavagem de dinheiro no projeto de IA antilavagem de dinheiro, a conta de serviço de IA antilavagem de dinheiro ainda não existe. Crie a conta de serviço.

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

    • PROJECT_ID: o ID do projeto do Google Cloud para o projeto em que a IA de AML está sendo executada

    Execute o seguinte comando:

    Linux, macOS ou Cloud Shell

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID

    Windows (PowerShell)

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID

    Windows (cmd.exe)

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID

    Você receberá uma resposta semelhante a esta:

    Service identity created: service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com

  3. Conceda o papel do IAM de Criptografador/Descriptografador de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) à conta de serviço de IA AML. Conceda essa permissão na chave que você criou.

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

    • PROJECT_ID: o ID do projeto do Google Cloud para o projeto em que a IA de AML está sendo executada
    • KEY_ID: o identificador definido pelo usuário para a chave
    • LOCATION: a localização do keyring. Use uma das regiões compatíveis.
      Mostrar locais
      • us-central1
      • us-east1
      • asia-south1
      • europe-west1
      • europe-west2
      • europe-west4
      • northamerica-northeast1
      • southamerica-east1
      • australia-southeast1
    • KEY_RING_ID: um identificador definido pelo usuário para o keyring
    • PROJECT_NUMBER: o número do projeto do Google Cloud do projeto em que a IA de AML está em execução

    Execute o seguinte comando:

    Linux, macOS ou Cloud Shell

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID \
      --location LOCATION --keyring=KEY_RING_ID \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Windows (PowerShell)

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID `
      --location LOCATION --keyring=KEY_RING_ID `
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com `
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Windows (cmd.exe)

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID ^
      --location LOCATION --keyring=KEY_RING_ID ^
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com ^
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Você receberá uma resposta semelhante a esta:

    Updated IAM policy for key KEY_ID.
    bindings:
    - members:
      - serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com
      role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    etag: BwYCq0Sq4Ho=
    version: 1
    

    Para mais informações sobre esse comando, consulte a documentação gcloud kms keys add-iam-policy-binding.

Agora é possível criar uma instância e especificar a chave a ser usada para criptografia.

Como remover o acesso

Há várias maneiras de remover o acesso à chave da instância criptografada por CMEK:

Recomendamos revogar as permissões da conta de serviço de IA AML antes de desativar ou destruir uma chave. As mudanças nas permissões são propagadas em segundos, então é possível observar os impactos da desativação ou da destruição de uma chave.

Ao desativar ou destruir a chave de criptografia de uma instância, você perde a capacidade de usar ou recuperar dados do cliente associados à instância. Todos os dados do cliente armazenados na instância ficam inacessíveis, incluindo modelos, configurações do mecanismo, resultados de backtest e de predição. Os usuários com qualquer função de leitor de IA AML ainda podem acessar campos como o nome da instância ou outros campos de recursos retornados pela recuperação de recursos de IA AML.

Qualquer operação que use ou exporte dados do cliente, por exemplo, a exportação de metadados backtestResults, vai falhar.

Os usuários com o papel de administrador da IA de AML ou de proprietário podem excluir a instância.

Políticas da organização de CMEK

A IA de AML não oferece suporte a políticas da organização de CMEK. No entanto, a IA de AML sempre exige o uso de CMEK, independentemente da política da organização constraints/gcp.restrictNonCmekServices.

Interação com VPC-SC

Se você tiver configurado a IA de AML em um perímetro do VPC-SC, a chave CMK ainda precisará ser acessível à conta de serviço. Se a chave não estiver dentro do mesmo perímetro da VPC-SC, há várias maneiras de fazer isso, incluindo:

  • Usar uma regra de saída para adicionar o recurso à lista de permissões
  • Usar o peering de perímetro de VPC

A seguir