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

Nesta página, descrevemos como criptografar dados armazenados em instâncias da IA antilavagem de dinheiro com chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês).

Visão geral

Todos os dados do cliente em uma instância da IA antilavagem de dinheiro são criptografados com uma chave CMEK quando armazenados em repouso. Você gerencia a chave no Cloud Key Management Service e controla o acesso a ela usando o Identity and Access Management. Se você desativar temporariamente ou destruir permanentemente a chave CMEK, os dados criptografados com ela não poderão ser acessados.

A CMEK oferece controle sobre mais aspectos do ciclo de vida e do gerenciamento das chaves, mas também gera mais custos para o serviço do Cloud KMS.

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

Você atribui uma chave CMEK ao criar uma instância. Todas as instâncias precisam ser configuradas com CMEK e não podem ser alteradas para usar a criptografia padrão do Google.

Para obter mais informações gerais sobre CMEK, como quando e por que ativá-las, consulte a documentação do Cloud KMS.

Dados do cliente

Todos os dados do cliente processados pela IA antilavagem de dinheiro são criptografados em repouso usando a chave CMEK especificada no recurso pai da instância correspondente. Isso inclui todos os dados do cliente associados aos recursos da IA antilavagem de dinheiro, como conjuntos de dados, configurações de mecanismos, 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, registros, hiperparâmetros de modelo, pesos de modelo e resultados de previsão, é criptografado usando a chave CMEK da instância correspondente.

A IA antilavagem de dinheiro 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, configure uma chave CMEK separada no seu projeto do Google Cloud. A chave KMS especificada em uma instância é usada para recursos de IA antilavagem de dinheiro e os respectivos dados.

Como criar uma chave e conceder permissões

Nas instruções a seguir, explicamos como criar uma chave para uma instância e conceder permissões para criptografar e descriptografar dados com ela. É possível usar uma chave criada diretamente no Cloud KMS ou uma chave gerenciada externamente que você disponibiliza com o Gerenciador de chaves externo do Cloud.

  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, 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
      • 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": CREATE_TIME
      }
      

      gcloud

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

      • 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
      • KEY_RING_ID: um identificador definido pelo usuário para o keyring.

      Execute o comando a seguir:

      Linux, macOS ou Cloud Shell

      gcloud kms keyrings create KEY_RING_ID \
        --location LOCATION
      

      Windows (PowerShell)

      gcloud kms keyrings create KEY_RING_ID `
        --location LOCATION
      

      Windows (cmd.exe)

      gcloud kms keyrings create KEY_RING_ID ^
        --location LOCATION
      
      Você 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, 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
      • KEY_RING_ID: o identificador definido pelo usuário para o keyring
      • KEY_ID: um identificador definido pelo usuário para a chave.

      Solicitar corpo JSON:

      {
        "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": CREATE_TIME,
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
          "generateTime": GENERATE_TIME
        },
        "purpose": "ENCRYPT_DECRYPT",
        "createTime": CREATE_TIME,
        "versionTemplate": {
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
        },
        "destroyScheduledDuration": "86400s"
      }
      

      gcloud

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

      • 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
      • 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 comando a seguir:

      Linux, macOS ou Cloud Shell

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

      Windows (PowerShell)

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

      Windows (cmd.exe)

      gcloud kms keys create KEY_ID ^
        --keyring KEY_RING_ID ^
        --location LOCATION ^
        --purpose "encryption"
      
      Você 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 antilavagem de dinheiro está sendo executada

    Execute o comando a seguir:

    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 da IA antilavagem de dinheiro. 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 antilavagem de dinheiro 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
    • KEY_RING_ID: um identificador definido pelo usuário para o keyring.
    • PROJECT_NUMBER: o número do projeto do Google Cloud em que a IA antilavagem de dinheiro está em execução

    Execute o comando a seguir:

    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 você pode 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 a uma instância criptografada por CMEK:

Recomendamos que você revogue as permissões da conta de serviço da IA antilavagem de dinheiro antes de desativar ou destruir uma chave. As alterações nas permissões são propagadas em segundos para que você possa 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 visualizar ou recuperar dados dela. Todos os dados armazenados na instância ficam inacessíveis, incluindo recursos da API, como conjuntos de dados, modelos, configurações do mecanismo, resultados de backtest e resultados de previsão. Os usuários com o papel de leitor da IA antilavagem de dinheiro ainda podem ver os metadados da instância, como o nome dela.

Os usuários com o papel de Administrador da IA antilavagem de dinheiro ou de Proprietário podem excluir a instância.

Políticas da organização de CMEK

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

A seguir