Usar claves de encriptación administradas por el cliente (CMEK)

En esta página, se describe cómo configurar una cuenta de servicio y claves para las claves de encriptación administradas por el cliente, y también cómo crear una instancia que use esta clave. Para obtener más información sobre cómo usarlas con Cloud SQL, consulta la descripción general de las claves de encriptación administradas por el cliente.

Antes de comenzar

  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.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. Asegúrate de tener la función de administrador de Cloud SQL en tu cuenta de usuario.

    Ir a la página IAM

  11. Enable the Cloud Key Management Service API.

    Enable the API

  12. Enable the Cloud SQL Admin API.

    Enable the API

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

  1. Solo para usuarios de gcloud y API: crea una cuenta de servicio para cada proyecto que requiera claves de encriptación administradas por el cliente.
  2. Crea un llavero de claves y una clave, y establece la ubicación de cada clave. La ubicación es la región de Google Cloud.
  3. Solo para usuarios de gcloud y API: otorga acceso a la clave a la cuenta de servicio.
  4. Toma nota del ID de la clave (KMS_KEY_ID), la ubicación de la clave (GCP_REGION) y el ID del llavero 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 encriptación administrada por el cliente
    2. La configuración de la clave administrada por el cliente
    3. El ID de la clave de encriptación administrada por el cliente

Ahora tu instancia de Cloud SQL está habilitada con CMEK.

Cree una cuenta de servicio

Debes crear una cuenta de servicio para cada proyecto que requiera claves de encriptación administradas por el cliente.

Para permitir que un usuario administre cuentas de servicio, otorga una de las siguientes funciones:

  • Usuario de cuenta de servicio (roles/iam.serviceAccountUser): Incluye permisos para enumerar cuentas de servicio, obtener detalles sobre ellas, o bien actuar en nombre de una.
  • Administrador de cuenta de servicio (roles/iam.serviceAccountAdmin): Incluye permisos para enumerar cuentas de servicio y obtener detalles sobre ellas. También incluye permisos de creación, actualización y eliminación de cuentas de servicio, y permisos para ver o cambiar la política de Cloud SQL para MySQL en una cuenta de servicio.

Por el momento, solo puedes usar los comandos de la CLI de gcloud a fin de crear el tipo de cuenta de servicio que necesitas para las claves de encriptación administradas por el cliente. Si usas Console, Cloud SQL crea de forma automática 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 tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.

Prepara Cloud Shell

  1. Inicia Cloud Shell
  2. Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.

    Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

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

Prepara 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 dentro de ese directorio. El nombre del archivo debe tener la extensión .tf, por ejemplo, main.tf. En este instructivo, el archivo se denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.

    Copia el código de muestra en el main.tf recién creado.

    De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. Inicializa Terraform. Solo debes hacerlo una vez por directorio.
    terraform init

    De manera opcional, incluye la opción -upgrade para usar la última versión del proveedor de Google:

    terraform init -upgrade

Aplica los cambios

  1. Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
    terraform plan

    Corrige la configuración según sea necesario.

  2. Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe yes cuando se te solicite:
    terraform apply

    Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.

  3. Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.

En el comando anterior, se muestra un nombre de cuenta de servicio. Debes usar este nombre de cuenta de servicio durante el procedimiento que se muestra en la página sobre cómo otorgar acceso a la clave a la cuenta de servicio.

Crear una clave

Puedes crear la clave en el mismo proyecto de Google Cloud en el que está la instancia de Cloud SQL o en otro proyecto de usuario. La ubicación del llavero de claves de Cloud KMS debe coincidir con la región en la que deseas crear la instancia de Cloud SQL. Una clave multirregional o de región global no funcionará. La solicitud para crear instancias de Cloud SQL falla si las regiones no coinciden.

Para crear una clave de Cloud KMS:

Console

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

    Ir a Administración de claves

  2. Haz clic en Crear llavero de claves.
  3. Agrega el Nombre del llavero de claves. Anota este nombre porque lo necesitarás al momento de otorgar a la cuenta de servicio acceso a la clave.
  4. Agrega la Ubicación del llavero de claves.
  5. Haz clic en Crear. Se abre la página Crear clave.
  6. Agrega el Nombre de la clave.
  7. Selecciona un Propósito (simétrico o asimétrico).
  8. Selecciona un Período de rotación y una Fecha de inicio.
  9. Haz clic en Crear.
  10. En la tabla Claves, en la última columna, haz clic en los tres puntos y selecciona Copiar ID del recurso o escribe el ID. Este es el KMS_KEY_ID. Necesitarás el KMS_KEY_ID al momento de otorgar acceso a la clave a la cuenta de servicio.

gcloud

  1. Crea un llavero de claves nuevo.
    gcloud kms keyrings create KMS_KEYRING_ID \
    --location=GCP_REGION
      
    Escribe este nombre, ya que lo necesitarás al momento de otorgar acceso a la clave a la cuenta de servicio.
  2. Crea una llave en el llavero de claves.
    gcloud kms keys create KMS_KEY_ID \
    --location=GCP_REGION \
    --keyring=KMS_KEYRING_ID \
    --purpose=encryption
      
    Escribe este nombre, ya que lo necesitarás al momento de otorgar acceso a la clave a la cuenta de servicio.

Terraform

Para crear un llavero 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

Otorga a la cuenta de servicio acceso a la clave.

Cuando creas la instancia de Cloud SQL con CMEK, solo debes realizar este procedimiento si usas gcloud o la API. Puedes realizar este procedimiento si tienes problemas de permisos después de crear la instancia.

Para otorgar acceso a la cuenta de servicio, haz lo siguiente:

Console

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

    Ir a Administración de claves

  2. Para seleccionar el proyecto que aloja la clave, usa el selector de proyectos.
  3. Haz clic en el nombre del llavero 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 Otorgar acceso.
  7. Ingresa la cuenta de servicio como principal y selecciona “Encriptador/desencriptador de CryptoKey de Cloud KMS” como rol.
  8. Haz clic en Guardar.

Como alternativa, también puedes otorgarlo en la página de IAM del proyecto.

IR A LA PÁGINA DE IAM 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 otorgar 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

Crea una instancia de Cloud SQL con CMEK

Para crear una instancia con claves de encriptación administradas por el cliente:

Console

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

    Ir a Instancias de Cloud SQL

  2. Haga clic en Crear instancia.
  3. Elige el motor de base de datos.
  4. Ingresa un nombre para la instancia. No incluyas información sensible ni información de identificación personal en el nombre de la instancia, ya que es visible a nivel externo. No debes incluir el ID del proyecto en el nombre de la instancia. Este se creará de forma automática cuando corresponda (por ejemplo, en los archivos de registro).
  5. Ingresa la contraseña para el usuario 'root'@'%'.
  6. Configura la región de tu instancia. Ubica la instancia en la misma región en la que están los recursos que acceden a ella. En la mayoría de los casos, no necesitas 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. Expande Tipo de máquina y almacenamiento.
  9. En la sección Encryption (Encriptación), selecciona Customer-managed key (Clave administrada por el cliente).
  10. Selecciona la clave de KMS en el menú desplegable o ingresa el KMS_KEY_ID de forma manual. Solo se muestran las claves de KMS que están en el mismo proyecto y región que la instancia. Se usa la versión de clave primaria, 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 puedes ver tu clave? Ingresa el ID de recurso de la clave e ingresa el KMS_KEY_ID que registraste antes.
  11. Si la cuenta de servicio no tiene permiso para encriptar o desencriptar con la clave seleccionada, aparecerá un mensaje. Si esto sucede, haz clic en Otorgar para otorgar a la cuenta de servicio el rol roles/cloudkms.cryptoKeyEncrypterDecrypter> de IAM en la clave de KMS seleccionada.
  12. Una vez que hayas seleccionado las opciones de configuración, haz clic en Crear.
  13. Verás un mensaje en el que se explican las implicaciones del uso de la clave de encriptación administrada por el cliente. Léelo y confírmalo 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
}

Borra los cambios

Para borrar tus cambios, haz lo siguiente:

  1. Para inhabilitar la protección contra la eliminación, en tu archivo de configuración de Terraform, establece el argumento deletion_protection en false.
    deletion_protection =  "false"
  2. Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa yes cuando se te solicite:
    terraform apply
  1. Quita los recursos que se aplicaron antes con tu configuración de Terraform a través de la ejecución del siguiente comando y, luego, ingresa yes cuando se te solicite:

    terraform destroy

REST v1

Para crear una instancia con claves de encriptación administradas por el cliente, pasa diskEncryptionConfiguration al comando.

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

  • project-id: el ID del proyecto
  • instance-id: El ID de la instancia
  • region: La región
  • database-version: La string de la versión de Emum (por ejemplo, MYSQL_8_0)
  • kms-resource-id: El ID que recibiste a partir de la creación de 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, expande una de estas opciones:

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

{
  "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 encriptación administradas por el cliente, pasa diskEncryptionConfiguration al comando.

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

  • project-id: el ID del proyecto
  • instance-id: El ID de la instancia
  • region: La región
  • database-version: La string de la versión de Emum (por ejemplo, MYSQL_8_0)
  • kms-resource-id: El ID que recibiste a partir de la creación de 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, expande una de estas opciones:

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

{
  "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.

Crea una copia de seguridad de una instancia habilitada con CMEK

Cuando creas una copia de seguridad de una instancia de Cloud SQL, la copia de seguridad se encripta con la misma versión de clave principal que la de la clave administrada por el cliente de la instancia principal.

Consulta la página Crea y administra 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 encriptará con la versión principal de la clave de encriptación administrada por el cliente de esta instancia. Si alguien destruye o inhabilita esta versión de la clave, todos los datos de la copia de seguridad encriptados mediante ella se perderán de forma permanente. Puedes verificar 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 encriptación administradas por el cliente tiene dos columnas adicionales. En una columna, se muestra que la copia de seguridad es para una instancia con CMEK habilitadas y, en la otra, se muestra la versión de clave que se usa con el fin de encriptar la copia de seguridad.

Crea una réplica de una instancia habilitada con CMEK

Cuando creas una réplica de lectura de una instancia de Cloud SQL en la misma región, esta hereda la clave de encriptación administrada por el cliente de la instancia principal. Si creas una réplica de lectura en una región diferente, se te brinda una lista nueva de claves de encriptación administradas por el cliente para seleccionar una. Cada región usa su propio conjunto de claves.

Consulta Crea réplicas de lectura.

En la página Crea réplicas de lectura, verás la siguiente información:

  1. En Encriptación, se muestra Administrada por el cliente.
  2. Se muestra la clave de encriptación de la réplica.
  3. Se muestra el mensaje “Tu réplica se encriptará con la clave administrada por el cliente de la instancia principal. Si alguien destruye esta clave, todos los datos encriptados con ella se perderán de forma permanente”.

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

“La réplica entre regiones se encriptará con la clave administrada por el cliente seleccionada. Si alguien destruye esta clave, todos los datos encriptados con ella se perderán de forma permanente”.

Crea un clon de una instancia habilitada con CMEK

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

Consulta Clona instancias.

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

  1. En Encriptación, se muestra Administrada por el cliente.
  2. Se muestra la clave de encriptación del clon.
  3. Aparece un mensaje que dice “Tu clon se encriptará con la clave administrada por el cliente de la instancia de origen. Si alguien destruye esta clave, todos los datos encriptados con ella se perderán de forma permanente”.

Visualiza la información de claves de una instancia con CMEK habilitadas

Una vez que creas una instancia de Cloud SQL de manera correcta, puedes ver la lista de instancias o la página de descripción general de la instancia para comprobar que se creó mediante una clave de encriptación administrada por el cliente. En los detalles, también se muestra la clave que se usó para crear la instancia.

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

    Ir a Instancias de Cloud SQL

  2. En la lista de instancias, desplázate hacia la derecha hasta que veas la columna Encriptación. En esta columna, verás las opciones Administrada por Google y Administrada por el cliente.
  3. Haz clic en el nombre de una instancia para abrir la página Descripción general. La clave de encriptación administrada por el cliente aparece en el panel Configuración.

Vuelve a encriptar una réplica o una instancia existente habilitada para CMEK

Puedes volver a encriptar tus instancias y réplicas de Cloud SQL existentes con la última versión de clave primaria. Si deseas obtener más información sobre cómo volver a encriptar tu instancia o réplica habilitada con CMEK existente, consulta Acerca de las claves.

Obtén la versión de clave primaria nueva

  • Para volver a encriptar tu instancia o réplica con una versión nueva, necesitarás la versión de clave primaria nueva. Si necesitas una versión de clave nueva para tus instancias, deberás rotar tu clave con Cloud Key Management Service. Para rotar tu clave primaria, consulta Rota una clave.

  • Una vez que se complete la rotación de claves, espera a que el cambio de clave primaria se propague antes de volver a encriptar tus instancias. Si el cambio de versión de clave no es coherente, la instancia continuará usando la versión de clave anterior después de que se haya vuelto a encriptar. Para obtener más información, consulta Coherencia de las versiones de clave.

Vuelve a encriptar tu instancia con CMEK habilitadas

Una vez que se complete la rotación de claves, vuelve a encriptar tu instancia o réplica habilitada para CMEK existente.

Console

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

    Ir a Instancias de Cloud SQL

  2. Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
  3. En la sección Configuración, haz clic en Volver a encriptar la instancia.
  4. En el cuadro de diálogo que aparece, haz clic en Volver a encriptar para confirmar tu selección.

gcloud

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

gcloud sql instances reencrypt INSTANCE_NAME
Reemplaza INSTANCE_NAME por el nombre de la instancia o réplica que vuelves a encriptar.

REST v1

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

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

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

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

Método HTTP y URL:

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

Para enviar tu solicitud, expande una de estas opciones:

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

{
  "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 encriptar tu instancia o réplica con tu clave nueva, ejecuta el siguiente comando:
    POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

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

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

Método HTTP y URL:

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

Para enviar tu solicitud, expande una de estas opciones:

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

{
  "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 automáticas de reencriptación

Cuando vuelves a encriptar una instancia principal con una versión de clave primaria nueva, Cloud SQL crea de forma automática una copia de seguridad a pedido llamada copia de seguridad de reencriptación.

En la lista de copias de seguridad de la instancia de Cloud SQL, la copia de seguridad de reencriptación se muestra como tipo on-demand y se etiqueta con backup created automatically for data before CMEK re-encryption.

Al igual que con otras copias de seguridad bajo demanda, las copias de seguridad de reencriptación persisten hasta que las borres o borres la instancia.

Limitaciones de la encriptación nueva

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

  • No puedes realizar ninguna otra operación de administrador en la instancia mientras la operación de reencriptación está en curso.
  • La operación de reencriptación activa un tiempo de inactividad que depende del tamaño de la instancia o réplica.
  • Las réplicas de una instancia no se vuelven a encriptar cuando una instancia está encriptada. Debes volver a encriptar cada réplica por separado.
  • Las copias de seguridad no se vuelven a encriptar de forma automática con la versión de clave nueva cuando vuelves a encriptar tu instancia. Para restablecer la copia de seguridad o la recuperación de un momento determinado a una hora posterior a la realizada la copia de seguridad, deberás mantener la versión de clave de Cloud KMS con la que se encripta la copia de seguridad.

Para solucionar problemas, consulta la Tabla de solución de problemas de reencriptación.

Usa Cloud External Key Manager (Cloud EKM)

Para proteger los datos en instancias de Cloud SQL, puedes usar las claves que administras dentro de un socio de administración de claves externo compatible. Para obtener más información, consulta Cloud External Key Manager, incluida la sección Consideraciones.

Cuando estés listo para crear una clave de Cloud EKM, consulta Administra claves de Cloud EKM. Después de crear una clave, proporciona el nombre de la clave cuando crees una instancia de Cloud SQL.

Puedes usar Key Access Justifications (KAJ) como parte de Cloud EKM. KAJ te permite ver el motivo de cada solicitud de Cloud EKM. Además, según la justificación proporcionada, puedes aprobar o rechazar una solicitud de forma automática. Para obtener más información, consulta la Descripción general.

Por lo tanto, KAJ proporciona control adicional sobre tus datos mediante una justificación para cada intento de desencriptar los datos.

Google carece de control sobre la disponibilidad de las claves en un sistema externo de administración de claves.

Inhabilita y vuelve a habilitar versiones de claves

Consulta los siguientes temas:

Solucionar problemas

En esta sección se describen los procedimientos que debes intentar cuando recibes un mensaje de error durante la configuración o el uso de instancias habilitadas con CMEK.

Las operaciones del administrador de Cloud SQL, como la creación, clonación o actualización, pueden fallar por errores de Cloud KMS y funciones o permisos faltantes. Entre los motivos más comunes de las fallas se incluyen una versión de clave de Cloud KMS faltante, una versión de clave de Cloud KMS inhabilitada o destruida, permisos de IAM insuficientes para acceder a la versión de clave de Cloud KMS o la ubicación de la versión de clave de Cloud KMS en una región diferente a la de la instancia de Cloud SQL. Usa la siguiente tabla de solución de problemas para diagnosticar y resolver problemas comunes.

Tabla de solución de problemas de claves de encriptación administradas por el cliente

Para este error… El problema podría ser… Solución
No se encontró la cuenta de servicio por proyecto ni por producto. El nombre de la cuenta de servicio es incorrecto. 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 otorgar acceso a la cuenta de servicio. La cuenta de usuario no tiene permiso para otorgar acceso a esta versión de clave. Agrega el rol Administrador de la organización a tu usuario o cuenta de servicio.

IR A LA PÁGINA CUENTAS DE IAM

Se destruye la versión de clave de Cloud KMS La versión de clave está destruida. Si la versión de clave se destruye, no podrás usarla para encriptar o desencriptar datos.
Se inhabilita la versión de la clave de Cloud KMS La versión de clave está inhabilitada. Vuelve a habilitar la versión de la clave de Cloud KMS.

IR A LA PÁGINA CLAVES CRIPTOGRÁFICAS

Permiso insuficiente para usar la clave de Cloud KMS Falta la función cloudkms.cryptoKeyEncrypterDecrypter en el usuario o la cuenta de servicio que usas para ejecutar operaciones en instancias de Cloud SQL, o la versión de la clave de Cloud KMS no existe. En el proyecto de Google Cloud que aloja la clave, agrega el rol cloudkms.cryptoKeyEncrypterDecrypter a tu usuario o cuenta de servicio.

IR A LA PÁGINA CUENTAS DE IAM


Si el rol ya se otorgó a tu cuenta, consulta la sección sobre cómo crear una clave para aprender cómo crear una versión de clave nueva. Consulta la nota.
No se encontró la clave de Cloud KMS La versión de clave no existe. Crea una versión de clave nueva. Consulta la página sobre cómo crear una clave. Consulta la nota.
La instancia de Cloud SQL y la versión de clave de Cloud KMS se encuentran en regiones diferentes. La versión de clave de Cloud KMS y la instancia de Cloud SQL deben estar en la misma región. No funciona si la versión de clave de Cloud KMS se encuentra en una región global o multirregión. Crea una versión de clave en la misma región donde deseas crear instancias. Consulta la página sobre cómo crear una clave. Consulta la nota.
Se restablece la versión de clave de Cloud KMS, pero la instancia sigue suspendida La versión de clave está inhabilitada o no otorga los permisos adecuados. Vuelve a habilitar la versión de clave y otorga el rol cloudkms.cryptoKeyEncrypterDecrypter a tu usuario o cuenta de servicio en el proyecto de Google Cloud que aloja la clave.

Tabla de solución de problemas de reencriptación

Para este error… El problema podría ser… Solución
No se pudo volver a encriptar el recurso CMEK porque no se puede acceder a la clave de Cloud KMS. Asegúrate de que la versión de clave primaria esté habilitada y de que el permiso se haya otorgado de forma correcta. La versión de clave está inhabilitada o no otorga los permisos adecuados.

Se vuelve a habilitar la versión de la clave de Cloud KMS.

IR A LA PÁGINA DE CLAVES CRIPTOGRÁFICAS

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

IR A LA PÁGINA CUENTAS DE IAM

No se pudo volver a encriptar el recurso CMEK debido al error interno del servidor. Vuelve a intentarlo más tarde. Hay un error interno del servidor. Vuelve a intentar la encriptación. A fin de obtener más información, consulta Vuelve a encriptar una instancia o réplica habilitada para CMEK existente.

¿Qué sigue?