Usa 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. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página de selección de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

  4. Instala e inicializa el SDK de Cloud.
  5. Asegúrate de tener la función de administrador de Cloud SQL en tu cuenta de usuario.

    Ir a la página IAM

  6. Habilita las Cloud Key Management Service API.

    Habilita la API

  7. Habilita la API Cloud SQL Admin.

    Habilita la 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.
  3. Solo para usuarios de gcloud y API: otórgale a la cuenta de servicio acceso a la clave.
  4. Copia o escribe el ID (KMS_RESOURCE_ID) y la ubicación de la clave, y el ID (KMS_RESOURCE_ID) del llavero de claves. Necesitarás esta información cuando le otorgues a la cuenta de servicio acceso a la clave.
  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.

Crea 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 herramienta de línea de comandos 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.

Para crear una cuenta de servicio con la herramienta de línea de comandos de gcloud, ejecuta el siguiente comando:

gcloud beta services identity create --service=sqladmin.googleapis.com \
             --project=[USER_PROJECT]

En el comando anterior, se muestra un nombre de cuenta de servicio con el siguiente formato:

service-[PROJECT_NUMBER]@gcp-sa-cloud-sql.iam.gserviceaccount.com

Por ejemplo:

service-534582264470@gcp-sa-cloud-sql.iam.gserviceaccount.com

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.

Crea 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.

Advertencia: Nunca borres la versión de la clave principal que usaste en un principio para crear la instancia. No se puede restablecer la copia de seguridad de la instancia si se destruyó la versión de la clave que se usó cuando se creó la instancia. Incluso cuando se rota la versión de la clave, se debe mantener la versión original. Si se destruye la versión, no se puede volver a crear.

Para crear una clave de Cloud KMS:

Console

  1. Ve a la página Claves criptográficas.
    Ir a la página Claves criptográficas
  2. Haz clic en CREAR UN LLAVERO DE CLAVES.
  3. Agrega el Nombre del llavero de claves. Escribe este nombre, ya que lo necesitarás al momento de otorgar el acceso a la clave a la cuenta de servicio.
  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_RESOURCE_ID. Necesitarás el KMS_RESOURCE_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 [KEYRING_NAME] --location [LOCATION]
      
    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 [KEY_NAME] --location [LOCATION] \
               --keyring [KEYRING_NAME] --purpose encryption
         
    Escribe este nombre, ya que lo necesitarás al momento de otorgar acceso a la clave a la cuenta de servicio.

Otorga acceso a la clave a la cuenta de servicio

Solo debes realizar este procedimiento si usas gcloud o la API.

Para otorgar acceso a la cuenta de servicio:

  gcloud kms keys add-iam-policy-binding 
[KEY_NAME] --location [LOCATION] --keyring [KEY_RING_NAME]
--member serviceAccount:service-[PROJECT_NUMBER]@gcp-sa-cloud-sql.iam.gserviceaccount.com
--role roles/cloudkms.cryptoKeyEncrypterDecrypter

Crea una instancia de Cloud SQL con CMEK

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

Console

  1. Ve a la página Instancias de Cloud SQL en Google Cloud Console.

    Ir a la página Instancias de Cloud SQL

  2. Haz 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 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 Encriptación, elige Clave administrada por el cliente.
  10. Selecciona la clave de KMS en el menú desplegable o ingresa el KMS_RESOURCE_ID de forma manual. Solo se muestran las claves de KMS que están en el mismo proyecto y región que la instancia. 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_RESOURCE_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 la función de Cloud IAM en la clave de KMS seleccionada. IAM role on the selected KMS key.
  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_RESOURCE_ID]
  --database-version=[VERSION]
  --tier= [MACHINE_TYPE] \
  --region=[REGION] \
  --root-password=[INSERT-PASSWORD-HERE]
  

cURL

Para crear una instancia con claves de encriptación administradas por el cliente, pasa diskEncryptionConfiguration al comando. El valor de este parámetro es el KMS_RESOURCE_ID que recibiste en el procedimiento de [creación de una clave](#key).
  gcloud auth login
  ACCESS_TOKEN="$(gcloud auth print-access-token)"
  curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
       --header 'Content-Type: application/json' \
       --data '{"name":"[INSTANCE_NAME]", "region":"[REGION]",
                "diskEncryptionConfiguration" : {"kmsKeyName" : "[KMS_RESOURCE_ID]"},
                "settings": {"tier":"[MACHINE_TYPE]",
                "backupConfiguration": {"binaryLogEnabled":true, "enabled":true}}}' \
       -X POST \
       https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances
  
En este comando cURL, 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. Ve a la página Instancias de Cloud SQL.

    Ir a la página 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.

Inhabilita y vuelve a habilitar versiones de claves

Consulta los siguientes temas:

Soluciona 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… Prueba lo siguiente…
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 la función de 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. Agrega la función cloudkms.cryptoKeyEncrypterDecrypter a tu usuario o cuenta de servicio.

IR A LA PÁGINA CUENTAS DE IAM


Si la función ya se encuentra en 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.

Próximos pasos