Encriptar datos con claves de encriptación administradas por el cliente (CMEK)

En esta página, se describe cómo encriptar datos almacenados en instancias de IA contra el lavado de dinero con claves de encriptación administradas por el cliente (CMEK).

Descripción general

Todos los datos del cliente en una instancia de IA contra el lavado de dinero se encriptan con una clave CMEK cuando se almacenan en reposo. Administras la clave en Cloud Key Management Service y controlas el acceso a la clave con Identity and Access Management. Si inhabilitas la clave CMEK de forma temporal o la destruyes de manera permanente, no se podrá acceder a los datos encriptados con esa clave.

Las CMEK te permiten controlar más aspectos del ciclo de vida y la administración de tus claves, pero también generan costos adicionales por el servicio de Cloud KMS.

Cloud KMS puede ejecutarse en el mismo proyecto de Google Cloud que la IA contra el lavado de dinero o en un proyecto separado en el que administras claves de forma centralizada para varios proyectos.

Debes asignar una clave CMEK cuando creas una instancia. Todas las instancias se deben configurar mediante CMEK y no se pueden cambiar para usar la encriptación predeterminada de Google.

Para obtener más información sobre las CMEK en general, incluso cuándo y por qué habilitarlas, consulta la documentación de Cloud KMS.

Datos de clientes

Todos los datos del cliente que controla la IA contra el lavado de dinero se encriptan en reposo con la clave CMEK especificada en el recurso superior correspondiente de la instancia. Esto incluye todos los datos del cliente asociados con los recursos de IA contra el lavado de dinero, como conjuntos de datos, Todo el almacenamiento temporal y persistente de los datos del cliente, incluidas las copias de entradas y salidas, las funciones de AA generadas, los registros, los hiperparámetros del modelo, los pesos del modelo y los resultados de las predicciones, se encriptan con una clave CMEK de la instancia correspondiente.

La IA contra el lavado de dinero no administra la encriptación de los datos de entrada o salida en tu proyecto de Google Cloud. Si deseas que se encripten estos datos, debes configurar una clave CMEK independiente en tu proyecto de Google Cloud. La clave de KMS especificada en una instancia se usa para los recursos de IA contra el lavado de dinero y sus datos.

Crea una clave y otorga permisos

En las siguientes instrucciones, se explica cómo crear una clave para una instancia y otorgar permisos con el objetivo de encriptar y desencriptar datos de la instancia con la clave. Puedes usar una clave creada directamente en Cloud KMS o una clave administrada de forma externa que pongas a disposición con Cloud External Key Manager.

  1. En el proyecto de Google Cloud en el que deseas administrar tus claves, haz lo siguiente:

    1. Habilita la API de Cloud KMS.

    2. Crea un llavero de claves con el método projects.locations.keyRings.create. La ubicación del llavero de claves de Cloud KMS debe coincidir con la ubicación de la instancia que encriptas.

      REST

      Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

      • KMS_PROJECT_ID: Es el ID del proyecto de Google Cloud para el proyecto que contiene el llavero de claves.
      • LOCATION: Es la ubicación del llavero de claves. Usa una de las regiones compatibles:
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: Es un identificador definido por el usuario para el llavero de claves.

      Para enviar tu solicitud, elige una de estas opciones:

      curl

      Ejecuta el siguiente 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

      Ejecuta el siguiente 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

      Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

      {
        "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID",
        "createTime": CREATE_TIME
      }
      

      gcloud

      Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

      • LOCATION: Es la ubicación del llavero de claves. Usa una de las regiones compatibles:
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: Es un identificador definido por el usuario para el llavero de claves.

      Ejecuta el siguiente comando:

      Linux, macOS o 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
      
      Deberías recibir una respuesta vacía:
      $

    3. Crea una clave con el método projects.locations.keyRings.cryptoKeys.

      REST

      Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

      • KMS_PROJECT_ID: Es el ID del proyecto de Google Cloud para el proyecto que contiene el llavero de claves.
      • LOCATION: Es la ubicación del llavero de claves. Usa una de las regiones compatibles:
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: Es el identificador definido por el usuario para el llavero de claves.
      • KEY_ID: Es un identificador definido por el usuario para la clave.

      Cuerpo JSON de la solicitud:

      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      

      Para enviar tu solicitud, elige una de estas opciones:

      curl

      Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el comando siguiente en la terminal para crear o reemplazar este archivo en el directorio actual:

      cat > request.json << 'EOF'
      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      EOF

      Luego, ejecuta el siguiente comando para enviar tu solicitud de 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

      Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el comando siguiente en la terminal para crear o reemplazar este archivo en el directorio actual:

      @'
      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      '@  | Out-File -FilePath request.json -Encoding utf8

      Luego, ejecuta el siguiente comando para enviar tu solicitud de 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

      Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

      {
        "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 cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

      • LOCATION: Es la ubicación del llavero de claves. Usa una de las regiones compatibles:
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
      • KEY_RING_ID: Es el identificador definido por el usuario para el llavero de claves.
      • KEY_ID: Es un identificador definido por el usuario para la clave.

      Ejecuta el siguiente comando:

      Linux, macOS o 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"
      
      Deberías recibir una respuesta vacía:
      $

  2. Si no creaste una instancia de IA contra el lavado de dinero en el proyecto de IA contra el lavado de dinero, la cuenta de servicio de IA contra el lavado de dinero aún no existe. Cree la cuenta de servicio.

    Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

    • PROJECT_ID: Es el ID del proyecto de Google Cloud para el proyecto en el que se ejecuta la IA contra el lavado de dinero.

    Ejecuta el siguiente comando:

    Linux, macOS o 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
    

    Deberías recibir una respuesta similar a la que figura a continuación:

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

  3. Otorga el rol de IAM encriptador/desencriptador de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) a la cuenta de servicio de IA contra el lavado de dinero. Otorga este permiso en la clave que creaste.

    Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

    • PROJECT_ID: Es el ID del proyecto de Google Cloud para el proyecto en el que se ejecuta la IA contra el lavado de dinero.
    • KEY_ID: Es el identificador de la clave definido por el usuario.
    • LOCATION: Es la ubicación del llavero de claves. Usa una de las regiones compatibles:
      • us-central1
      • us-east1
      • asia-south1
      • europe-west1
      • europe-west2
      • europe-west4
      • northamerica-northeast1
      • southamerica-east1
    • KEY_RING_ID: Es un identificador definido por el usuario para el llavero de claves.
    • PROJECT_NUMBER: Es el número de proyecto de Google Cloud en el que se ejecuta la IA contra el lavado de dinero.

    Ejecuta el siguiente comando:

    Linux, macOS o 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
    

    Deberías recibir una respuesta similar a la que figura a continuación:

    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 obtener más información sobre este comando, consulta la documentación de claves add-iam-policy-binding de KMS de gcloud.

Ahora puedes crear una instancia y especificar la clave que se usará para la encriptación.

Quita el acceso

Existen varias formas de quitar el acceso a una instancia encriptada con CMEK:

Te recomendamos que revoques los permisos de la cuenta de servicio de IA contra el lavado de dinero antes de inhabilitar o destruir una clave. Los cambios en los permisos se propagan en segundos, por lo que puedes observar los impactos de inhabilitar o destruir una clave.

Cuando inhabilitas o destruyes la clave de encriptación para una instancia, pierdes la capacidad de ver o recuperar datos de la instancia. Todos los datos almacenados en la instancia se vuelven inaccesibles, incluidos los recursos de la API, como los conjuntos de datos, los modelos, los parámetros de configuración del motor, los resultados de la prueba interna y los resultados de la predicción. Los usuarios con la función de visualizador de IA contra el lavado de dinero aún pueden ver los metadatos de la instancia, como su nombre.

Los usuarios con el rol de administrador de IA contra el lavado de dinero o de propietario pueden borrar la instancia.

Políticas de la organización de CMEK

La IA contra el lavado de dinero no es compatible con las políticas de la organización de CMEK. Sin embargo, la IA contra el lavado de dinero siempre requiere el uso de CMEK, sin importar la política de la organización constraints/gcp.restrictNonCmekServices.

Próximos pasos