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

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

Descripción general

Todos los datos del cliente en una instancia de IA de AML se encriptan en reposo con una clave de CMEK. Administras la clave en Cloud Key Management Service (Cloud KMS) y controlas el acceso a ella con Identity and Access Management. Si inhabilitas de forma temporal la clave CMEK o la borras de forma permanente, no se podrá acceder a los datos encriptados con esa clave.

La IA de la AML solo admite CMEK con Cloud KMS. No es compatible con la encriptación predeterminada de Google.

La CMEK te permite controlar más aspectos del ciclo de vida y la administración de las claves, pero también genera costos adicionales para el servicio de Cloud KMS.

Cloud KMS puede ejecutarse en el mismo proyecto de Google Cloud que la IA de AML o en un proyecto distinto en el que administres claves de varios proyectos de forma centralizada.

La configuración de encriptación se establece cuando creas una instancia. Una vez que se crea una instancia, no puedes asignar una clave de Cloud KMS diferente. Puedes rotar la clave.

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

Niveles de protección

Cloud KMS te permite elegir entre una variedad de niveles de protección, incluidos los siguientes:

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

Obtén información para configurar CMEK en la IA contra el lavado de dinero. No todos los niveles de protección están disponibles en todas las regiones. Ten en cuenta que la IA de la AML no admite las claves de encriptación proporcionadas por el cliente (CSEK) ni Cloud External Key Manager.

Datos de clientes

Todos los datos del cliente que controla la IA de la AML se encriptan en reposo con la clave de CMEK especificada en el recurso de instancia superior correspondiente. Esto incluye todos los datos del cliente asociados con los recursos de IA de la AML, como conjuntos de datos, parámetros de configuración del motor, modelos y mucho más. Todo el almacenamiento temporal y persistente de los datos del cliente, incluidas las copias de entradas y salidas, los atributos de AA generados, los hiperparámetros del modelo, los pesos del modelo y los resultados de la predicción, se encripta con la clave de CMEK de la instancia correspondiente.

Consulta las condiciones específicas del servicio para conocer la definición de los datos del cliente, que pueden no incluir identificadores de recursos, atributos ni otras etiquetas de datos.

Encriptación de datos de entrada y salida

La configuración de encriptación de IA de AML en una instancia solo se usa para los recursos de IA de AML y sus datos. La IA de la AML no administra la encriptación de los datos de entrada o salida en tu proyecto de Google Cloud. Si deseas que estos datos se encripten con CMEK, debes configurar una clave de Cloud KMS que coincida con el nivel de protección de claves que elegiste en el conjunto de datos de BigQuery. También puedes volver a usar la misma clave que usa la IA de la AML.

Obtén más información sobre la encriptación en BigQuery.

Rotación de claves

Se recomienda usar el servicio de rotación de claves de manera periódica y automática como medida de seguridad. Con CMEK, tú controlas la rotación de claves. Cuando rotas una clave, los datos encriptados con versiones de claves anteriores no se vuelven a encriptar de forma automática con la nueva versión de clave.

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

Si rotas una clave, no hay forma de que la IA de AML fuerce una reencriptación ni determine si es seguro borrar versiones de claves anteriores.

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

Crea una clave y otorga permisos

En las siguientes instrucciones, se explica cómo crear una clave para una instancia y otorgar permisos para 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: El ID del proyecto de Google Cloud del proyecto que contiene el llavero
      • LOCATION: Es la ubicación del llavero de claves. Usa una de las regiones compatibles.
        Cómo mostrar ubicaciones
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • 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": "2023-03-14T15:52:55.358979323Z"
      }
      

      gcloud

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

      • KMS_PROJECT_ID: El ID del proyecto de Google Cloud del proyecto que contiene el llavero
      • LOCATION: Es la ubicación del llavero de claves. Usa una de las regiones compatibles.
        Cómo mostrar ubicaciones
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • 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 \
        --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 cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

      • KMS_PROJECT_ID: El ID del proyecto de Google Cloud del proyecto que contiene el llavero
      • LOCATION: Es la ubicación del llavero de claves. Usa una de las regiones compatibles.
        Cómo mostrar ubicaciones
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: Es el identificador definido por el usuario para el llavero.
      • 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": "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 cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

      • KMS_PROJECT_ID: El ID del proyecto de Google Cloud del proyecto que contiene el llavero
      • LOCATION: Es la ubicación del llavero de claves. Usa una de las regiones compatibles.
        Cómo mostrar ubicaciones
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: Es el identificador definido por el usuario para el llavero.
      • 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 \
        --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 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 la 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, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto de Google Cloud del proyecto en el que se ejecuta la IA de la AML.

    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 la función de IAM de encriptador/desencriptador de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) a la cuenta de servicio de IA de AML. Otorga este permiso en la clave que creaste.

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

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

    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 la clave de la instancia encriptada con CMEK:

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

Cuando inhabilitas o borras la clave de encriptación de una instancia, pierdes la posibilidad de usar o recuperar los datos del cliente asociados con la instancia. No se puede acceder a todos los datos del cliente almacenados en la instancia, incluidos los modelos, las configuraciones del motor, los resultados de la prueba retrospectiva y los resultados de la predicción. Los usuarios que tengan cualquier rol de visualizador de IA de AML aún pueden ver campos como el nombre de la instancia o los otros campos de recursos que devuelve la recuperación de recursos de IA de AML.

No se podrán realizar operaciones que usen o exporten datos del cliente, por ejemplo, exportar metadatos de backtestResults.

Los usuarios que tienen el rol de administrador de IA de AML o de propietario pueden borrar la instancia.

Políticas de la organización de CMEK

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

Interacción con VPC-SC

Si configuraste la IA de AML dentro de un perímetro de VPC-SC, la cuenta de servicio aún debe poder acceder a la clave de CMK. Si la clave no está dentro del mismo perímetro de VPC-SC, hay varias formas de lograrlo, como las siguientes:

  • Usa una regla de salida para incluir el recurso en la lista de entidades permitidas
  • Usa el intercambio de tráfico entre perímetros de VPC

Próximos pasos