Encriptar datos con claves de encriptado gestionadas por el cliente (CMEK)

En esta página se describe cómo cifrar los datos almacenados en instancias de AML AI con claves de cifrado gestionadas por el cliente (CMEK).

Información general

Todos los datos de clientes de una instancia de AML AI se cifran en reposo con una clave CMEK. Gestionas la clave en Cloud Key Management Service (Cloud KMS) y controlas el acceso a ella mediante Gestión de Identidades y Accesos. Si inhabilitas temporalmente o destruyes de forma permanente la clave de CMEK, no se podrá acceder a los datos cifrados con esa clave.

AML AI solo admite CMEK mediante Cloud KMS. No es compatible con el cifrado predeterminado de Google.

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

Cloud KMS puede ejecutarse en el mismo Google Cloud proyecto que AML AI o en un proyecto independiente en el que gestiones las claves de forma centralizada para varios proyectos.

La configuración del cifrado se define al crear una instancia. Una vez que se ha creado una instancia, no puedes asignarle otra clave de Cloud KMS. Puedes girar la llave.

Para obtener más información sobre CMEK en general, consulta la documentación de Cloud KMS.

Niveles de protección

Cloud KMS te permite elegir entre varios niveles de protección, entre los que se incluyen los siguientes:

  • Claves de software
  • Módulos de seguridad de hardware (HSMs) con Cloud HSM

Consulta cómo configurar CMEK en AML AI. No todos los niveles de protección están disponibles en todas las regiones. Ten en cuenta que la IA de AML no admite claves de encriptado proporcionadas por el cliente (CSEK) ni Cloud External Key Manager.

Datos de clientes

Todos los Datos de Clientes que gestiona la IA de AML se cifran en reposo con la clave CMEK especificada en el recurso Instance principal correspondiente. Esto incluye todos los Datos de Cliente asociados a los recursos de AML AI, como conjuntos de datos, configuraciones de motor, modelos y más. Todo el almacenamiento temporal y persistente de Datos del Cliente, incluidas las copias de las entradas y salidas, las funciones de aprendizaje automático generadas, los hiperparámetros del modelo, los pesos del modelo y los resultados de las predicciones, se encriptan con la clave CMEK de la instancia correspondiente.

Consulta los términos específicos del servicio para ver la definición de datos del cliente, que puede no incluir identificadores de recursos, atributos u otras etiquetas de datos.

Encriptar datos de entrada y salida

La configuración del cifrado de AML AI en una instancia solo se usa para los recursos de AML AI y sus datos. AML AI no gestiona el cifrado de los datos de entrada ni de salida de tu proyecto de Google Cloud. Si quieres que estos datos se cifren con CMEK, debes configurar una clave de Cloud KMS que coincida con el nivel de protección de claves que hayas configurado en el conjunto de datos de BigQuery. También puedes reutilizar la misma clave que usa la IA de AML.

Más información sobre el cifrado en BigQuery

Rotación de claves

La rotación periódica y automática de claves es una práctica de seguridad recomendada. Con CMEK, tú controlas la rotación de claves. Cuando rotas una clave, los datos encriptados con versiones anteriores de la clave no se vuelven a encriptar automáticamente con la nueva versión.

Un solo recurso de IA de AML se puede almacenar internamente como varias unidades. Si, durante el tiempo de vida de un recurso de IA de AML, se rota la versión de la clave, es posible que no todas las unidades se cifren con la misma versión de la clave.

Si rotas una clave, no hay forma de forzar un recifrado en la IA de AML ni de determinar si las versiones anteriores de la clave se pueden eliminar de forma segura.

Consulta más información sobre la rotación de claves con Cloud KMS.

Crear una clave y conceder permisos

En las siguientes instrucciones se explica cómo crear una clave para una instancia y cómo conceder permisos para cifrar y descifrar datos de la instancia con la clave. Puedes usar una clave creada directamente en Cloud KMS o una clave gestionada de forma externa que pongas a disposición con Cloud External Key Manager.

  1. En el Google Cloud proyecto en el que quieras gestionar tus claves, sigue estos pasos:

    1. Habilita la API Cloud KMS.

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

      REST

      Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

      • KMS_PROJECT_ID: el ID del proyecto que contiene el conjunto de claves. Google Cloud
      • LOCATION: la ubicación del conjunto de claves. Usa una de las regiones admitidas
        Mostrar ubicaciones
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: identificador definido por el usuario del conjunto de claves

      Para enviar tu solicitud, elige una de estas opciones:

      curl

      Ejecuta el comando siguiente:

      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 comando siguiente:

      $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 siguiente:

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

      gcloud

      Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

      • KMS_PROJECT_ID: el ID del proyecto que contiene el conjunto de claves. Google Cloud
      • LOCATION: la ubicación del conjunto de claves. Usa una de las regiones admitidas
        Mostrar ubicaciones
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: identificador definido por el usuario del conjunto de claves

      Ejecuta el siguiente comando:

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

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

      REST

      Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

      • KMS_PROJECT_ID: el ID del proyecto que contiene el conjunto de claves. Google Cloud
      • LOCATION: la ubicación del conjunto de claves. Usa una de las regiones admitidas.
        Mostrar ubicaciones
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: identificador definido por el usuario del conjunto de claves
      • KEY_ID: identificador definido por el usuario de 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 siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

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

      A continuación, ejecuta el siguiente comando para enviar tu solicitud 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 siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

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

      A continuación, ejecuta el siguiente comando para enviar tu solicitud 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 siguiente:

      {
        "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 los datos de los comandos que se indican a continuación, haz los siguientes cambios:

      • KMS_PROJECT_ID: el ID del proyecto que contiene el conjunto de claves. Google Cloud
      • LOCATION: la ubicación del conjunto de claves. Usa una de las regiones admitidas.
        Mostrar ubicaciones
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: identificador definido por el usuario del conjunto de claves
      • KEY_ID: identificador definido por el usuario de la clave

      Ejecuta el siguiente comando:

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

  2. Si no has creado una instancia de AML AI en el proyecto de AML AI, la cuenta de servicio de AML AI aún no existe. Crea la cuenta de servicio.

    Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

    • PROJECT_ID: el ID del proyecto Google Cloud en el que se ejecuta AML AI

    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 siguiente:

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

  3. Asigna el rol de gestión de identidades y accesos Encargado del encriptado y desencriptado de la clave criptográfica (roles/cloudkms.cryptoKeyEncrypterDecrypter) a la cuenta de servicio de la IA de AML. Concede este permiso en la clave que has creado.

    Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

    • PROJECT_ID: el ID del proyecto Google Cloud en el que se ejecuta AML AI
    • KEY_ID: identificador definido por el usuario de la clave
    • LOCATION: la ubicación del conjunto de claves. Usa una de las regiones admitidas
      Mostrar ubicaciones
      • us-central1
      • us-east1
      • asia-south1
      • europe-west1
      • europe-west2
      • europe-west4
      • northamerica-northeast1
      • southamerica-east1
      • australia-southeast1
    • KEY_RING_ID: identificador definido por el usuario del conjunto de claves
    • PROJECT_NUMBER: el Google Cloud número de proyecto del proyecto en el que se ejecuta AML AI

    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 siguiente:

    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 gcloud kms keys add-iam-policy-binding.

Ahora puedes crear una instancia y especificar la clave que se usará para el cifrado.

Quitar el acceso

Hay varias formas de quitar el acceso a la clave de la instancia cifrada con CMEK:

Te recomendamos que revoques los permisos de la cuenta de servicio de la IA de AML antes de inhabilitar o eliminar una clave. Los cambios en los permisos se propagan en cuestión de segundos, por lo que puedes observar los efectos de inhabilitar o destruir una clave.

Si inhabilitas o destruyes la clave de cifrado de una instancia, no podrás usar ni recuperar los datos de clientes asociados a ella. No se podrá acceder a todos los datos de clientes almacenados en la instancia, incluidos los modelos, las configuraciones de los motores, los resultados de las pruebas retrospectivas y los resultados de las predicciones. Los usuarios con cualquier rol de lector de IA de AML pueden seguir viendo campos como el nombre de la instancia u otros campos de recursos devueltos al recuperar recursos de IA de AML.

Las operaciones que usen o exporten datos de clientes (por ejemplo, la exportación de metadatos) fallarán.backtestResults

Los usuarios con el rol de administrador de IA de lucha contra el blanqueo de capitales o de propietario pueden eliminar la instancia.

Políticas de organización de CMEK

La IA de AML no admite políticas de organización de CMEK. Sin embargo, la IA de AML siempre requiere el uso de CMEK, independientemente de la política de la organización.constraints/gcp.restrictNonCmekServices

Interacción con VPC-SC

Si has configurado la IA de AML dentro de un perímetro de controles de servicio de VPC, la clave de CMEK debe seguir siendo accesible para la cuenta de servicio. Si la clave no está dentro del mismo perímetro de VPC-SC, hay varias formas de conseguirlo, entre las que se incluyen las siguientes:

  • Usar una regla de salida para incluir el recurso en la lista de permitidos
  • Usar el emparejamiento de perímetros de VPC

Siguientes pasos