Usar claves de encriptado gestionadas por el cliente (CMEK)

En esta página se describe cómo configurar una cuenta de servicio y claves para las claves de cifrado gestionadas por el cliente, así como cómo crear una instancia que use una clave de cifrado gestionada por el cliente creada manualmente. Para obtener más información sobre cómo usar claves de encriptado gestionadas por el cliente con Cloud SQL, consulta la descripción general de las claves de encriptado gestionadas por el cliente.

Antes de empezar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Install the gcloud CLI.

  5. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  6. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Install the gcloud CLI.

  10. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  11. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  12. Asegúrate de que tu cuenta de usuario tenga el rol Administrador de Cloud SQL.

    Ir a la página de gestión de identidades y accesos

  13. Enable the Cloud Key Management Service API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  14. Enable the Cloud SQL Admin API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  15. Flujo de trabajo para crear una instancia de Cloud SQL con CMEK

    1. Solo para usuarios de gcloud y de la API: crea una cuenta de servicio para cada proyecto que requiera claves de cifrado gestionadas por el cliente.
    2. Crea un conjunto de claves y una clave, y define la ubicación de cada clave. La ubicación es la región Google Cloud .
    3. Solo para usuarios de gcloud y de la API: Concede acceso a la clave a la cuenta de servicio.
    4. Anota el ID de la clave (KMS_KEY_ID), la ubicación de la clave (GCP_REGION) y el ID del conjunto de claves (KMS_KEYRING_ID).
    5. Ve a un proyecto y crea una instancia de Cloud SQL con las siguientes opciones:
      1. La misma ubicación que la clave de cifrado gestionada por el cliente
      2. La configuración de la clave gestionada por el cliente
      3. ID de la clave de cifrado gestionada por el cliente

    Tu instancia de Cloud SQL ahora tiene habilitada la función de claves de cifrado gestionadas por el cliente (CMEK).

    Crear una cuenta de servicio

    Debes crear una cuenta de servicio para cada proyecto que requiera claves de cifrado gestionadas por el cliente.

    Para permitir que un usuario gestione cuentas de servicio, concédele uno de los siguientes roles:

    • Usuario de cuenta de servicio (roles/iam.serviceAccountUser): incluye permisos para enumerar cuentas de servicio, obtener detalles sobre una cuenta de servicio y suplantar la identidad de una cuenta de servicio.
    • Administrador de cuentas de servicio (roles/iam.serviceAccountAdmin): incluye permisos para enumerar cuentas de servicio y obtener detalles sobre una cuenta de servicio. También incluye permisos para crear, actualizar y eliminar cuentas de servicio, así como para ver o cambiar la política de Cloud SQL para MySQL en una cuenta de servicio.

    Actualmente, solo puedes usar los comandos de la CLI de gcloud para crear el tipo de cuenta de servicio que necesitas para las claves de cifrado gestionadas por el cliente. Si usas la consola, Cloud SQL crea automáticamente esta cuenta de servicio.

    gcloud

    gcloud beta services identity create \
    --service=sqladmin.googleapis.com \
    --project=PROJECT_ID

    Terraform

    Para crear una cuenta de servicio, usa un recurso de Terraform.

    resource "google_project_service_identity" "gcp_sa_cloud_sql" {
      provider = google-beta
      service  = "sqladmin.googleapis.com"
    }

    Aplica los cambios

    Para aplicar la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud

    Preparar Cloud Shell

    1. Abre Cloud Shell.
    2. Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.

      Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.

    Preparar el directorio

    Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).

    1. En Cloud Shell, crea un directorio y un archivo nuevo en ese directorio. El nombre del archivo debe tener la extensión .tf. Por ejemplo, main.tf. En este tutorial, nos referiremos al archivo como main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.

      Copia el código de ejemplo en el archivo main.tf que acabas de crear.

      También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.

    3. Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
    4. Guarda los cambios.
    5. Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
      terraform init

      Si quieres usar la versión más reciente del proveedor de Google, incluye la opción -upgrade:

      terraform init -upgrade

    Aplica los cambios

    1. Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
      terraform plan

      Haga las correcciones necesarias en la configuración.

    2. Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo yes en la petición:
      terraform apply

      Espera hasta que Terraform muestre el mensaje "Apply complete!".

    3. Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.

    El comando anterior devuelve el nombre de una cuenta de servicio. Este nombre de cuenta de servicio se usa durante el procedimiento descrito en la sección Conceder acceso a la clave a la cuenta de servicio.

    Crear clave

    Puedes crear la clave en el mismo Google Cloud proyecto que la instancia de Cloud SQL o en un proyecto de usuario independiente. La ubicación del llavero de claves de Cloud KMS debe coincidir con la región en la que quieras crear la instancia de Cloud SQL. Una clave de multirregión o de región global no funcionará. La solicitud de creación de la instancia de Cloud SQL falla si las regiones no coinciden.

    Para crear una clave de Cloud KMS, sigue estos pasos:

    Consola

    1. En la Google Cloud consola, ve a la página Gestión de claves.

      Ir a Gestión de claves

    2. Haz clic en Crear conjunto de claves.
    3. Añade un nombre del conjunto de claves. Anota este nombre, ya que lo necesitarás para conceder acceso a la clave a la cuenta de servicio.
    4. Añade una ubicación del conjunto de claves.
    5. Haz clic en Crear. Se abrirá la página Crear clave.
    6. Añade un nombre de clave.
    7. En Propósito, selecciona Encriptado y desencriptado simétrico.
    8. Selecciona un Periodo de rotación y una Fecha de inicio.
    9. Haz clic en Crear.
    10. En la tabla Claves, haz clic en los tres puntos de la última columna y selecciona Copiar ID de recurso o anótalo. Es el KMS_KEY_ID. Necesitarás el valor de KMS_KEY_ID cuando concedas acceso a la clave a la cuenta de servicio.

    gcloud

    1. Crea un conjunto de claves.
      gcloud kms keyrings create KMS_KEYRING_ID \
      --location=GCP_REGION
        
      Anota este nombre, ya que lo necesitarás para conceder acceso a la clave a la cuenta de servicio.
    2. Crea una clave en el conjunto de claves.
      gcloud kms keys create KMS_KEY_ID \
      --location=GCP_REGION \
      --keyring=KMS_KEYRING_ID \
      --purpose=encryption
        
      Anota este nombre, ya que lo necesitarás para conceder acceso a la clave a la cuenta de servicio.

    Terraform

    Para crear un conjunto de claves, usa un recurso de Terraform.

    resource "google_kms_key_ring" "keyring" {
      provider = google-beta
      name     = "keyring-name"
      location = "us-central1"
    }

    Para crear una clave, usa un recurso de Terraform.

    resource "google_kms_crypto_key" "key" {
      provider = google-beta
      name     = "crypto-key-name"
      key_ring = google_kms_key_ring.keyring.id
      purpose  = "ENCRYPT_DECRYPT"
    }

    Aplica la configuración de Terraform:

    terraform apply

    Concede acceso a la clave a la cuenta de servicio

    Cuando crees la instancia de Cloud SQL con CMEK, solo tendrás que seguir este procedimiento si usas gcloud o la API. Puedes seguir este procedimiento si tienes problemas con los permisos después de crear la instancia.

    Para conceder acceso a la cuenta de servicio, sigue estos pasos:

    Consola

    1. En la Google Cloud consola, ve a la página Gestión de claves.

      Ir a Gestión de claves

    2. Para seleccionar el proyecto que aloja la clave, usa el selector de proyectos.
    3. Haz clic en el nombre del conjunto de claves.
    4. Haz clic en el nombre de la clave.
    5. Haz clic en la pestaña Permisos.
    6. Para abrir el panel, haz clic en Dar acceso.
    7. Introduce la cuenta de servicio como principal y selecciona el rol "Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS".
    8. Haz clic en Guardar.

    También puedes concederlo en la página de gestión de identidades y accesos del proyecto.

    IR A LA PÁGINA DE GESTIÓN DE IDENTIDADES Y ACCESOS DEL PROYECTO

    gcloud

    gcloud kms keys add-iam-policy-binding KMS_KEY_ID \
    --location=GCP_REGION \
    --keyring=KMS_KEYRING_ID \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloud-sql.iam.gserviceaccount.com \
    --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

    Terraform

    Para conceder acceso a la clave, usa un recurso de Terraform.

    resource "google_kms_crypto_key_iam_binding" "crypto_key" {
      provider      = google-beta
      crypto_key_id = google_kms_crypto_key.key.id
      role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
    
      members = [
        "serviceAccount:${google_project_service_identity.gcp_sa_cloud_sql.email}",
      ]
    }

    Aplica la configuración de Terraform:

    terraform apply

    Crear una instancia de Cloud SQL con CMEK

    Para crear una instancia con claves de cifrado gestionadas por el cliente, sigue estos pasos:

    Consola

    1. En la Google Cloud consola, ve a la página Instancias de Cloud SQL.

      Ir a Instancias de Cloud SQL

    2. Haz clic en Crear instancia.
    3. Elige el motor de la base de datos.
    4. Escribe un nombre para la instancia. No incluyas información sensible ni de identificación personal en el nombre de tu instancia, ya que es visible externamente. No es preciso incluir el ID del proyecto en el nombre de la instancia. Se crea automáticamente cuando es necesario (por ejemplo, en los archivos de registro).
    5. Introduce la contraseña del usuario 'root'@'%'.
    6. Define la región de tu instancia. Ubica tu instancia en la misma región que los recursos que acceden a ella. En la mayoría de los casos, no es necesario especificar una zona.
    7. En la sección Opciones de configuración, selecciona todas las opciones de configuración hasta llegar a Tipo de máquina y almacenamiento.
    8. Despliega Tipo de máquina y almacenamiento.
    9. En la sección Cifrado, selecciona Clave gestionada por el cliente.
    10. Seleccione la clave de KMS en el menú desplegable o introduzca manualmente el valor de KMS_KEY_ID. Solo se muestran las claves de KMS del mismo proyecto y región que la instancia. Se usa la versión de clave principal de la clave, por lo que, si se proporciona una versión de clave en el nombre de la clave, se recorta. Para elegir una clave de KMS que pertenezca a otro proyecto, pero que esté en la misma región, selecciona ¿No ves tu clave? Introduce el ID de recurso de la clave y el valor de KMS_KEY_ID que has obtenido antes.
    11. Si la cuenta de servicio no tiene permiso para encriptar o desencriptar con la clave seleccionada, se mostrará un mensaje. Si esto ocurre, haz clic en Conceder para conceder a la cuenta de servicio el rol de IAM roles/cloudkms.cryptoKeyEncrypterDecrypter> en la clave de KMS seleccionada.
    12. Una vez que haya seleccionado las opciones de configuración, haga clic en Crear.
    13. Verás un mensaje que explica las implicaciones de usar una clave de cifrado gestionada por el cliente. Léalo y acéptelo para continuar con la creación de la instancia.

    gcloud

    gcloud sql instances create INSTANCE_NAME \
    --project=PROJECT_ID \
    --disk-encryption-key=KMS_KEY_ID \
    --database-version=VERSION \
    --tier=MACHINE_TYPE \
    --region=REGION \
    --root-password=INSERT-PASSWORD-HERE

    Terraform

    Para crear una instancia con CMEK, usa un recurso de Terraform.

    resource "google_sql_database_instance" "mysql_instance_with_cmek" {
      name                = "mysql-instance-cmek"
      provider            = google-beta
      region              = "us-central1"
      database_version    = "MYSQL_8_0"
      encryption_key_name = google_kms_crypto_key.key.id
      settings {
        tier = "db-n1-standard-2"
      }
      # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
      # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
      deletion_protection = false
    }

    Eliminar los cambios

    Para eliminar los cambios, sigue estos pasos:

    1. Para inhabilitar la protección contra la eliminación, en el archivo de configuración de Terraform, asigna el valor false al argumento deletion_protection.
      deletion_protection =  "false"
    2. Aplica la configuración de Terraform actualizada ejecutando el siguiente comando e introduciendo yes en la petición:
      terraform apply
    1. Para quitar los recursos que se hayan aplicado anteriormente con tu configuración de Terraform, ejecuta el siguiente comando e introduce yes en la petición:

      terraform destroy

    REST v1

    Para crear una instancia con claves de cifrado gestionadas por el cliente, pasa diskEncryptionConfiguration al comando.

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

    • project-id: el ID del proyecto
    • instance-id: el ID de instancia.
    • region: la región
    • database-version: cadena de versión de enum (por ejemplo, MYSQL_8_0)
    • kms-resource-id: el ID que has recibido al crear una clave.

    Método HTTP y URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

    Cuerpo JSON de la solicitud:

    {
      "name":"instance-id",
      "region":"region",
      "databaseVersion": "database-version",
      "diskEncryptionConfiguration" :
      {
          "kmsKeyName" : "kms-resource-id"
      },
      "settings":
      {
         "backupConfiguration":
          {
             "binaryLogEnabled": true,
             "enabled":true
          }
       }
    }
    

    Para enviar tu solicitud, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-16T02:32:12.281Z",
      "operationType": "UPDATE",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    
    En este ejemplo se usa instances:insert.

    REST v1beta4

    Para crear una instancia con claves de cifrado gestionadas por el cliente, pasa diskEncryptionConfiguration al comando.

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

    • project-id: el ID del proyecto
    • instance-id: el ID de instancia.
    • region: la región
    • database-version: cadena de versión de enum (por ejemplo, MYSQL_8_0)
    • kms-resource-id: el ID que has recibido al crear una clave.

    Método HTTP y URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances

    Cuerpo JSON de la solicitud:

    {
      "name":"instance-id",
      "region":"region",
      "databaseVersion": "database-version",
      "diskEncryptionConfiguration" :
      {
          "kmsKeyName" : "kms-resource-id"
      },
      "settings":
      {
         "backupConfiguration":
          {
             "binaryLogEnabled": true,
             "enabled":true
          }
       }
    }
    

    Para enviar tu solicitud, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-16T02:32:12.281Z",
      "operationType": "UPDATE",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    
    En este ejemplo se usa instances:insert.

    Crear una copia de seguridad de una instancia habilitada para CMEK

    Cuando creas una copia de seguridad de una instancia de Cloud SQL, esta se cifra con la misma versión de clave principal que la clave gestionada por el cliente de la instancia principal. Si tu instancia usa una CMEK creada por Autokey de Cloud KMS, la copia de seguridad seguirá usando la misma clave que la instancia principal. Autokey no crea claves para las copias de seguridad.

    Consulta el artículo sobre cómo crear y gestionar copias de seguridad automáticas y bajo demanda.

    En el formulario Crear una copia de seguridad, verás el siguiente mensaje: "Tu copia de seguridad se cifrará con la versión principal de la clave de cifrado gestionada por el cliente de esta instancia. Si se inhabilita o destruye esta versión de la clave, se perderán de forma permanente todos los datos encriptados con ella en copias de seguridad. Puedes consultar la versión principal de la clave en Cloud KMS".

    En la página de copias de seguridad, la lista de copias de seguridad habilitadas con claves de encriptado gestionadas por el cliente tiene dos columnas adicionales. Una columna que muestra si la copia de seguridad es de una instancia habilitada para CMEK y otra que muestra la versión de la clave usada para cifrar la copia de seguridad.

    Crear una réplica de una instancia habilitada para CMEK

    Cuando creas una réplica de lectura de una instancia de Cloud SQL en la misma región, hereda la misma clave de cifrado gestionada por el cliente que la instancia principal. Si creas una réplica de lectura en otra región, se te proporcionará una nueva lista de claves de cifrado gestionadas por el cliente para que elijas la que quieras. Cada región usa su propio conjunto de claves.

    Consulta Crear réplicas de lectura.

    En la página Crear réplica de lectura, se muestra la siguiente información:

    1. En Cifrado se muestra gestionado por el cliente.
    2. Se muestra la clave de cifrado de la réplica.
    3. Aparece un mensaje que dice "Tu réplica se encriptará con la clave gestionada por el cliente de la instancia principal. Si alguien elimina esta clave, se perderán de forma permanente todos los datos encriptados con ella".

    En el caso de una réplica entre regiones, verás el siguiente mensaje:

    "La réplica interregional se encriptará con la clave gestionada por el cliente que se haya seleccionado. Si alguien elimina esta clave, se perderán de forma permanente todos los datos encriptados con ella."

    Crear un clon de una instancia habilitada para CMEK

    Cuando creas un clon de una instancia de Cloud SQL, hereda la misma clave de encriptado gestionada por el cliente que se usó para encriptar la instancia de origen.

    Consulta Clonar instancias.

    En la página Crear clon, verás la siguiente información:

    1. En Cifrado se muestra gestionado por el cliente.
    2. Se muestra la clave de cifrado del clon.
    3. Aparece un mensaje que dice "Tu clon se encriptará con la clave gestionada por el cliente de la instancia de origen. Si alguien elimina esta clave, se perderán de forma permanente todos los datos encriptados con ella".

    Ver información de la clave de una instancia habilitada para CMEK

    Una vez que hayas creado correctamente una instancia de Cloud SQL, puedes consultar la lista de instancias o la página de resumen de la instancia para ver que se ha creado con una clave de cifrado gestionada por el cliente. En los detalles también se muestra la clave que se usó para crear la instancia.

    1. En la Google Cloud consola, ve a la página Instancias de Cloud SQL.

      Ir a Instancias de Cloud SQL

    2. En la lista Instancias, desplázate hacia la derecha hasta que veas la columna Cifrado. En esta columna, se muestran los valores Gestionado por Google y Gestionado por el cliente.
    3. Haga clic en el nombre de una instancia para abrir su página Vista general. La clave de cifrado gestionada por el cliente se muestra en el panel Configuración.

    Volver a cifrar una instancia o una réplica que ya tenga habilitadas las CMEK

    Puedes volver a cifrar tus instancias y réplicas de Cloud SQL con la versión más reciente de la clave principal. Para obtener más información sobre cómo volver a cifrar una instancia o una réplica que ya tenga habilitada la CMEK, consulta Información sobre las claves.

    Obtener la nueva versión de la clave principal

    • Para volver a cifrar tu instancia o réplica con una nueva versión, necesitarás la nueva versión de la clave principal. Si necesitas una nueva versión de la clave para tus instancias, tendrás que rotarla con Cloud Key Management Service. Para rotar tu llave principal, consulta Rotar una llave.

    • Una vez que se haya completado la rotación de claves, espera a que se propague el cambio de clave principal antes de volver a cifrar tus instancias. Si el cambio de versión de la clave no es coherente, tu instancia seguirá usando la versión antigua de la clave después del recifrado. Para obtener más información, consulta Coherencia de las versiones de clave.

    Volver a cifrar una instancia con CMEK

    Una vez completada la rotación de claves, vuelve a cifrar tu instancia o réplica con CMEK.

    Consola

    1. En la Google Cloud consola, ve a la página Instancias de Cloud SQL.

      Ir a Instancias de Cloud SQL

    2. Para abrir la página Overview (Resumen) de una instancia, haz clic en su nombre.
    3. En la sección Configuración, haga clic en Volver a cifrar instancia.
    4. En el cuadro de diálogo que aparece, confirma tu selección haciendo clic en Volver a cifrar.

    gcloud

    Para volver a cifrar la instancia o la réplica, ejecuta el siguiente comando:

    gcloud sql instances reencrypt INSTANCE_NAME
    Sustituye INSTANCE_NAME por el nombre de la instancia o la réplica que vas a volver a cifrar.

    REST v1

    Para volver a cifrar tu instancia o réplica con la nueva clave, ejecuta el siguiente comando:

        POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

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

    • PROJECT_ID: el ID del proyecto
    • INSTANCE_ID: el ID de instancia.

    Método HTTP y URL:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

    Para enviar tu solicitud, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2023-06-28T21:19:09.503Z",
      "operationType": "REENCRYPT",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    

    REST v1beta4

    Para volver a cifrar tu instancia o réplica con la nueva clave, ejecuta el siguiente comando:
        POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

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

    • PROJECT_ID: el ID del proyecto
    • INSTANCE_ID: el ID de instancia.

    Método HTTP y URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

    Para enviar tu solicitud, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2023-06-28T21:22:13.663Z",
      "operationType": "REENCRYPT",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    

    Copias de seguridad con recifrado automático

    Cuando vuelves a cifrar una instancia principal con una nueva versión de clave principal, Cloud SQL crea automáticamente una copia de seguridad bajo demanda llamada copia de seguridad de recifrado.

    En la lista de copias de seguridad de tu instancia de Cloud SQL, la copia de seguridad con nuevo cifrado se muestra con el tipo on-demand y la etiqueta backup created automatically for data before CMEK re-encryption.

    Al igual que ocurre con otras copias de seguridad bajo demanda, las copias de seguridad con recifrado se conservan hasta que las elimines o elimines la instancia.

    Limitaciones del recifrado

    Cuando vuelvas a cifrar una instancia, ten en cuenta las siguientes limitaciones:

    • No puedes realizar ninguna otra operación de administrador en la instancia mientras se lleva a cabo la operación de recifrado.
    • La operación de recifrado provoca un tiempo de inactividad que depende del tamaño de la instancia o de la réplica.
    • Las réplicas de una instancia no se vuelven a cifrar cuando se cifra una instancia. Debes volver a cifrar cada réplica por separado.
    • Las copias de seguridad no se vuelven a cifrar automáticamente con la nueva versión de la clave cuando vuelves a cifrar tu instancia. Para restaurar la copia de seguridad o la recuperación a un momento dado posterior a la creación de la copia de seguridad, debes conservar la versión de la clave de Cloud KMS con la que se cifró la copia de seguridad.
    • Las copias de seguridad creadas después de que se rote la clave de Cloud KMS con la que se cifra la instancia usarán automáticamente la versión de clave principal de esa clave, aunque la instancia no esté cifrada con esa versión de clave.

    Para solucionar problemas, consulta la tabla de solución de problemas de recifrado.

    Usar Cloud External Key Manager (Cloud EKM)

    Para proteger los datos de las instancias de Cloud SQL, puedes usar las claves que gestionas en un partner de gestión de claves externo admitido. Para obtener más información, consulta Cloud External Key Manager, incluida la sección Consideraciones.

    Cuando quieras crear una clave de Cloud EKM, consulta Gestión de claves de Cloud EKM. Una vez creada la clave, proporciona su nombre al crear una instancia de Cloud SQL.

    Puedes usar Justificaciones de Acceso a Claves (KAJ) como parte de Cloud EKM. KAJ te permite ver el motivo de cada solicitud de Cloud EKM. Además, en función de la justificación proporcionada, puedes aprobar o rechazar una solicitud automáticamente. Para obtener más información, consulta la introducción.

    Por lo tanto, KAJ proporciona un control adicional sobre tus datos, ya que ofrece una justificación para cada intento de descifrar los datos.

    Google no tiene control sobre la disponibilidad de las claves en el sistema de un partner de gestión de claves externo.

    Inhabilitar y volver a habilitar versiones de clave

    Consulta los siguientes temas:

    Solucionar problemas

    En esta sección se describen algunas acciones que puedes probar si recibes un mensaje de error al configurar o usar instancias habilitadas para CMEK.

    Las operaciones de administrador de Cloud SQL, como crear, clonar o actualizar, pueden fallar debido a errores de Cloud KMS y a la falta de roles o permisos. Entre los motivos habituales por los que se produce un error se incluyen los siguientes: falta una versión de la clave de Cloud KMS, la versión de la clave de Cloud KMS está inhabilitada o destruida, no se tienen permisos de IAM suficientes para acceder a la versión de la clave de Cloud KMS o la versión de la clave de Cloud KMS está en una región diferente a la de la instancia de Cloud SQL. Usa la siguiente tabla para diagnosticar y resolver problemas habituales.

    Tabla de solución de problemas de claves de cifrado gestionadas por el cliente

    Para este error... El problema puede deberse a lo siguiente: Prueba esto...
    No se ha encontrado la cuenta de servicio por producto y por proyecto El nombre de la cuenta de servicio no es correcto. Asegúrate de haber creado una cuenta de servicio para el proyecto de usuario correcto.

    IR A LA PÁGINA CUENTAS DE SERVICIO

    No se puede conceder acceso a la cuenta de servicio La cuenta de usuario no tiene permiso para conceder acceso a esta versión de la clave. Añade el rol Administrador de la organización a tu cuenta de usuario o de servicio.

    IR A LA PÁGINA CUENTAS DE IAM

    La versión de la clave de Cloud KMS se ha destruido La versión de la clave se elimina. Si se destruye la versión de la clave, no podrás usarla para encriptar ni desencriptar datos.
    La versión de la clave de Cloud KMS está inhabilitada La versión de la clave está inhabilitada. Vuelve a habilitar la versión de la clave de Cloud KMS.

    IR A LA PÁGINA DE CLAVES CRIPTOGRÁFICAS

    Permiso insuficiente para usar la clave de Cloud KMS Falta el rol cloudkms.cryptoKeyEncrypterDecrypter en la cuenta de usuario o de servicio que estás usando para ejecutar operaciones en instancias de Cloud SQL, o bien no existe la versión de la clave de Cloud KMS. En el Google Cloud proyecto que aloja la clave, añade el rol cloudkms.cryptoKeyEncrypterDecrypter a tu usuario o cuenta de servicio.

    IR A LA PÁGINA CUENTAS DE IAM


    Si el rol ya se ha asignado a tu cuenta, consulta Crear una clave para saber cómo crear una nueva versión de la clave. Consulta la nota.
    No se ha encontrado la clave de Cloud KMS La versión de la clave no existe. Crea una versión de clave. Consulta Crear una clave. Consulta la nota.
    La instancia de Cloud SQL y la versión de la clave de Cloud KMS están en regiones diferentes La versión de la clave de Cloud KMS y la instancia de Cloud SQL deben estar en la misma región. No funciona si la versión de la clave de Cloud KMS está en una región global o multirregional. Crea una versión de la clave en la misma región en la que quieras crear instancias. Consulta Crear una clave. Consulta la nota.
    Se ha restaurado la versión de la clave de Cloud KMS, pero la instancia sigue suspendida La versión de la clave está inhabilitada o no concede los permisos adecuados. Vuelve a habilitar la versión de la clave y asigna el rol cloudkms.cryptoKeyEncrypterDecrypter a tu usuario o cuenta de servicio en el Google Cloud proyecto que aloja la clave.

    Tabla de solución de problemas de recifrado

    Para este error... El problema puede deberse a lo siguiente: Prueba esto...
    No se ha podido volver a cifrar el recurso CMEK porque no se puede acceder a la clave de Cloud KMS. Asegúrate de que la versión de la clave principal esté habilitada y de que el permiso se haya concedido correctamente. La versión de la clave está inhabilitada o no concede los permisos adecuados.

    Vuelve a habilitar la versión de la clave de Cloud KMS:

    IR A LA PÁGINA CLAVES CRIPTOGRÁFICAS

    En el Google Cloud proyecto que aloja la clave, confirma que el rol cloudkms.cryptoKeyEncrypterDecrypter se ha concedido a tu usuario o cuenta de servicio:

    IR A LA PÁGINA CUENTAS DE IAM

    No se ha podido volver a cifrar el recurso de CMEK debido a un error interno del servidor. Vuelve a intentarlo más tarde. Se ha producido un error interno del servidor. Vuelve a intentar el recifrado. Para obtener más información, consulta Volver a cifrar una instancia o una réplica con CMEK.

    Siguientes pasos