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

Nesta página, descrevemos como criptografar dados armazenados em instâncias da AML AI 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ê cria e 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ó é compatível com a CMEK usando o Cloud KMS. Ela não é compatível com a criptografia padrão do Google.

Com a CMEK, você controla as chaves, incluindo o nível de proteção, local, programação de rotação, permissões de uso e acesso e limites criptográficos. Com o Cloud KMS, também é possível ver registros de auditoria e controlar ciclos de vida de chaves, mas isso gera custos adicionais para o serviço do Cloud KMS.

O Cloud KMS pode ser executado no mesmo projeto Google Cloud que o AML AI 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. Você ainda pode revezar a chave.

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

Níveis de proteção

Com o Cloud KMS, você pode escolher entre vários níveis de proteção, incluindo:

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

Saiba como configurar a CMEK na IA de AML. Nem todos os níveis de proteção estão disponíveis em todas as regiões. A IA de AML não é compatível com chaves de criptografia fornecidas pelo cliente (CSEK) nem com o Cloud External Key Manager.

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 Instance principal correspondente. Isso inclui todos os dados do cliente associados aos recursos da IA de AML, como conjuntos de dados, configurações de mecanismo, modelos e muito mais. Todo o armazenamento temporário e permanente de dados do cliente, incluindo cópias de entradas e saídas, recursos de ML gerados, hiperparâmetros e pesos do modelo e resultados de previsão, é criptografado 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 pode não incluir identificadores de recursos, atributos ou outros rótulos de dados.

Criptografar dados de entrada e saída

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

Leia mais sobre criptografia no BigQuery.

Rotação de chaves

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

Um único recurso de IA do AML pode ser armazenado internamente como várias unidades. Se, durante o ciclo de vida 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 da chave.

Se você fizer a rotação de 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 na IA de AML.

Leia 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 da instância com a chave.

  1. No projeto Google Cloud em que você quer gerenciar as 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 que você criptografa.

      REST

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

      • KMS_PROJECT_ID: o ID do projeto Google Cloud 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
        • europe-west6
        • me-central2
        • 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 Google Cloud 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
        • europe-west6
        • me-central2
        • 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 Google Cloud 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
        • europe-west6
        • me-central2
        • 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 Google Cloud 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
        • europe-west6
        • me-central2
        • 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 AML no projeto de IA AML, a conta de serviço da IA AML 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 Google Cloud 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 Criptografador/descriptografador de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) à conta de serviço da IA de 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 Google Cloud 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
      • europe-west6
      • me-central2
      • northamerica-northeast1
      • southamerica-east1
      • australia-southeast1
    • KEY_RING_ID: um identificador definido pelo usuário para o keyring
    • PROJECT_NUMBER: o Google Cloud número do projeto em que a IA de AML está sendo executada

    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 com CMEK:

Recomendamos revogar as permissões da conta de serviço da IA de 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 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 a ela. Todos os dados do cliente armazenados na instância ficam inacessíveis, incluindo modelos, configurações do mecanismo, resultados de backtest e de previsão. Os usuários com qualquer função de leitor da IA de AML ainda podem ver campos como o nome da instância ou os outros campos de recursos retornados ao recuperar recursos da IA de AML.

Todas as operações que usam ou exportam dados do cliente, por exemplo, a exportação de metadados de backtestResults, vão falhar.

Os usuários com os papéis de Administrador ou de Proprietário da AML AI podem excluir a instância.

Políticas da organização de CMEK

A IA de AML não é compatível com políticas da organização de CMEK. No entanto, a IA de AML sempre exige o uso da CMEK, independente da política da organização constraints/gcp.restrictNonCmekServices.

Interação com o VPC-SC

Se você configurou a IA de AML em um perímetro do VPC-SC, a chave CMEK ainda precisa estar acessível à conta de serviço. Se a chave não estiver no mesmo perímetro da VPC-SC, há várias maneiras de fazer isso, incluindo:

  • Usar uma regra de saída para permitir o recurso
  • Usar o peering de perímetro de VPC

A seguir